Задать вопрос
mausspb
@mausspb
web разработчик, системный администратор

Nginx + php5-fpm VS Nginx + Apache; Что выбрать?

Сильно ли выигрывает в производительности Nginx + php5-fpm ?
Можно ли прикрутить .htaccess Nginx + php5-fpm ?
Стоит ли переходить на Nginx + php5-fpm ?
Сейчас стоит nginx+apache на виртуалках на выделенном сервер. Все на Centos + openvz.
Проектов много разных крутится.
  • Вопрос задан
  • 4842 просмотра
Подписаться 8 Оценить Комментировать
Решения вопроса 1
Сильно ли выигрывает в производительности Nginx + php5-fpm ?

У них разная архитектура: nginx может обслужить большее количество запросов в единицу времени с меньшим расходом памяти. Так что в теории должно быть: да, сильно.

Можно ли прикрутить .htaccess Nginx + php5-fpm ?

Можно сделать все то, что умеет .htaccess в конфиге nginx, но прикрутить нельзя.

Стоит ли переходить на Nginx + php5-fpm ?
Сейчас стоит nginx+apache на виртуалках на выделенном сервер. Все на Centos + openvz.
Проектов много разных крутится.

А зачем? Если задаете такие вопросы, у вас сейчас все хорошо.

Схема с nginx красивее, легковеснее, проще в настройке. Я несколько лет уже использую nginx+gunicorn (это питоновый wsgi-сервер, прослойка между приложением и веб-сервером), никакой нужды нет в apache. Но если все ОК, переходить не нужно. Также если нужно будет работать с типовыми проектами, которым нужен .htaccess, но писали не вы, это будет печально: я постоянно плачу кровавыми слезами, если подобная задача возникает, т.к. нужно переписывать все эти .htaccess.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
@hell
По первому пункту:
Правильнее будет протестировать на актуальном железе и в актуальной конфигурации. Кроме того, ответ на ваш вопрос будет зависеть еще и от вашей возможности корректировать параметры ядра. На виртуалках у вас такой возможности может и не оказаться.

Полтора года назад я делал такие тесты для своего сервера.
Тестировались три варианта - nginx+php-fpm, nginx+apache+mod_php, nginx+nginx+php-fpm. результаты тестов на боевых сайтах показали:

при правильной настройке apache - nginx+php-fpm - наименее производительное решение
nginx+apache+mod_php и nginx+nginx+php-fpm выдерживают примерно одинаковую нагрузку, но второе решение чуть менее надежное (то есть именно чуть - в среднем, на 1000 натравливаний siege на боевой сервер, php-fpm слетел раз 7, а апач - раза 2)

Софт с тех пор поменялся, железка у вас заведомо другая (та, на которой я тестировал, погорела), у меня был debian без виртуалок, у вас - Centos, посему актуальные результаты тестов в вашем случае могут оказаться другими.

По второму - позволю процитировать себя же - "при правильной настройке apache". Правильная настройка апача на производительность включает полный отказ от .htaccess. Часть переносится в nginx, часть - напрямую в конфиги конкретного веб-сервера. Ну и из апача вообще выбрасываетс много-много-много всего. Нужно помнить, что правила рерайта в нгинксе огтличаются от апачевских - на хабре была пара правильных (особенно с учетом комментов) статей, ну и на самом сайте нгинкса примеров хороших более чем достаточно.

По третьему - если вы проведете тесты и убедителсь, что с надежностью у связки nginx+nginx+php-fpm все нормально на ваших сайтах, я бы перешел.
Поясню суть такой связки:
внешний nginx отдает статику, зипует на лету, частично рерайтит запросы, а также проксирует запросы к php на внутренний нгинкс. Кроме того, по необходимости и возможности, он может кешировать часть запросов. У внешнего нгинкса keepalive_timeout установлен в достаточно большое значение (то есть тоже стоит подбирать).
Внутренний нгинкс стоит с keepalive_timeout=0, и работает с php-fpm.

Прекрасной плюшкой такой связки является возможность кеширования страниц с одновременным, простым и наитивным отключением кеширования интерактивной части (то есть, к примеру, вы кешируете весь сайт кроме блока комментариев и блока каких-нить прикольных фишечек, которые выводятся по рандому).

Минусом - принципиальные отличия в логике рерайтов на nginx и в apache. Врочем, если потратить разок 2-3 рабочих дня на то, чтобы в этих разлиичях разобраться, дальше все будет проще.
Ответ написан
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
1) .htaccess не нужен, обычно у вас есть дефолтный конфиг сервера который из проекта в проект отличается не сильно. Вы можете сделать автоматическое создание vhost в рамках одной конфигурации nginx.
2) Apache в 90% случаев не нужен, если у вас не используются какие-то ну уж очень специфичные модули.

Вывод - зачем добавлять лишнюю прослойку?
Ответ написан
opium
@opium
Просто люблю качественно работать
1) В производитель ности пхп проигрывает, так как mod_php самый быстрый вариант работы php. В потреблении памяти может выиграть в разы.
2)нет конечно
3)стоит
4)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы