Apache + nginx. Возможные проблемы

На данный момент есть куча сайтов на одном сервере, работающих на linux, apache 2.2.x mod_php, mysql. В связи возрастанием нагрузки есть мысль поставить перед этим делом фронтендом nginx. Подскажите кто делал подобное, какие есть подводные камни? Есть ли шансы что на каких то сайтах могут отвалится ajax'ы comet'ы .htaccess'ы или что то еще? Заметят ли как то изменения владельцы сайтов и разработчики. Буду благодарен за любую информацию, заранее спасибо.
  • Вопрос задан
  • 6803 просмотра
Пригласить эксперта
Ответы на вопрос 7
zizop
@zizop
Существует два метода подобного рода миграции.

1. Поставить Nginx перед Apache. Тут в принципе всё просто. Статику (картинки, js, css и т.д.) раздает Nginx, динамику (php) проксирует на Apache. Подводные камни: правильное разделение контента на статический и динамический, отключение логгирования для статики, выставление правильного времени кэширования.

2. Отказаться от Apache полностью в пользу Nginx. Потенциально дает больший прирост производительности. Лучше выполнять постепенно, после 1го метода. Подводные камни:
придется переписать .htaccess на директивы Nginx. Для популярных движков типа Joomla, WordPress это уже сделано, в других случаях придется курить регэкспы. mod_php скорее всего придется заменить на php5-fpm, тут вроде ничего сложного. По поводу comet'ов надо будет поставить http_push_module для nginx. Всё, кроме последнего недавно сам прошел, производительность здорово подросла. Немало в этом помогло подключение memcached к nginx, в разряд статики перешли динамические странички, закэшированные для гостей.
Ответ написан
@odmin4eg
Сам чёрт намного красивее чем кажется. самый простой вариант это разделить на фронт-энд и бэк-энд

я давненько для себя писал инструкцию
www.odmin4eg.ru/2008/nginx-na-ubuntu-prosto/

Но суть её сегодня не изменилось, только нудно скачать свежий nginx с оф сайта, собрать его ( www.odmin4eg.ru/2009/nginx-na-ubuntu-eto-prosto-kompilyaciya/ )
и запустить.

по тойже схеме всё у меня работает до сих пор отлично, просто и надёжно.

потом появился сайт, что был намного тяжелее всех остальные при этой же схеме его стал обрабатывать php5-fpm
а все остальные как и раньше продолжали работать на apache
( www.odmin4eg.ru/2010/pereezzhaem-na-php5fpm/ )
Ответ написан
Комментировать
unnamed
@unnamed
Все будет хорошо, но есть особенности:

Из коробки — в скриптах и логах апача будет ip адрес фронтенда а не юзера, читайте например здесь www.lexa.ru/srch/?text=rpaf§ion=6&sort1=rl

В апаче нужно KeepAlive Off
Ответ написан
gaelpa
@gaelpa
Подводные камни в пхп-скриптах видел такие:
  • При использовании $_SERVER['SERVER_NAME'], $_SERVER['HTTP_HOST'], $_SERVER['SERVER_PORT'] будут отображаться данные apache-бэкэнда, т.е. может вылезти ерунда, если эти переменные используются в выводе
  • При использовании $_SERVER['REMOTE_HOST'] и $_SERVER['REMOTE_ADDR'] будут выдаваться данные nginx-фронтжнда
Ответ написан
Horse
@Horse
Предложу другой вариант. Nginx поставить рядом, на 81-ый порт.
В таком случаее легко можно будет указывать, что есть статика, ничего не нужно проксировать, работает быстрее, полностью отсутствуют подводные камни (если конечно-же 81-ый порт открыт) )
Ответ написан
Wott
@Wott
Если не поднимать кэш то все уже описали. Но я особо не вижу смысла в этом — лучше уж перейти на workers на apache.

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

Как отметили nginx хорошо обрабатывает статику, но если ее много, то эффективнее
— обьединить скрипты и стили в общий файл
— вынести графику на другой домен
— оптимизировать мелочь в спрайты
хотя конечно это все диагнозы по телефону.
Ответ написан
pentarh
@pentarh
В общем случае проблем быть не должно если

1. Nginx будет проксировать динамические запросы апачу
2. Если у апача будет корректно настроен mod_rpaf

Про все про это можно почитать тут Практическое применение nginx на отдаче статики
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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