Управлять перезаписью nginx в папке проекта

Я пытаюсь выяснить, как перейти с Apache на nginx, сохраняя гибкость правил переписывания для разработчиков. Это наша текущая настройка:

  • У нас есть файл.htaccess в корневой папке проекта (а также в некоторых подпапках)
  • В этом файле.htaccess разработчики могут определять перезаписи для довольно постоянных ссылок на конкретные сценарии (мы не используем "глобальный" файл index.php)
  • Этот файл.htaccess включен в наше Git-репозиторий, поэтому добавление / изменение перезаписей не требует от разработчика изменения конфигурации сервера (на которую у него нет прав)

Насколько я узнал, нет такой вещи как эквивалентный каталог.htaccess с nginx для каждого каталога. Итак, как мы можем решить это? Нужно ли использовать "глобальный" файл index.php для разрешения перезаписей? Это, вероятно, значительно снизит общую производительность.

PS Как вы могли заметить, я никогда раньше не использовал nginx.

1 ответ

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

Это правда, что nginx работает быстрее и что его многопоточная архитектура помогает справляться с высокими нагрузками, но ваш сайт будет необычно необычным для PHP, если вы хотите ускорить работу учетных записей более чем на один или два процента от общих задержек. Ваше узкое место почти наверняка будет в вашей базе данных и исполнении PHP.

Вероятно, вам следует сначала взглянуть на кэширование компиляции PHP (например, APC), внешний прокси-сервер (например, varnish или squid), внутреннее кэширование в вашем приложении (это WordPress? Там есть несколько хороших модулей кэширования). Передача статических файлов только в nginx может быть хорошей идеей, но в любом случае, вероятно, лучше использовать собственные прокси-серверы или сеть распространения контента для этого контента.

Если вы решите продолжить, некоторые инструменты приходят на ум, хотя они являются довольно тяжелыми инструментами. Вы можете использовать инструменты непрерывной интеграции и управления конфигурацией (например, Jenkins и Puppet, или их эквиваленты) для развертывания вашей конфигурации из репозитория управления версиями на вашем сервере, когда она будет включена в соответствующую ветку. Это сложная инфраструктура, которую нужно изучать и создавать, хотя и без особых знаний, навыков и заботы вы все равно могли бы просто предоставить своим разработчикам root-доступ. Система делегирования Apache через.htaccess разрабатывалась на протяжении многих лет, и вы не собираетесь спешить копировать ее безопасность.

Вернитесь и проверьте свои предположения с помощью инструмента профилирования о том, насколько серьезна проблема производительности при обработке регулярных выражений. Я использовал в основном Xdebug, но есть и другие хорошие альтернативы.

Другие вопросы по тегам