|
39 | 39 |
|
40 | 40 | ##Location блок на PHP
|
41 | 41 | Простой шаблон для быстрой и легкой установки PHP, FPM или CGI на ваш сайт.
|
42 |
| - |
| 42 | +``` |
43 | 43 | location ~ \.php$ {
|
44 | 44 | try_files $uri =404;
|
45 | 45 | client_max_body_size 64m;
|
|
48 | 48 | fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
49 | 49 | fastcgi_pass unix:/path/to/php.sock;
|
50 | 50 | }
|
51 |
| - |
| 51 | +``` |
52 | 52 | ##Rewrite и Redirection
|
53 | 53 | ### Force www
|
54 | 54 | [Корректный способ](http://nginx.org/en/docs/http/converting_rewrite_rules.html) определить удаленный сервер по домену без *www* и перенаправить его c *www*:
|
55 |
| - |
| 55 | +``` |
56 | 56 | server {
|
57 | 57 | listen 80;
|
58 | 58 | server_name example.org;
|
|
64 | 64 | server_name www.example.org;
|
65 | 65 | ...
|
66 | 66 | }
|
67 |
| - |
| 67 | +``` |
68 | 68 | *Также работает для HTTPS *
|
69 | 69 |
|
70 | 70 | ###Force no-www
|
71 | 71 | Корректный способ определить удаленный сервер по домену c *www* и перенаправить его без *www*:
|
72 |
| - |
| 72 | +``` |
73 | 73 | server {
|
74 | 74 | listen 80;
|
75 | 75 | server_name example.org;
|
|
80 | 80 | server_name www.example.org;
|
81 | 81 | return 301 $scheme://example.org$request_uri;
|
82 | 82 | }
|
83 |
| - |
| 83 | +``` |
84 | 84 | ### Force HTTPS
|
85 | 85 | Способ для переадресации с HTTP на HTTPS:
|
86 |
| - |
| 86 | +``` |
87 | 87 | server {
|
88 | 88 | listen 80;
|
89 | 89 | return 301 https://$host$request_uri;
|
|
97 | 97 |
|
98 | 98 | ...
|
99 | 99 | }
|
100 |
| - |
| 100 | +``` |
101 | 101 | ###Force Trailing Slash
|
102 | 102 | Данная строка добавляет слэш `/` в конце каждого URL, только в том случаее если в URL нет точки или параметров. Тоесть после *example.com/index.php* или *example.com/do?some=123* слэш не поставится.
|
103 |
| - |
| 103 | +``` |
104 | 104 | rewrite ^([^.\?]*[^/])$ $1/ permanent;
|
105 |
| - |
| 105 | +``` |
106 | 106 | ### Редирект на страницу
|
107 |
| - |
| 107 | +``` |
108 | 108 | server {
|
109 | 109 | location = /oldpage.html {
|
110 | 110 | return 301 http://example.org/newpage.html;
|
111 | 111 | }
|
112 | 112 | }
|
113 |
| - |
| 113 | +``` |
114 | 114 | ### Редирект на сайт
|
115 |
| - |
| 115 | +``` |
116 | 116 | server {
|
117 | 117 | server_name old-site.com
|
118 | 118 | return 301 $scheme://new-site.com$request_uri;
|
119 | 119 | }
|
120 |
| - |
| 120 | +``` |
121 | 121 | ### Редирект на определенный путь в URI
|
| 122 | +``` |
122 | 123 | location /old-site {
|
123 | 124 | rewrite ^/old-site/(.*) http://example.org/new-site/$1 permanent;
|
124 | 125 | }
|
125 |
| - |
126 |
| - |
| 126 | +``` |
127 | 127 | ##Производительность
|
128 | 128 |
|
129 | 129 | ###Кэширование
|
130 | 130 | Навсегда разрешить браузерам кэшировать статические содержимое. Nginx установит оба заголовка: Expires и Cache-Control.
|
131 |
| - |
| 131 | +``` |
132 | 132 | location /static {
|
133 | 133 | root /data;
|
134 | 134 | expires max;
|
135 | 135 | }
|
136 |
| - |
| 136 | +``` |
137 | 137 | Запретить кэширование браузерам (например для отслеживания запросов) можно следующим образом:
|
138 |
| - |
| 138 | +``` |
139 | 139 | location = /empty.gif {
|
140 | 140 | empty_gif;
|
141 | 141 | expires -1;
|
142 | 142 | }
|
143 |
| - |
| 143 | +``` |
144 | 144 | ###Gzip сжатие
|
| 145 | +``` |
145 | 146 | gzip on;
|
146 | 147 | gzip_buffers 16 8k;
|
147 | 148 | gzip_comp_level 6;
|
|
157 | 158 | font/opentype application/x-font-ttf application/vnd.ms-fontobject
|
158 | 159 | image/x-icon;
|
159 | 160 | gzip_disable "msie6";
|
160 |
| - |
| 161 | +``` |
161 | 162 | ### Кэш файлов
|
162 | 163 | Если у вас кешируется большое количество статических файлов через Nginx, то кэширование метаданных этих файлов позволит сэкономить время задержки.
|
163 |
| - |
| 164 | +``` |
164 | 165 | open_file_cache max=1000 inactive=20s;
|
165 | 166 | open_file_cache_valid 30s;
|
166 | 167 | open_file_cache_min_uses 2;
|
167 | 168 | open_file_cache_errors on;
|
168 |
| - |
| 169 | +``` |
169 | 170 | ### SSL кэш
|
170 | 171 | Подключение SSL кэширования позволит возобновлять SSL сессии и сократить время к следующим обращениям к SSL/TLS протоколу.
|
171 |
| - |
| 172 | +``` |
172 | 173 | ssl_session_cache shared:SSL:10m;
|
173 | 174 | ssl_session_timeout 10m;
|
174 |
| - |
| 175 | +``` |
175 | 176 | ### Поддержка Upstream
|
176 | 177 | Активация кеширования c использованием Upstream подключений:
|
177 |
| - |
| 178 | +``` |
178 | 179 | upstream backend {
|
179 | 180 | server 127.0.0.1:8080;
|
180 | 181 | keepalive 32;
|
|
188 | 189 | proxy_set_header Connection "";
|
189 | 190 | }
|
190 | 191 | }
|
191 |
| - |
| 192 | +``` |
192 | 193 | ###Мониторинг
|
193 | 194 | По умолчанию [Stub Status](http://nginx.org/ru/docs/http/ngx_http_stub_status_module.html) модуль не собирается, его сборку необходимо разрешить с помощью конфигурационного параметра —with-http_stub_status_module и активировать с помощью:
|
194 |
| - |
| 195 | +``` |
195 | 196 | location /status {
|
196 | 197 | stub_status on;
|
197 | 198 | access_log off;
|
198 | 199 | }
|
199 |
| - |
| 200 | +``` |
200 | 201 | Данная настройка позволит вам получать статус в обычном текстовом формате по общему количеству запросов и клиентским подключениям (принятым, обработанным, активным).
|
201 | 202 |
|
202 | 203 | Более информативный статус от Nginx можно получить с помощью [Luameter](https://luameter.com/), который несколько сложнее в установке и требует наличия Nginx Lua модуля. Это предоставит следующие метрики по различным конфигурационным группам в формате JSON:
|
|
215 | 216 | ##Безопасность
|
216 | 217 | ###Активация базовой аунтификации
|
217 | 218 | Для начала вам потребуется создать пароль и сохранить его в обычной текстовом файле:
|
218 |
| - |
| 219 | +``` |
219 | 220 | имя:пароль
|
220 |
| - |
| 221 | +``` |
221 | 222 |
|
222 | 223 | Затем установить найтройки для server/location блока, который необходимо защитить:
|
223 |
| - |
| 224 | +``` |
224 | 225 | auth_basic "This is Protected";
|
225 | 226 | auth_basic_user_file /path/to/password-file;
|
226 |
| - |
| 227 | +``` |
227 | 228 | ###Открыть только локальный доступ
|
| 229 | +``` |
228 | 230 | location /local {
|
229 | 231 | allow 127.0.0.1;
|
230 | 232 | deny all;
|
231 | 233 | ...
|
232 | 234 | }
|
| 235 | +``` |
233 | 236 | ###Защита SSL настроек
|
234 | 237 | * Отключить SSLv3, если он включен по умолчанию. Это предотвратит [POODLE SSL Attack](http://nginx.com/blog/nginx-poodle-ssl/).
|
235 | 238 | * Шифры, которые наилучшим образом обеспечат защиту. [Mozilla Server Side TLS and Nginx](https://wiki.mozilla.org/Security/Server_Side_TLS#Nginx).
|
|
244 | 247 | ##Прочее
|
245 | 248 | ###Подзапросы после завершения
|
246 | 249 | Бывают ситуации, когда вам необходимо передать запрос на другой бэкэнд **в дополнении или после его обработки**. Первый случай - отслеживать количество завершенных загрузок путем вызова API, после того как пользователь скачал файл. Второй случай -отслеживать запрос, к которому вы бы хотели вернуться как можно быстрее (возможно с пустым .gif) и сделать соответствующие записи в фоновом режиме. [**post_action**](http://wiki.nginx.org/HttpCoreModule#post_action), который позволяет вам определить подзапрос и будет отклонен по окончанию текущего запроса - является [лучшим решением](http://mailman.nginx.org/pipermail/nginx/2008-April/004524.html) для обоих вариантов.
|
247 |
| - |
| 250 | +``` |
248 | 251 | location = /empty.gif {
|
249 | 252 | empty_gif;
|
250 | 253 | expires -1;
|
|
255 | 258 | internal;
|
256 | 259 | proxy_pass http://tracking-backend;
|
257 | 260 | }
|
258 |
| - |
| 261 | +``` |
259 | 262 | ###Распределение ресурсов между источниками
|
260 | 263 |
|
261 | 264 | Самый простой и наиболее известный способ кросс-доменного запроса на ваш сервер:
|
262 |
| - |
| 265 | +``` |
263 | 266 | location ~* \.(eot|ttf|woff) {
|
264 | 267 | add_header Access-Control-Allow-Origin *;
|
265 | 268 | }
|
| 269 | +``` |
266 | 270 | ## Источники
|
267 | 271 |
|
268 | 272 | - [Nginx Official Guide](http://nginx.com/resources/admin-guide/)
|
|
0 commit comments