Полезные шаблоны конфигов и сниппеты для Nginx
Готовые варианты конфигурации для NGINX, а также полезные сниппеты для настройки необходимых условий.
Команды Nginx
Основные команды для выполнения базовый операций во время работы NGINX.
nginx -V
- проверить версию NGINX, его скомпилированные параметры конфигурации и установленные модули.nginx -t
- протестировать конфигурационный файл и проверить его расположение.nginx -s reload
- перезапустить конфигурационный файл без перезагрузки NGINX.
Location блок на PHP
Простой шаблон для быстрой и легкой установки PHP, FPM или CGI на ваш сайт.
1 | location ~ \.php$ { |
Rewrite и Redirection
Force www
Корректный способ определить удаленный сервер по домену без www и перенаправить его c www:
1 | server { |
*Также работает для HTTPS *
Force no-www
Корректный способ определить удаленный сервер по домену c www и перенаправить его без www:
1 | server { |
Force HTTPS
Способ для переадресации с HTTP на HTTPS:
1 | server { |
Force Trailing Slash
Данная строка добавляет слэш /
в конце каждого URL только в том случае, если в URL нет точки или параметров. То есть после example.com/index.php или example.com/do?some=123 слэш не поставится.
1 | rewrite ^([^.\?]*[^/])$ $1/ permanent; |
Редирект на страницу
1 | server { |
Редирект на сайт
1 | server { |
Редирект на определенный путь в URI
1 | location /old-site { |
Производительность
Кэширование
Навсегда разрешить браузерам кэшировать статические содержимое. NGINX установит оба заголовка: Expires и Cache-Control.
1 | location /static { |
Запретить кэширование браузерам (например для отслеживания запросов) можно следующим образом:
1 | location = /empty.gif { |
Gzip сжатие
1 | gzip on; |
Кэш файлов
Если у вас кешируется большое количество статических файлов через NGINX, то кэширование метаданных этих файлов позволит сэкономить время задержки.
1 | open_file_cache max=1000 inactive=20s; |
SSL кэш
Подключение SSL кэширования позволит возобновлять SSL сессии и сократить время к следующим обращениям к SSL/TLS протоколу.
1 | ssl_session_cache shared:SSL:10m; |
Поддержка Upstream
Активация кеширования c использованием Upstream подключений:
1 | upstream backend { |
Мониторинг
По умолчанию Stub Status модуль не собирается, его сборку необходимо разрешить с помощью конфигурационного параметра —with-http_stub_status_module и активировать с помощью:
1 | location /status { |
Данная настройка позволит вам получать статус в обычном текстовом формате по общему количеству запросов и клиентским подключениям (принятым, обработанным, активным).
Более информативный статус от NGINX можно получить с помощью Luameter, который несколько сложнее в установке и требует наличия NGINX Lua модуля. Это предоставит следующие метрики по различным конфигурационным группам в формате JSON:
- Общее количество запросов/ответов.
- Общее количество ответов сгруппирированных по статус кодам: 1xx, 2xx, 3xx, 4xx, 5xx.
- Общее количество байт принятых/отправленных клиенту.
- Промежуточные отрезки времени для оценки минимума, максимума, медианы, задержек и тд.
- Среднестатистическое количество запросов для простоты мониторинга и составления прогнозов по нагрузке.
- И прочее…
Также для сбора статистики отлично подходит ngxtop.
Безопасность
Активация базовой аунтификации
Для начала вам потребуется создать пароль и сохранить его в обычной текстовом файле:
1 | имя:пароль |
Затем установить настройки для server/location блока, который необходимо защитить:
1 | auth_basic "This is Protected"; |
Открыть только локальный доступ
1 | location /local { |
Защита SSL настроек
Отключить SSLv3, если он включен по умолчанию. Это предотвратит POODLE SSL Attack.
Шифры, которые наилучшим образом обеспечат защиту. Mozilla Server Side TLS and Nginx.
don’t use SSLv3 ref: POODLE CVE-2014-356 - http://nginx.com/blog/nginx-poodle-ssl/
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
Ciphers set to best allow protection from Beast, while providing forwarding secrecy, as defined by Mozilla (Intermediate Set) - https://wiki.mozilla.org/Security/Server_Side_TLS#Nginx
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA'; ssl_prefer_server_ciphers on;
Прочее
Подзапросы после завершения
Бывают ситуации, когда вам необходимо передать запрос на другой бэкэнд в дополнении или после его обработки. Первый случай - отслеживать количество завершенных загрузок путем вызова API, после того как пользователь скачал файл. Второй случай -отслеживать запрос, к которому вы бы хотели вернуться как можно быстрее (возможно с пустым .gif) и сделать соответствующие записи в фоновом режиме. post_action, который позволяет вам определить подзапрос и будет отклонен по окончанию текущего запроса - является лучшим решением для обоих вариантов.
1 | location = /empty.gif { |
Распределение ресурсов между источниками
Самый простой и наиболее известный способ кросс-доменного запроса на ваш сервер:
1 | location ~* \.(eot|ttf|woff) { |
Коллекция готовых конфигурационных шаблонов для популярных CMS и фреймворков.
- Asgard CMS
- Bolt CMS
- CMS Made Simple
- Codeigniter
- Concerte5
- Data Life Engine
- Drupal 7, 8
- FuelPHP
- Invision Power Board 3
- Joomla 2, 3
- KodiCMS
- Kohana
- Laravel
- MaxSite CMS
- MediaWiki
- MODx Revolution
- Octobercms
- OpenCart 1.5
- Phalcon
- phpBB3
- ProcessWire 2
- Symfony
- UMI.CMS
- Wordpress 4
- Yii Advanced
- Yii Basic
- ZenCart 1.5
- Zend Framework
- 1C Bitrix