Поиск по сайту:

Apache против Nginx: какой веб-сервер лучше?


Вместе Nginx и Apache обслуживают более 50% Интернета. Но в последние годы Apache переживает спад в пользу Nginx. Действительно ли Nginx лучше и есть ли преимущества в использовании Apache?

Nginx новее и быстрее

Nginx намного легче, чем Apache. Эта проблема коренится в дизайне — под капотом Apache должен создавать новый поток процесса для каждого соединения. И хотя он может обрабатывать 10 потоков со скоростью, сравнимой с Nginx, при масштабировании до сотен одновременных подключений Nginx становится решающим лидером.

Nginx работает по-другому и может обрабатывать несколько подключений в рамках одного потока процесса. Он также предназначен для работы в качестве простого обратного прокси-сервера, поэтому вместо того, чтобы нести накладные расходы полного веб-сервера, он просто предназначен для перемещения байтов данных из одного места в другое. Nginx может быть более чем в два раза быстрее, чем Apache, при обслуживании статического контента и при этом гораздо менее интенсивно использовать ЦП, что делает его превосходным для работы в системах с низким энергопотреблением.

Однако эта скорость действительно имеет значение только при одновременном предоставлении статического контента большому количеству пользователей. Когда вы начинаете обслуживать динамический контент, узкое место находится где-то еще, например, в вашем PHP-движке, веб-приложении или базе данных.

Поскольку Nginx также является обратным прокси-сервером, вы можете использовать его перед другим сервером (даже Apache) специально для размещения статического контента. Полезным примером является рендеринг приложений Node на стороне сервера, где HTTP-запросы к динамическим страницам необходимо перенаправлять на сервер, на котором работает Express, но статические ресурсы (изображения, таблицы стилей и т. д.) можно обслуживать из Nginx. Накладные расходы при этом минимальны и могут значительно ускорить статический контент.

Apache более настраиваемый

Apache больше ориентирован на то, чтобы быть веб-сервером, и имеет некоторые полезные функции, такие как файлы конфигурации на основе каталогов и виртуальные хосты. Это упрощает запуск нескольких сайтов на одном сервере. Например, вы можете добавить такой блок VirtualHost в /etc/httpd/conf/httpd.conf:

<VirtualHost 127.0.0.1:80>
  DocumentRoot /var/www/html
  ServerName www.firstsite.com
</VirtualHost>

Это заставит Apache направлять все запросы к www.firstsite.com в определенную папку, которая может иметь свои собственные настройки, независимые от других сайтов, работающих на сервере. Это можно дополнить файлами .htaccess , которые могут перезаписать конфигурацию сервера для определенной папки. Однако запуск сайтов с файлами .htaccess медленнее, чем с использованием глобальной конфигурации, и рекомендуется только в тех случаях, когда вы хотите разрешить другим пользователям изменять настройки сервера для каталога, не затрагивая глобальную конфигурацию (общую хостинг является основным примером этого).

Nginx также может обслуживать несколько доменов с одного сервера и направлять их в свои собственные папки, но это не так настраивается, особенно из-за отсутствия функциональности, аналогичной .htaccess. Но если вам действительно нужны такие функции, вы можете использовать Nginx в качестве обратного прокси-сервера для доступа к контенту, размещенному в другом месте, даже работающем на другом экземпляре Nginx или нескольких контейнерах Docker.

Apache также имеет гораздо лучшую поддержку плагинов в виде модулей, которые можно динамически загружать без перезапуска сервера. Nginx также поддерживает модули, но только недавно добавил загрузку модулей, поэтому многие модули по-прежнему требуют исправления двоичного файла.

Какой сервер выбрать?

Несмотря на недостатки, они оба достойные веб-серверы. Они бесплатны и имеют открытый исходный код, хотя у Nginx есть платная версия под названием Nginx Plus, которая добавляет программный балансировщик нагрузки поверх Nginx с открытым исходным кодом. Оба сервера безопасны, имеют хорошие сообщества поддержки и просты в настройке. Хотя Nginx выигрывает в скорости, оба они сопоставимы при обслуживании динамического контента.

Если вы не уверены, что использовать, используйте Nginx. В общем, если вы используете систему Unix, Nginx — хороший выбор просто из-за его скорости и простоты использования. Если вам нужна дополнительная настройка, особенно если вы запускаете много веб-сайтов на одном сервере, Apache может работать лучше.

Следует отметить, что если вы используете PHP, настройка для Nginx немного отличается. Apache изначально запускает PHP в том же процессе, напрямую взаимодействуя с механизмом PHP. Nginx запускает его в отдельном процессе (PHP-FPM) и взаимодействует с ним как с обратным прокси-сервером. Оба метода одинаково быстры, но ваша конфигурация будет отличаться.

Nginx и Apache полностью поддерживают любую систему Unix, включая FreeBSD. Хотя технически у Nginx есть версия для Windows, она не самая лучшая. Apache полностью поддерживается в Windows и поэтому является основным веб-сервером на этой платформе.