Skip to content

Полезные шаблоны конфигов для Nginx

License

Notifications You must be signed in to change notification settings

insspb/nginx-config

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 

Repository files navigation

Полезные шаблоны конфигов для Nginx

Содержание

Команды Nginx

Основные команды для выполнения базовый операций во время работы Nginx.

  • nginx -V - проверить версию Nginx, его скомпилированные параметры конфигурации и установленные модули.
  • nginx -t - протестировать конфигурационный файл и проверить его расположение.
  • nginx -s reload - перезапустить конфигурационный файл без перезагрузки Nginx.

⬆ Наверх

Блок location на PHP

Простой шаблон для быстрой и легкой установки PHP, FPM или CGI на ваш сайт.

location ~ \.php$ {
  try_files $uri =404;
  client_max_body_size 64m;
  client_body_buffer_size 128k;
  include fastcgi_params;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  fastcgi_pass unix:/path/to/php.sock;
}

⬆ Наверх

Перенаправления

Перенаправление на www

Корректный способ определить удаленный сервер по домену без www и перенаправить его c www:

server {
  listen 80;
  server_name example.org;
  return 301 $scheme://www.example.org$request_uri;
}

server {
  listen 80;
  server_name www.example.org;
}

Это будет нормально работать для HTTPS, если используется в соответствующем блоке server{}, где идёт прослушивание 443 порта. ⬆ Наверх

Перенаправление на no-www

Корректный способ определить удаленный сервер по домену c www и перенаправить его без www:

server {
  listen 80;
  server_name example.org;
}

server {
  listen 80;
  server_name www.example.org;
  return 301 $scheme://example.org$request_uri;
}

Это будет нормально работать для HTTPS, если используется в соответствующем блоке server{}, где идёт прослушивание 443 порта. ⬆ Наверх

Перенаправление на HTTPS

Способ для переадресации с HTTP на HTTPS:

server {
  listen 80;
  return 301 https://$host$request_uri;
}

server {
  listen 443 ssl;

  # let the browsers know that we only accept HTTPS
  add_header Strict-Transport-Security max-age=2592000;
}

⬆ Наверх

Слеш в конце адресной строки

Данная строка добавляет слэш / в конце каждого URL, только в случае, если в URL нет точки или параметров. То есть после example.com/index.php или example.com/do?some=123 слэш не поставится.

rewrite ^([^.\?]*[^/])$ $1/ permanent;

⬆ Наверх

Перенаправление со страницы на страницу

location = /oldpage.html {
    return 301 http://example.org/newpage.html;
  }

⬆ Наверх

Перенаправление с сайта на сайт

server {
  server_name old-site.com;
  return 301 $scheme://new-site.com$request_uri;
}

⬆ Наверх

Перенаправление на определенный путь в URI

location /old-site {
  rewrite ^/old-site/(.*) http://example.org/new-site/$1 permanent;
}

⬆ Наверх

Производительность

Кэширование

Навсегда разрешить браузерам кэшировать статические содержимое. Nginx установит оба заголовка: Expires и Cache-Control.

location /static {
  root /data;
  expires max;
}

Запретить кэширование браузерам (например для отслеживания запросов) можно следующим образом:

location = /empty.gif {
  empty_gif;
  expires -1;
}

⬆ Наверх

Gzip сжатие

gzip  on;
gzip_buffers 16 8k;
gzip_comp_level 6;
gzip_http_version 1.1;
gzip_min_length 256;
gzip_proxied any;
gzip_vary on;
gzip_types
  text/xml application/xml application/atom+xml application/rss+xml application/xhtml+xml image/svg+xml
  text/javascript application/javascript application/x-javascript
  text/x-json application/json application/x-web-app-manifest+json
  text/css text/plain text/x-component
  font/opentype application/x-font-ttf application/vnd.ms-fontobject
  image/x-icon;
gzip_disable "msie6";

⬆ Наверх

Кэш файлов

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

open_file_cache max=1000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;

⬆ Наверх

SSL кэш

Подключение SSL кэширования позволит возобновлять SSL сессии и сократить время к следующим обращениям к SSL/TLS протоколу.

ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;

⬆ Наверх

Поддержка Upstream

Активация кеширования c использованием Upstream подключений:

upstream backend {
  server 127.0.0.1:8080;
  keepalive 32;
}

server {

  location /api/ {
    proxy_pass http://backend;
    proxy_http_version 1.1;
    proxy_set_header Connection "";
  }
}

⬆ Наверх

Мониторинг

По умолчанию Stub Status модуль не собирается, его сборку необходимо разрешить с помощью конфигурационного параметра —with-http_stub_status_module и активировать с помощью:

location /status {
  stub_status on;
  access_log off;
}

Данная настройка позволит вам получать статус в обычном текстовом формате по общему количеству запросов и клиентским подключениям (принятым, обработанным, активным).

Более информативный статус от Nginx можно получить с помощью Luameter, который несколько сложнее в установке и требует наличия Nginx Lua модуля. Это предоставит следующие метрики по различным конфигурационным группам в формате JSON:

  • Общее количество запросов/ответов.
  • Общее количество ответов сгруппирированных по статус кодам: 1xx, 2xx, 3xx, 4xx, 5xx.
  • Общее количество байт принятых/отправленных клиенту.
  • Промежуточные отрезки времени для оценки минимума, максимума, медианы, задержек и тд.
  • Среднестатистическое количество запросов для простоты мониторинга и составления прогнозов по нагрузке.
  • И прочее...

Пример дашборда от Luameter.

Также для сбора статистики отлично подходит ngxtop.

⬆ Наверх

Безопасность

Активация базовой аунтификации

Для начала вам потребуется создать пароль и сохранить его в обычной текстовом файле:

имя:пароль

Затем установить найтройки для server/location блока, который необходимо защитить:

auth_basic "This is Protected";
auth_basic_user_file /path/to/password-file;

⬆ Наверх

Открыть только локальный доступ

location /local {
  allow 127.0.0.1;
  deny all;
}

⬆ Наверх

Защита 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, который позволяет вам определить подзапрос и будет отклонен по окончанию текущего запроса - является лучшим решением для обоих вариантов.

location = /empty.gif {
  empty_gif;
  expires -1;
  post_action @track;
}

location @track {
  internal;
  proxy_pass http://tracking-backend;
}

⬆ Наверх

Распределение ресурсов между источниками

Самый простой и наиболее известный способ кросс-доменного запроса на ваш сервер:

location ~* \.(eot|ttf|woff) {
  add_header Access-Control-Allow-Origin *;
}

⬆ Наверх

Источники

⬆ Наверх

Releases

No releases published

Packages

No packages published