У меня есть веб-приложение на основе PHP, работающее на сервере Apache, которое имеет значительный объем обработки php в серверной части. Поскольку общая производительность низкая, я работал над улучшением производительности приложения. Сначала я следовал таким методам, как кэширование на стороне клиента, включение gzip, минимизация js-css, которые позволили значительно повысить производительность.
Чтобы еще больше повысить производительность, я хотел попробовать улучшить уровень сервера. Поэтому я попытался сравнить производительность приложения, разместив его на серверах Apache и Nginx.
В 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 секунды.
Ниже приведены мои вопросы.
Я провел еще несколько исследований по этому вопросу и обнаружил, что 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?»
Более длинные ответы здесь:
У меня есть сайт с балансировкой нагрузки на 3 сервера. 2 из них работают на nginx с PHP-FPM (новые). Однако основной сервер на Apache + PHP FastCGI достигает примерно 40% трафика. Недавно я подумал об изменении Apache также на nginx; поэтому я установил nginx на тот же сервер для другого IP и провел несколько тестов. Но, что удивительно, Apache может генерировать страницу за 10-20 миллисекунд при каждом обращении, а nginx — 60-70 миллисекунд. nginx работает быстрее для статических файлов, но если у вас есть CDN, вам не нужно беспокоиться о статическом содержимом. Apache — отличный сервер Но попробуйте FastCGI, а не модуль PHP.