diff --git a/README.md b/README.md index 1e1f439..2858296 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,7 @@ ##Location блок на PHP Простой шаблон для быстрой и легкой установки PHP, FPM или CGI на ваш сайт. - +``` location ~ \.php$ { try_files $uri =404; client_max_body_size 64m; @@ -48,11 +48,11 @@ fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_pass unix:/path/to/php.sock; } - +``` ##Rewrite и Redirection ### Force www [Корректный способ](http://nginx.org/en/docs/http/converting_rewrite_rules.html) определить удаленный сервер по домену без *www* и перенаправить его c *www*: - +``` server { listen 80; server_name example.org; @@ -64,12 +64,12 @@ server_name www.example.org; ... } - +``` *Также работает для HTTPS * ###Force no-www Корректный способ определить удаленный сервер по домену c *www* и перенаправить его без *www*: - +``` server { listen 80; server_name example.org; @@ -80,10 +80,10 @@ server_name www.example.org; return 301 $scheme://example.org$request_uri; } - +``` ### Force HTTPS Способ для переадресации с HTTP на HTTPS: - +``` server { listen 80; return 301 https://$host$request_uri; @@ -97,51 +97,52 @@ ... } - +``` ###Force Trailing Slash Данная строка добавляет слэш `/` в конце каждого URL, только в том случаее если в URL нет точки или параметров. Тоесть после *example.com/index.php* или *example.com/do?some=123* слэш не поставится. - +``` rewrite ^([^.\?]*[^/])$ $1/ permanent; - +``` ### Редирект на страницу - +``` server { 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; @@ -157,24 +158,24 @@ 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; @@ -188,15 +189,15 @@ proxy_set_header Connection ""; } } - +``` ###Мониторинг По умолчанию [Stub Status](http://nginx.org/ru/docs/http/ngx_http_stub_status_module.html) модуль не собирается, его сборку необходимо разрешить с помощью конфигурационного параметра —with-http_stub_status_module и активировать с помощью: - +``` location /status { stub_status on; access_log off; } - +``` Данная настройка позволит вам получать статус в обычном текстовом формате по общему количеству запросов и клиентским подключениям (принятым, обработанным, активным). Более информативный статус от Nginx можно получить с помощью [Luameter](https://luameter.com/), который несколько сложнее в установке и требует наличия Nginx Lua модуля. Это предоставит следующие метрики по различным конфигурационным группам в формате JSON: @@ -215,21 +216,23 @@ ##Безопасность ###Активация базовой аунтификации Для начала вам потребуется создать пароль и сохранить его в обычной текстовом файле: - +``` имя:пароль - +``` Затем установить найтройки для 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](http://nginx.com/blog/nginx-poodle-ssl/). * Шифры, которые наилучшим образом обеспечат защиту. [Mozilla Server Side TLS and Nginx](https://wiki.mozilla.org/Security/Server_Side_TLS#Nginx). @@ -244,7 +247,7 @@ ##Прочее ###Подзапросы после завершения Бывают ситуации, когда вам необходимо передать запрос на другой бэкэнд **в дополнении или после его обработки**. Первый случай - отслеживать количество завершенных загрузок путем вызова API, после того как пользователь скачал файл. Второй случай -отслеживать запрос, к которому вы бы хотели вернуться как можно быстрее (возможно с пустым .gif) и сделать соответствующие записи в фоновом режиме. [**post_action**](http://wiki.nginx.org/HttpCoreModule#post_action), который позволяет вам определить подзапрос и будет отклонен по окончанию текущего запроса - является [лучшим решением](http://mailman.nginx.org/pipermail/nginx/2008-April/004524.html) для обоих вариантов. - +``` location = /empty.gif { empty_gif; expires -1; @@ -255,14 +258,15 @@ internal; proxy_pass http://tracking-backend; } - +``` ###Распределение ресурсов между источниками Самый простой и наиболее известный способ кросс-доменного запроса на ваш сервер: - +``` location ~* \.(eot|ttf|woff) { add_header Access-Control-Allow-Origin *; } +``` ## Источники - [Nginx Official Guide](http://nginx.com/resources/admin-guide/)