производительность — если Nginx + php-fpm, предположительно, будет намного быстрее, чем Apache + mod-Stack Overflow

У меня есть веб-приложение на основе PHP, работающее на сервере Apache, которое имеет значительный объем обработки php в серверной части. Поскольку общая производительность низкая, я работал над улучшением производительности приложения. Сначала я следовал таким методам, как кэширование на стороне клиента, включение gzip, минимизация js-css, которые позволили значительно повысить производительность.

Чтобы еще больше повысить производительность, я хотел попробовать улучшить уровень сервера. Поэтому я попытался сравнить производительность приложения, разместив его на серверах Apache и Nginx.

  • Версия Nginx — 1.0.15;
  • Версия Apache — 2.2.15;
  • версия php — 5.4.38;

В Apache я использовал Apache + mod-php, а в Nginx я использовал Nginx + php-fpm для этого сравнения. Как объяснялось в большинстве учебных пособий, я настроил количество работников Nginx равным количеству ядер в моем процессоре. Я использовал jmeter, чтобы провести стресс-тестирование, и ниже приведены графики, которые я мог из него сгенерировать.

На всех этих графиках ось X — это каждый отправленный мной запрос, а ось Y — это миллисекунды для получения ответа на каждый запрос.

Доступ к странице входа

введите описание изображения здесь

Отправить страницу входа

введите описание изображения здесь

Доступ к домашней странице

введите описание изображения здесь

Я смог выполнить тестирование до 100 одновременно работающих пользователей, вошедших в систему в течение 1 секунды, потому что после этого он начал отбрасывать запросы в обеих настройках сервера.

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

Когда я прошел другие сравнения, которые сделали люди, я обнаружил, что они утверждают, что Nginx намного быстрее в параллельных доступах, таких как следующие графические представления.

http://www.eschrade.com/wp-content/uploads/2014/01/event-mpm-nginx.gif

Но я не смог наблюдать каких-либо существенных различий в производительности Nginx по сравнению с Apache даже при 100 одновременных доступах в течение 1 секунды.

Ниже приведены мои вопросы.

  1. Предполагается ли, что Nginx + php-fpm выполняет серверные операции намного быстрее, чем Apache + mod-php, благодаря эффективному использованию памяти и других ресурсов?
  2. Рекомендуется ли только Nginx для статической защиты сервера, а не для сайтов с интенсивной работой сервера?
  3. Есть ли лучший способ настроить Nginx для повышения производительности?

12

Решение

Я провел еще несколько исследований по этому вопросу и обнаружил, что Nginx будет хорошо работать со статическими ресурсами, а не с другой динамической доставкой контента, такой как обработка php, что необходимо делать с помощью внешнего приложения, такого как php-fpm. Так что если у вашего веб-приложения есть узкое место в производительности при обработке php, то замена Apache на Nginx не будет решением.

Следующая статья объясняет подробное исследование, проведенное по сравнению статической доставки контентов и результатов php-скриптов с использованием Apache + mod_php и Nginx + php-fpm.

http://blog.a2o.si/2009/06/24/apache-mod_php-compared-to-nginx-php-fpm/

Ниже приведены выводы, изложенные в вышеприведенной статье.

Заключение или «стоит ли переходить с Apache на Nginx?»

  • Краткий ответ: я не знаю.
  • Более длинные ответы здесь:

    1. Если вы размещаете много веб-сайтов, а пользователи используют файлы .htaccess и часто их изменяют, то ответ, вероятно, «нет». Стоимость перехода на Nginx и преобразования всей конфигурации в новый формат обычно достигает стоимости покупки другого сервера.
    2. Если у вас есть одно приложение на нескольких серверах, и большая часть вычислительной мощности не расходуется на обслуживание статического содержимого файла, ответ также, вероятно, «нет».
    3. Если вы в основном обслуживаете статический контент, ответ, очевидно, «да».
    4. Если вы создаете новую систему для решения веб-хостинга, ответ, вероятно, «да», при условии, что пользователи не пропустят функциональность .htaccess или будут предоставлены другими способами.
    5. Если вы консолидируете сервисы с помощью какой-либо технологии виртуализации, тогда ответ, вероятно, «да», поскольку Nginx имеет тенденцию занимать меньше памяти, чем Apache.
    6. Если вы рассматриваете Nginx как свою оптимизацию PHP-сервера, посмотрите еще раз, но не на Nginx, на код своего приложения.
19

Другие решения

У меня есть сайт с балансировкой нагрузки на 3 сервера. 2 из них работают на nginx с PHP-FPM (новые). Однако основной сервер на Apache + PHP FastCGI достигает примерно 40% трафика. Недавно я подумал об изменении Apache также на nginx; поэтому я установил nginx на тот же сервер для другого IP и провел несколько тестов. Но, что удивительно, Apache может генерировать страницу за 10-20 миллисекунд при каждом обращении, а nginx — 60-70 миллисекунд. nginx работает быстрее для статических файлов, но если у вас есть CDN, вам не нужно беспокоиться о статическом содержимом. Apache — отличный сервер Но попробуйте FastCGI, а не модуль PHP.

3

По вопросам рекламы [email protected]