SebWeo.com
Когда я начинал свой путь в веб-разработке, вопрос «какой веб-сервер использовать?» практически не стоял. Ответ был один — Apache. Этот проект с открытым исходным кодом, запущенный еще в 1995 году, долгое время был безоговорочным лидером и, по сути, построил значительную часть того интернета, который мы знаем сегодня. Хотя Nginx сегодня перехватил пальму первенства по скорости, Apache остается чрезвычайно популярным, надежным и гибким решением.
В этой статье я хочу отдать должное этому «патриарху» веб-серверов. Мы разберемся, как он работает, в чем его уникальные преимущества (да, они есть!), где он все еще незаменим, и как его базово настроить.
В отличие от Nginx с его асинхронной моделью, Apache традиционно использует модель «процесс или поток на соединение». То, как именно он управляет этими процессами и потоками, определяется MPM (Multi-Processing Module) — модулем мультиобработки. Это сердце Apache, которое можно изменять в зависимости от потребностей.
Самые распространенные MPM:
mod_php, так как многие PHP-расширения не были потокобезопасными.Выбор MPM зависит от ваших задач и операционной системы, но сегодня для новых установок обычно рекомендуется Event MPM.
Несмотря на преимущество Nginx в скорости обработки статики и большого количества соединений, Apache имеет несколько козырей в рукаве:
.htaccess — Гибкость на уровне папкиЭто, пожалуй, самое главное преимущество Apache, особенно в мире виртуального хостинга. Файл .htaccess позволяет вам изменять конфигурацию сервера (правила перенаправления, контроль доступа, настройки PHP) на уровне отдельной папки, не имея доступа к главному конфигурационному файлу сервера.
.htaccess?.htaccess в текущей папке и во всех родительских папках вплоть до корня сайта. Если файл найден, Apache читает его и применяет указанные директивы «на лету».Это невероятно удобно для пользователей виртуального хостинга, но имеет свою цену: Apache вынужден постоянно искать и читать эти файлы при каждом запросе, что снижает производительность. Nginx не поддерживает аналог .htaccess именно из соображений быстродействия.
За десятилетия существования для Apache было создано невероятное количество модулей для решения самых разнообразных задач:
mod_rewrite: Мощный инструмент для переписывания URL (основа «человекопонятных» URL во многих CMS).mod_php: Классический способ интеграции PHP (хотя сегодня PHP-FPM является лучшим выбором).mod_security: Популярный веб-файрвол (WAF).mod_ssl: Для работы с HTTPS.Хотя Nginx тоже имеет модули, их экосистема значительно меньше, и часто добавление стороннего модуля требует перекомпиляции Nginx.
Конфигурационные файлы Apache (обычно httpd.conf или apache2.conf и файлы виртуальных хостов) имеют очень гибкий синтаксис. Благодаря своей долгой истории, Apache прекрасно совместим практически с любым ПО и операционной системой.
За годы существования накопилась огромная база документации, форумов, статей и готовых решений для Apache. Найти ответ на любой вопрос обычно не составляет труда.
.htaccess на скорость: Удобство .htaccess оборачивается дополнительными проверками файловой системы при каждом запросе.
mod_php)Давайте я покажу пример простого виртуального хоста для Apache, использующего классический mod_php. Этот подход сейчас не является самым производительным (Nginx + PHP-FPM лучше), но он до сих пор часто встречается на виртуальных хостингах.
Файл конфигурации (например, /etc/apache2/sites-available/my-site.conf):
<VirtualHost *:80>
# Имя сервера
ServerAdmin webmaster@example.com
ServerName example.com
ServerAlias www.example.com
# Корневая папка сайта
DocumentRoot /var/www/my-site/public
# Настройки логов
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# Настройки для папки сайта
<Directory /var/www/my-site/public>
# Разрешаем использование .htaccess
AllowOverride All
# Разрешаем доступ
Require all granted
# Настройки для PHP (если используется mod_php)
# Например, включение отображения ошибок для разработки
php_flag display_errors on
php_value error_reporting E_ALL
</Directory>
</VirtualHost>
# Конфигурация для HTTPS (порт 443) будет похожей,
# но с добавлением директив SSLEngine, SSLCertificateFile и т.д.
# О переходе на HTTPS я писал здесь:
# https://sebweo.com/ru/kak-perejti-s-http-na-https-prostaya-instruktsiya-ustanovki-ssl/
После создания конфигурации ее нужно включить (sudo a2ensite my-site.conf) и перезагрузить Apache (sudo systemctl reload apache2).
Хотя Nginx вырвался вперед в гонке за максимальную производительность, Apache HTTP Server остается мощным, гибким и невероятно стабильным решением. Его главные козыри — это простота настройки через .htaccess (что делает его королем виртуального хостинга) и огромная экосистема модулей.
По моему мнению, выбор между Nginx и Apache зависит от конкретной задачи. Для высокопроизводительных сайтов с большим количеством статики и одновременных соединений лучше подойдет Nginx. Но если вам нужна максимальная гибкость конфигурации на уровне пользователя или специфические модули Apache, он все еще может быть превосходным выбором. А часто лучшим решением является их комбинация: Nginx как фронтенд, а Apache как бэкенд.
Когда речь заходит о веб-серверах, два имени всегда на слуху: Apache и Nginx. Apache —…
В мире веб-разработки мы постоянно сталкиваемся с проблемой: "А у меня на компьютере все работает!".…
На заре моей карьеры веб-разработчика все было относительно просто: установил локальный сервер (помните Denwer?), положил…
Если вы когда-либо интересовались, как ускорить свой сайт на WordPress, вы, наверное, слышали о "кешировании".…
Когда мы говорим о веб-разработке, первое, что приходит на ум — это HTML и CSS.…
В мире SEO есть фраза, которую повторяют так часто, что она уже стала клише: "Content…