2

Кто-нибудь может объяснить, почему установка nginx и обратного прокси-сервера Apache быстрее, чем просто Apache?

Я уже переместил все свои статические файлы в s3 (я слышал, что nginx лучше справляется со статическими файлами), так какие еще преимущества он имеет?

2 ответа2

4

Apache имеет две модели для обработки соединений от клиентов: рабочий и prefork. Prefork очень ресурсоемкий (требует полного процесса для каждого клиентского соединения), но все еще широко используется с PHP. Работник намного лучше с точки зрения ресурсов, но все еще требует выделенного потока для каждого клиентского соединения.

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

Однако это не делает его "лучше", чем Apache для всех случаев. Обычно это лучше, чем Apache, для обслуживания статических файлов, но не для динамического контента, генерируемого из веб-приложения (т.е. вы не хотите, чтобы сотни соединений блокировались, пока один из запросов выполняет запрос к базе данных). Вот почему вам все еще нужны fastcgi, uWSGI, passenger или даже apache+mod_wsgi+passenger, чтобы переложить работу веб-приложения на сервер приложений. Эти внутренние процессы по-прежнему будут использовать один поток на запрос, но, по крайней мере, только для запросов, которым требуется динамическое содержимое.

Таким образом, основные причины, по которым nginx + apache быстрее, чем у простого apache, заключаются в том, что (A) статические файлы обрабатываются гораздо эффективнее, (B) снижается нагрузка на (тяжелые) ресурсы Apache.

Наконец, что касается "других преимуществ" вашего вопроса: nginx также обрабатывает SSL-соединения быстрее, чем Apache, хотя, опять же, это не делает его лучше для всех случаев. Например, если вам нужна детальная аутентификация с использованием клиентских сертификатов, вам все равно понадобится Apache для обработки SSL. Если вы просто запускаете страницы по HTTPS для шифрования, тогда nginx даст вам небольшой прирост скорости.

1

Проще говоря, Apache отлично подходит для динамической обработки контента, но вам нужно дождаться его ответа.

Обратный прокси (размещение Nginx между пользователем и Apache) экономит ваше время, потому что apache отвечает на 127.0.0.1, который находится на той же машине, как если бы вы обращались к localhost.

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

Вы можете проверить эту схему

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .