Решения Apache и Nginx являются очень популярными сегодня, на них приходится около половины трафика во всём интернете. Эти приложения отлично работают при разных нагрузках и вступают во взаимодействие с другими, чтобы реализовать веб-стёк в полном объёме.nnЭти сервера имеют много общего, но всё же каждое приложение обладает своими достоинствами, поэтому использовать их как взаимозаменяемые не рекомендуется.nnИсторический экскурсnnВ 1995 году Роберт Маккул разработал сервер Apache, а с 1999 года им занимается фонд развития ПО Apache. Этот сервер является первым и самым распространённым проектом фонда. Администраторы останавливают свой выбор именно на мощном и гибком Apache. Его можно расширить различными модулями, или использовать разные языки программирования и при этом не нужно задействовать внешнее ПО.nnИгорь Сысоев в 2002 году начал разработку Nginx, чтобы увеличить количество одновременных соединений к ПО. И уже через два года появился публичный релиз. Из-за легковесности и возможности масштабироваться на минимальной аппаратной части компьютера это решение стало очень популярным. Администраторы отдают предпочтение Nginx, так как он эффективно используется ресурсы, выдерживает большие нагрузки, может применяться в качестве веб-сервер или как прокси.n
Разница в архитектуре обработки соединений apache vs nginx
Apache использует за основу модули мультипроцессинга, которые влияют на скорость обработки запросов. С их помощью администраторы могут изменять обработку соединений.nnОсновные модули мультипроцессинга Apache:n
- mpm_prefork – один процесс обрабатывает одно соединение. Если число запросов не превышает количество процессов, то модуль работает быстро, но если запросов будет намного больше, то модуль теряет свою производительность. Его можно использовать с другими компонентами, где не применяется много потоков. К примеру, при работе с PHP этот модуль можно использовать в качестве безопасного метода.
- mpm_worker – воспроизводит несколько процессов, которые управляют многими потоками. Для обработки одного соединения необходим один поток. Этот модуль характеризуется большей производительностью, чем mpm_prefork. Количество потоков превышает процессы, поэтому соединение сразу обрабатывается.
- mpm_event – во многом похож на mpm_worker, но может функционировать с соединениями keep-alive. Он создаёт отдельно потоки как для активных, так и для keep-alive соединений, поэтому работает быстрее.
ginx был разработан позднее Apache, поэтому при его проектировании учитывались проблемы масштабирования. В основе Nginx лежат асинхронные неблокирующие event-driven алгоритмы.nnNginx создаёт процессы-воркеры, которые работают с огромным количеством соединений. Эти процесс являются очень эффективными, ведь в их основе лежит быстрый цикл. Каждый воркер занимается обработкой соединений и отвлекается только в том случае, если появляется новое событие. После обработки каждое соединение переносится в event loop, где дальше происходит обработка в асинхронном режиме. После закрытия соединение изымается из цикла. Такой подход даёт много возможностей Nginx при масштабировании ограниченных ресурсов.n
Функционал nginx и apache при работе с разным контентом
Apache применяется для статического контента благодаря стандартным file-based методам, выбор модулей напрямую влияет на его производительность. Установка Аpache позволяет раздавать и динамический контент, так в каждый воркер встраивается необходимый язык. Запросы обрабатываются только с помощью сервера, без использования внешних компонентов, что делает процесс конфигурирования проще.nnNginx не может сам производить обработку запросов к динамическому контенту. Это приложение сначала должно связаться с внешним процессором, сгенерироваться с ним и получить ответ. По завершении этого механизма клиент сможет получить результат. Администраторы должны осуществить настройку Nginx с процессами, которые для приложения являются известными. Это усложняет настройку, так как очень трудно угадать количество возможных соединений.nnХотя этот метод обладает и плюсами. Так, из-за отсутствия интерпретатора в каждом воркере при статистическом контенте Nginx работает замечательно. Запросы к интерпретатору выполняются только при необходимости.n
Распределенная и централизованная конфигурация
Настройка Apache позволяет произвести включение конфигурирования на уровне директорий. Это решение поможет найти в скрытых файлах .htaccess конфигурационные директивы. При каждом запросе оно будет проверять компоненты в скрытом файле и выполнять директивы в этих файлах. Таким образом, происходит децентрализация конфигурирования сервера, таким образом можно ограничить доступ и произвести аутентификацию или авторизацию.nnЭти настройки можно произвести и в самом Apache, но файлы .htaccess обладают многими плюсами:n
- их применение предотвращает перезагрузку сервера;
- помогает осуществлять контроль за некоторыми веб-приложениями непривилегированным пользователям.
Установка Nginx не может интерпретировать файлы .htaccess, но обладает тоже многими преимуществами:n
- Решение Nginx обладает улучшенной производительностью, ведь Apache проверяет каждый файл на уровне директорий, а потом его читает и интерпретирует. Nginx обрабатывает эти запросы быстрее, так как на один запрос он делает один directory lookup.
- В Apache ответственными являются даже обычные пользователи, так как конфигурация на уровне директорий распределяется между ними. Решение Nginx обладает большей безопасностью, только администратор является ответственным лицом.
Интерпретирование запроса в файлах и URI
Apache может производить интерпретирование запроса в качестве ресурса в веб-файлах, при этом применяя конфигурационные блоки <Directory> или <File>, или как URI, применяя блоки <Location>. Это приложение создавалось как сервер, поэтому он интерпретирует все запросы как ресурсы в своеобразной иерархичности файлов.nnЕсли запрос не подходит к файлам, то тогда можно использовать метод URI, или сделать настройки файловой системы более гибкими. Хотя альтернативные методы расширяют возможность Apache, но всё равно главным является метод работы с файлами.nnNginx может работать как веб-сервер для сайта или в качестве прокси-сервера, поэтому главным является работа с URI, а отправка запросов к файлам производится при большой необходимости.nnРассматривание всех запросов как URI, придаёт этому решению большей гибкости, в результате Nginx одновременно исполняет роль сервера и прокси. Его конфигурация предназначена для выполнения ответов на шаблоны запросов, поэтому он редко использует файловую систему.n
Расширение Apache и Nginx с помощью модульной системы
Решение Apache даёт возможность использовать или не использовать модули системы, что помогает решить много поставленных задач. Так как эта платформа является достаточно зрелой, огромное количество модулей помогают изменить ключевые характеристики веб-сервера. Модули не только занимаются обработкой динамических запросов, но также могут изменить URL, произвести аутентификацию пользователей, проксирование, сжатие, шифрование, кеширование и т. д. Поэтому функциональность ядра значительно расширяется.nnВ решение Nginx тоже применяются модули, но их следует выбрать и скомпилировать с ядром веб-сервера, ведь они не являются динамическими. Пользователи, которые не занимались сборкой приложений вручную, считают Nginx негибким. Но именно это приложение поможет решить проблему с созданием нестандартного модуля.nnМодули в Nginx можно включить выборочно, чтобы задать веб-серверу определённые параметры. Применение Nginx является безопасным, ведь произвольный модуль нельзя подключить к серверу. В общем модульная система Nginx выполняет те же функции, что и модули Apache.n
Экосистема и поддержка при работе с приложениями
Благодаря долгому использованию Apache обладает прекрасной поддержкой, ведь можно найти множество информации от самих производителей и от сторонних пользователей. Уже описаны все возможные сценарии функционирования этого приложения. Сегодня администраторы имеют огромный опыт работы с этим решением.nnNginx является необходимым в тех областях, где необходимо создать высокую производительность. Весь процесс создания и материалы изначально велись только на русском языке. Но в скором времени появился перевод и на английский, так что теперь с поддержкой этого решения нет проблем.n
Как работает связка Nginx Apache?
После детального изучения каждого сервера можно определиться, какой из них подойдёт для воплощения ваших идей, но можно для достижения высоких результатов использовать их совместно.nnЧасто сначала размещают Nginx (фронтенд), а потом Apache (бэкенд) в виде реверс-прокси. Благодаря использованию этой схемы конкурентные запросы будут обрабатываться достаточно быстро.nnПри этом Nginx будет заниматься обслуживанием статического контента, а при работе с динамическим контентом сначала запрос будет принимать Apache, рендерить веб-страницу и передавать её Nginx, который уже будет отправлять её пользователю. Nginx отвечает за сортировку запросов и обрабатывает их, поэтому нагрузка на Apachе существенно уменьшается.n
Выводы
Эти веб-серверы характеризуются мощностью, функциональностью и гибкостью. При выборе сервера сначала необходимо поставить конкретные цели и провести тестирование паттернах для выбранного приложения.nnЭти решения во многом отличаются друг от друга, поэтому необходимо учитывать время для запуска приложений, их производительность и возможности. Найти идеальный сервер невозможно, поэтому необходимо подбирать его только под конкретные задачи и цели.nnЕсли Вам необходимо выполнить настройку сайта на apache или nginx, оптимизировать работу, скорость загрузки web сайта обращайтесь [email protected]