Серверы Apache против Nginx: краткий обзор этих двух типов серверов
Опубликовано: 2022-01-03Интернет работает на наборе серверов. Однако они имеют другую настройку, чем стандартная настольная машина. Сообразительный системный администратор или бэкенд-разработчик оптимизирует этот выбор в соответствии со своими потребностями. Основной способ сделать это — выбрать серверное программное обеспечение. Одним из популярных сравнений в этой области является Apache vs Nginx.
Это происходит по ряду причин, но двумя основными из них являются показатели использования и долговечность. Nginx новее и, возможно, лучше подходит для современных веб-стандартов. Тем не менее, Apache также не выдерживает никакой критики и так же способен обслуживать веб-сайты для миллионов пользователей по всему миру.
В этом посте мы сравним Apache и Nginx. Мы собираемся рассмотреть поверхностные элементы, такие как популярность обоих типов серверов. Тем не менее, мы также рассмотрим технические особенности и соображения для каждого из них. К концу вы будете знать все тонкости обоих типов программного обеспечения и какое из них лучше всего подходит для вашего сервера.
Что такое Apache и Nginx
Читая эту статью, вы, вероятно, понимаете, что для обеспечения оптимальной производительности веб-серверу требуется специальное программное обеспечение. Хотя в этой статье не рассматривается, что такое серверное программное обеспечение или что оно делает в общем смысле, мы рассмотрим два ведущих решения для вашего сервера:
- Апач. Это бесплатное программное обеспечение с открытым исходным кодом, которое предустановлено в большинстве «дистрибутивов» Linux. Он существует с 1995 года и благодаря этим двум факторам занимает лидирующие позиции на рынке.
- Nginx. Хотя это относительный ребенок по сравнению с другим серверным программным обеспечением, у Nginx много пользователей. На момент написания статьи он почти совместил с Apache самое популярное серверное программное обеспечение (подробнее об этом позже).
Стоит отметить, что Apache десятилетиями лидировала в области серверного программного обеспечения и за это время завоевала большую долю рынка. Тем не менее, Nginx сейчас лидирует, хотя и ненамного.

ЗАГОЛОВОК: Синяя линия здесь из Google Trends представляет поисковые запросы Apache с 2004 года, а красная линия относится к Nginx.
Что касается того, что предлагают Apache и Nginx, то на эту тему можно написать несколько книг. Тем не менее, мы попытаемся сделать это менее чем за 2000 слов, начиная с общего набора функций обоих.
Общие характеристики Apache и Nginx
Поскольку Apache и Nginx являются программным обеспечением веб-сервера HTTP, вы найдете много общего. Например, они оба с открытым исходным кодом, что означает, что они будут работать на различных системах. По сути, оба являются гибкими и расширяемыми, но для каждого типа сервера существуют разные цели.
Однако сравнение Apache и Nginx не является верным, поскольку обе части программного обеспечения по-разному подходят к процессу настройки веб-сервера. На самом деле оба лучше подходят для разных приложений.
В оставшейся части этой статьи мы покажем вам это, разбив технические детали для Apache и Nginx. Вот что мы собираемся рассказать:
- Техническая разбивка каждого типа серверного программного обеспечения, включая обработку запросов и соединений, технологии кэширования и многое другое.
- Настройка и расширение Apache, включая сведения о его файле
.htaccess
и модулях. - Как вы настраиваете Nginx и его расширяемость.
Это не кажется чем-то особенным, но вы можете распаковать каждый из них в несколько других подразделов. Мы сделаем именно это, начиная с технических отличий.
Технические различия между Apache и Nginx
В общем смысле Apache и Nginx выбирают почти уникальные и эксклюзивные пути для достижения одной и той же цели оптимального веб-сервера. Если вы сравните каждый из них в широком смысле, вы увидите, насколько они разные:
- Apache использует архитектуру, управляемую процессами, а Nginx использует архитектуру, управляемую событиями.
- Хотя оба типа серверируют статические файлы (хотя и по-разному), Nginx не серверирует динамический контент.
- Каждый тип программного обеспечения интерпретирует HTTP-запросы по-своему.
Мы собираемся рассмотреть некоторые из этих аспектов, начиная с вопросов обработки соединений.
Обработка соединения
Вы обнаружите, что Apache и Nginx придают большое значение тому, как каждый тип обрабатывает соединения и запросы. Например, Apache использует подход, управляемый процессами, при котором он создает новый запрос для каждого потока, используя модуль обработки с именем mpm_prefork
. Это может быть быстро, если количество запросов меньше, чем количество процессов, но после этого происходит снижение производительности.
Фактически, Apache предлагает большую гибкость для создания алгоритма обработки соединений в соответствии с вашими потребностями с использованием mpm_prefork
, mpm_worker
и mpm_event
. Напротив, дизайн Nginx таков, что он пытается смягчить отрицательные аспекты производительности, которые есть у Apache.
Это достигается за счет запуска рабочих процессов на основе событий. Это означает, что Nginx отлично подходит для масштабирования, поскольку он может обрабатывать несколько запросов в одном потоке.
Запросить интерпретацию
И Apache, и Nginx также используют другой подход к интерпретации запросов, которые получит сервер. Например, Nginx использует универсальный идентификатор ресурса (URI) запроса для его преобразования в физический элемент файловой системы.
Вы можете увидеть это в формате некоторых блоков конфигурации, таких как server
и location
. Они работают вместе, чтобы проанализировать URI и превратить его во что-то в файловой системе.
server { listen 80; server_name example.org www.example.org; root /data/www; location / { index index.html index.php; } location ~* \.(gif|jpg|png)$ { expires 30d; } location ~ \.php$ { fastcgi_pass localhost:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
Напротив, корни Apache как «чистого» программного обеспечения веб-сервера означают, что он предполагает и действует на основе того, что каждый запрос является ресурсом в файловой системе. Однако Apache также может работать с URI, где запрос является более абстрактным. Несмотря на это, документация предостерегает от использования чего-либо, кроме файлового метода.
Статическая и динамическая производительность
Когда дело доходит до производительности, сравнение Apache и Nginx является важным фактором почти для каждого пользователя. В контексте сравнение сводится к тому, как каждый тип программного обеспечения обслуживает статический и динамический контент.
Поскольку встроенная архитектура Apache напрямую работает с файловой системой, он отлично подходит для обслуживания статического содержимого. Однако он также будет обрабатывать динамический контент на сервере, что является аналогичной реализацией, которая также является гибкой, если вам нужно заменить модули в соответствии с вашими требованиями.

Для сравнения, Nginx вообще не обрабатывает динамический контент. Это сложнее, потому что Nginx должен передавать эти запросы внешнему воркеру или протоколу. Тем не менее, вы обнаружите, что потери производительности меньше, и Nginx может использовать другие протоколы с большей адаптивностью.
Для статического контента это может быть так же просто, как и Apache, а в некоторых случаях даже лучше. Это связано с тем, что Nginx может связываться с интерпретатором, когда это необходимо, а не быть неотъемлемой частью общей производительности серверного программного обеспечения.
Модель распределенной конфигурации Apache
Неудивительно, что Apache и Nginx по-разному подходят к конфигурации своего сервера. Короче говоря, конфигурация Apache и Nginx зависит от того, можете ли вы сделать это на уровне каталога.
Apache использует распределенную модель, что означает, что вы можете настроить сервер для каждого каталога. Вы сделаете это через файлы .htaccess
. Apache проверит каждый компонент запрошенного пути к файлу на наличие файла .htaccess
и выполнит внутренние директивы.

На наш взгляд, файл .htaccess
гораздо более гибкий, чем любая другая система. Его можно быстро найти, открыть и отредактировать. Сила на кончиках ваших пальцев для выполнения множества мощных действий велика. Вы также обнаружите, что сервер Apache будет обрабатывать файл .htaccess
всякий раз, когда он его обнаружит, без необходимости перезагрузки сервера.
Это также замечательно, если вам нужно позволить некоторым пользователям контролировать аспекты своих сайтов, влияя на всю конфигурацию сервера. Вот почему серверы Apache являются основой платформ общего хостинга, наряду с их гибкой модульной системой.
Модули Apache
Вы можете динамически загружать и выгружать модули с помощью Apache. Это похоже на использование плагинов и тем в WordPress: основная функциональность Apache выполняет основные шаги, а активные модули помогают вам создать уникальный опыт.
Эти модули могут охватывать много вопросов, и их много. Такие модули, как mod_php
, могут изменить основную функциональность сервера, а популярный mod_rewrite
позволяет выполнять множество других задач:
- Ограничение IP-адресов.
- Изменение домашней папки для вашего сайта.
- Проведение 301 редиректа.
- Установка домашней страницы по умолчанию.
Между .htaccess
и системой динамических модулей Apache представляет собой ясный способ для большинства пользователей возиться и оптимизировать веб-сервер и сайт.
Модель централизованной конфигурации Nginx
Nginx использует централизованный подход к настройке сервера. Это означает, что существует один файл конфигурации (оканчивающийся расширением .conf
). Иногда это трудно найти в зависимости от структуры вашего сервера.
Это имеет некоторые явные недостатки для начинающего владельца сайта, который хочет внести изменения в сервер. Для сайтов на виртуальном хостинге настроить сервер практически невозможно. Гибкости также гораздо меньше.
Тем не менее, есть также несколько преимуществ, основанных на производительности. Поскольку Nginx имеет только одно место для файла конфигурации, а Apache потенциально может использовать несколько мест, поиск будет только один. Кроме того, поиск этого файла конфигурации также снижает производительность.
Вы также обнаружите, что, поскольку конфигурация является центральной, владельцы сайтов не будут нести ответственность за управление аспектами, связанными с безопасностью. Это еще одно преимущество подхода Nginx, поскольку ответственность за безопасность лежит только на плечах системного администратора.
Модули Nginx
Справедливости ради стоит сказать, что модульная система Nginx далеко не так либеральна и гибка, как Apache, несмотря на то, что предлагает такую же функциональность. Например, возьмем правила перенаправления Nginx:
server { listen 80; server_name www.olddomain.com; return 301 $scheme://www.newdomain.com$request_uri; }
Это связано с тем, что вы не можете загружать их как динамические элементы с помощью Nginx. Возвращаясь к нашей аналогии с WordPress, это похоже на необходимость переустановки всего сайта для деактивации плагина.
На первый взгляд, это не работает и кажется огромным ущербом. Однако то, чего вам не хватает в гибкости, вы получаете в стабильности ядра и функциональности. Если вы знаете, что нужно вашему серверу во время сборки, вы можете включить все эти компоненты и модули.
Также следует учитывать аспект безопасности. Поскольку вы не будете менять местами динамические модули в своей системе, вы будете знать, что каждый элемент делает и может делать. Это делает структуру и архитектуру вашего сервера понятной и простой в обслуживании, а также более производительной.
Почему вы бы использовали Apache или Nginx
Подводя итог, Apache против Nginx не является однозначным решением. Во-первых, обычное мнение о том, что Nginx работает лучше, чем Apache, вводит в заблуждение. Если вы правильно настроите сервер Apache, он будет столь же производительным, как и эквивалентный сервер Nginx.
Apache отлично подходит для простого обслуживания как статического, так и динамического контента. Он предлагает огромные возможности для новичков в управлении сервером, гибкость в настройке. В общем случае вам потребуется меньше технических знаний для настройки сервера Apache, чем Nginx.
Тем не менее, производительность — это то, где сияет Nginx. Настройка его архитектуры гарантирует, что он может достичь большего за цикл процессора, чем сервер Apache. И это несмотря на меньшую гибкость в настройке.
В некоторых случаях у вас может не быть выбора между Apache и Nginx, особенно если вы используете общий хост. Однако, если вы это сделаете, выбор будет зависеть от вашего опыта, целей и потребностей.
Резюме
Ваш выбор серверного программного обеспечения имеет значение, и в вашем распоряжении множество вариантов. На самом деле вы не будете выбирать тип сервера из левого поля. Вместо этого вы часто будете выбирать из двух или трех типов. Apache и Nginx — часто рассматриваемое сравнение, потому что оба предлагают выдающуюся долгосрочную производительность и надежность.
В этой статье было рассмотрено сравнение Apache и Nginx по этим двум и другим направлениям. Существует целый ряд технических соображений, над которыми стоит поразмыслить, и это повлияет на ваш выбор больше, чем популярность конкретного серверного программного обеспечения среди сообщества.
У вас есть мнение по поводу Apache и Nginx? Поделитесь с нами своими мыслями в разделе комментариев ниже!