comparison xml/ru/docs/http/ngx_http_core_module.xml @ 76:4a4caa566120

Russian documentation import. Changes in module.dtd: <example> now allowed to contain <value> and <emphasis> elements (we need this to show important parts in examples), less strict checking of <directive> syntax (we don't want to fully document some directives, notably deprecated ones). Known issues: 1. <syntax> elements are preserved as is, they will require manual conversion (likely to some not-yet-existed format a la DocBook cmdsynopsis, as currently used one seems to be incomplete); 2. <value> no longer corresponds to replaceable content, and it's use in examples isn't correct; 3. <link doc="document#fragment"> doesn't work with current xslt, either should be supported or changed to <link doc="document" id="fragment">. The following files are intentionally omitted: maillists.xml (support.xml should be used instead), experimental.xml (obsolete), faq.xml (conflicts with existing one, needs discussion). Not yet linked to site.
author Maxim Dounin <mdounin@mdounin.ru>
date Tue, 11 Oct 2011 12:57:50 +0000
parents
children 0a45870d0160
comparison
equal deleted inserted replaced
75:2bf4cd2787c5 76:4a4caa566120
1 <?xml version="1.0" encoding="utf-8"?>
2
3 <!DOCTYPE module SYSTEM "../../../../dtd/module.dtd">
4
5 <module name="Директивы модуля ngx_http_core_module"
6 link="/ru/docs/http/ngx_http_core_module.html"
7 lang="ru">
8
9 <section name="Директивы" id="directives">
10
11 <directive name="aio">
12 <syntax>aio <value>[on|off|sendfile]</value></syntax>
13 <default>aio off</default>
14 <context>http, server, location</context>
15
16 <para>
17 Директива (0.8.11) разрешает или запрещает использовать файловый AIO
18 во FreeBSD и Linux.
19 </para>
20
21 <para>
22 Во FreeBSD AIO можно использовать, начиная с FreeBSD 4.3 версии.
23 AIO можно собрать в ядре статически
24 <example>
25 options VFS_AIO
26 </example>
27 или же подгрузить динамически
28 <example>
29 kldload aio
30 </example>
31 </para>
32
33 <para>
34 Во FreeBSD 5 и 6 при включении AIO статически или динамически на стадии
35 загрузки ядра вся сетевая подсистема будет использовать GiantLock,
36 что может негативно сказаться на производительности системы в целом.
37 Эта зависимость устранена во FreeBSD-6.4 STABLE от 2009 года и во FreeBSD 7.
38 Однако, начиная с FreeBSD 5.3, есть возможность включать AIO,
39 не связывая сетевую подсистему GiantLock'ом — для этого модуль AIO
40 нужно подгружать уже после загрузки ядра.
41 В этом случае в /var/log/messages появится сообщение
42 <example>
43 WARNING: Network stack Giant-free, but aio requires Giant.
44 Consider adding 'options NET_WITH_GIANT' or setting debug.mpsafenet=0
45 </example>
46 которое можно смело проигнорировать.
47 <note>
48 Требование использовать GiantLock в AIO связано с тем, что FreeBSD
49 поддерживает асинхронные вызовы aio_read()/aio_write() для работы с сокетами.
50 Но поскольку nginx использует AIO только для работы с диском, то проблем
51 не возникает.
52 </note>
53 </para>
54
55 <para>
56 Для работы AIO нужно выключить sendfile:
57 <example>
58 location /video/ {
59 sendfile off;
60 aio on;
61 output_buffers 1 64k;
62 }
63 </example>
64 </para>
65
66 <para>
67 Кроме того, начиная с FreeBSD 5.2.1 и nginx-0.8.12, AIO также можно
68 использовать для подгрузки данных для sendfile():
69 <example>
70 location /video/ {
71 sendfile on;
72 tcp_nopush on;
73 aio sendfile;
74 }
75 </example>
76 В такой конфигурации используется флаг SF_NODISKIO и sendfile()
77 не блокируется на диске, а сообщает об отсутствии данных в памяти,
78 после чего nginx инициирует асинхронную подгрузку данных,
79 читая только один байт. При этом ядро FreeBSD подгружает в память
80 первые 128K файла, однако при последующих чтениях файл подгружается
81 частями только по 16K. Изменить это можно с помощью директивы
82 <link id="read_ahead">read_ahead</link>.
83 </para>
84
85 <para>
86 В Linux AIO можно использовать, только начиная с версии ядра 2.6.22,
87 и, кроме того, ещё необходимо дополнительно включать
88 <link id="directio">directio</link>, иначе чтение будет блокирующимся:
89 <example>
90 location /video/ {
91 aio on;
92 directio 512;
93 output_buffers 1 128k;
94 }
95 </example>
96 </para>
97
98 <para>
99 Поскольку directio в Linux можно использовать только для чтения блоков,
100 выравненных по 512 байт (или 4К для XFS), то невыравненный конец файла
101 будет читаться блокировано. То же относится к запросам части ответа
102 byte-ranges и к запросам FLV не с начала файла: чтение невыровненных начала
103 и конца ответа будет блокирующимся. sendfile выключать не нужно, так
104 как при использовании directio он выключается сам.
105 </para>
106
107 </directive>
108
109
110 <directive name="alias">
111 <syntax>alias <value>путь</value></syntax>
112 <default>нет</default>
113 <context>location</context>
114
115 <para>
116 Директива задаёт замену для указанного location'а.
117 Например, при такой конфигурации
118 <example>
119 location /i/ {
120 alias /data/w3/images/;
121 }
122 </example>
123 на запрос "/i/top.gif" будет отдан файл "/data/w3/images/top.gif".
124 </para>
125
126 <para>
127 В значении пути можно использовать переменные.
128 </para>
129
130 <para>
131 Если директива alias используется внутри location'а, заданного
132 регулярным выражением, то регулярное выражение должно содержать выделения,
133 а директива alias — ссылки на эти выделения (0.7.40), например:
134 <example>
135 location ~ ^/users/(.+\.(?:gif|jpe?g|png))$ {
136 alias /data/w3/images/$1;
137 }
138 </example>
139 </para>
140
141 <para>
142 Если location и последняя часть значения директивы совпадают:
143 <example>
144 location /images/ {
145 alias /data/w3/images/;
146 }
147 </example>
148 то лучше воспользоваться директивой <link id="root"/>:
149 <example>
150 location /images/ {
151 root /data/w3;
152 }
153 </example>
154 </para>
155
156 </directive>
157
158
159 <directive name="client_body_in_file_only">
160 <syntax>client_body_in_file_only <value>on|clean|off</value></syntax>
161 <default>client_body_in_file_only off</default>
162 <context>http, server, location</context>
163
164 <para>
165 Директива определяет, сохранять ли всё тело запроса клиента в файл.
166 Директиву можно использовать для отладки и при использовании
167 переменной $request_body_file или метода <link doc="ngx_http_perl_module.xml#methods">$r-&gt;request_body_file</link>
168 модуля ngx_http_perl_module.
169 </para>
170
171 <para>
172 При использовании параметра "on" временные файлы по окончании
173 обработки запроса не удаляется.
174 </para>
175
176 <para>
177 Параметр "clean" разрешает удалять временные файлы, оставшиеся по окончании
178 обработки запроса.
179 </para>
180
181 </directive>
182
183
184 <directive name="client_body_in_single_buffer">
185 <syntax>client_body_in_single_buffer <value>on|off</value></syntax>
186 <default>client_body_in_single_buffer off</default>
187 <context>http, server, location</context>
188
189 <para>
190 Директива определяет, хранить ли всё тело запроса клиента в одном буфере.
191 Директива рекомендуется при использовании переменной $request_body
192 для уменьшения операций копирования.
193 </para>
194
195 </directive>
196
197
198 <directive name="client_body_buffer_size">
199 <syntax>client_body_buffer_size <value>размер</value></syntax>
200 <default>client_body_buffer_size 8k/16k</default>
201 <context>http, server, location</context>
202
203 <para>
204 Директива задаёт размер буфера для чтения тела запроса клиента.
205 Если тело запроса больше заданного буфера, то всё тело запроса или только
206 его часть записывается во временный файл.
207 По умолчанию размер одного буфера равен двум размерам страницы, в зависимости
208 от платформы это или 8K, или 16K.
209 </para>
210
211 </directive>
212
213
214 <directive name="client_body_temp_path">
215 <syntax>client_body_temp_path <value>путь [ уровень1 [ уровень2 [ уровень3 ] ] ]
216 </value></syntax>
217 <default>client_body_temp_path client_body_temp</default>
218 <context>http, server, location</context>
219
220 <para>
221 Директива задаёт имя каталога для хранения временных файлов с телом запроса
222 клиента.
223 В каталоге может использоваться иерархия подкаталогов до трёх уровней.
224 Например, при такой конфигурации
225 <example>
226 client_body_temp_path /spool/nginx/client_temp 1 2;
227 </example>
228 имя временного будет такого вида:
229 <example>
230 /spool/nginx/client_temp/7/45/00000123457
231 </example>
232 </para>
233
234 </directive>
235
236
237 <directive name="client_body_timeout">
238 <syntax>client_body_timeout <value>время</value></syntax>
239 <default>client_body_timeout 60</default>
240 <context>http, server, location</context>
241
242 <para>
243 Директива задаёт таймаут при чтении тела запроса клиента.
244 Таймаут устанавливается не на всю передачу тела запроса,
245 а только между двумя операциями чтения.
246 Если по истечении этого времени клиент ничего не передаст,
247 то ему возвращается ошибка "Request time out" (408).
248 </para>
249
250 </directive>
251
252
253 <directive name="client_header_buffer_size">
254 <syntax>client_header_buffer_size <value>размер</value></syntax>
255 <default>client_header_buffer_size 1k</default>
256 <context>http, server</context>
257
258 <para>
259 Директива задаёт размер буфера для чтения заголовка запроса клиента.
260 Для подавляющего большинства запросов вполне достаточно буфера размером в 1K.
261 Однако если в запросе есть большие cookies или же запрос пришёл
262 от wap-клиента, то он может не поместиться в 1K.
263 Поэтому, если строка запроса или строка заголовка запроса не помещается
264 полностью в этот буфер, то выделяются большие буферы, задаваемые директивой
265 <link id="large_client_header_buffers"/>.
266 </para>
267
268 </directive>
269
270
271 <directive name="client_header_timeout">
272 <syntax>client_header_timeout <value>время</value></syntax>
273 <default>client_header_timeout 60</default>
274 <context>http, server</context>
275
276 <para>
277 Директива задаёт таймаут при чтении заголовка запроса клиента.
278 Если по истечении этого времени клиент не передаст полностью заголовок
279 запроса, то ему возвращается ошибка "Request time out" (408).
280 </para>
281
282 </directive>
283
284
285 <directive name="client_max_body_size">
286 <syntax>client_max_body_size <value>размер</value></syntax>
287 <default>client_max_body_size 1m</default>
288 <context>http, server, location</context>
289
290 <para>
291 Директива задаёт максимально допустимый размер тела запроса клиента,
292 указываемый в строке "Content-Length" в заголовке запроса.
293 Если размер больше заданного, то клиенту возвращается ошибка
294 "Request Entity Too Large" (413). Следует иметь в виду, что
295 <link url="http://sysoev.ru/web/upload.html">браузеры не умеют
296 корректно показывать эту ошибку</link>.
297 </para>
298
299 </directive>
300
301
302 <directive name="default_type">
303 <syntax>default_type <value>MIME-тип</value></syntax>
304 <default>default_type text/plain</default>
305 <context>http, server, location</context>
306
307 <para>
308 Директива задаёт MIME-тип ответов по умолчанию.
309 </para>
310
311 </directive>
312
313
314 <directive name="directio">
315 <syntax>directio <value>[размер|off]</value></syntax>
316 <default>directio off</default>
317 <context>http, server, location</context>
318
319 <para>
320 Директива (0.7.7) разрешает использовать флаги
321 O_DIRECT (FreeBSD, Linux), F_NOCACHE (Mac OS X) или функцию directio() (Solaris)
322 при чтении файлов, размер которых больше либо равен указанному.
323 Директива автоматически запрещает (0.7.15) использование
324 <link id="sendfile">sendfile'а</link> для данного запроса.
325 Рекомендуется использовать для больших файлов:
326 <example>
327 directio 4m;
328 </example>
329 или при использовании <link id="aio">aio</link> в Linux.
330 </para>
331
332 </directive>
333
334
335 <directive name="directio_alignment">
336 <syntax>directio_alignment <value>размер</value></syntax>
337 <default>directio_alignment 512</default>
338 <context>http, server, location</context>
339
340 <para>
341 Директива (0.8.11) устанавливает выравнивание для
342 <link id="directio">directio</link>.
343 В большинстве случае достаточно выравнивания 512 байт, однако
344 при использовании XFS под Linux его нужно увеличить до 4K.
345 </para>
346
347 </directive>
348
349
350 <directive name="error_page">
351 <syntax>error_page <value>код [код ...] [=|=ответ] uri</value>
352 </syntax>
353 <default>нет</default>
354 <context>http, server, location, if в location</context>
355
356 <para>
357 Директива задаёт URI, который будет показываться для указанных ошибок.
358 Директивы наследуются с предыдущего уровня при условии, что на данном
359 уровне не описаны свои директивы error_page.
360 В URI можно использовать переменные.
361 </para>
362
363 <para>
364 Пример использования:
365 <example>
366 error_page 404 /404.html;
367 error_page 502 503 504 /50x.html;
368 error_page 403 http://example.com/forbidden.html;
369 </example>
370 </para>
371
372 <para>
373 Кроме того, можно поменять код ответа на другой, например:
374 <example>
375 error_page 404 =200 /empty.gif;
376 </example>
377 </para>
378
379 <para>
380 Если ошибочный ответ обрабатывается проксированным сервером или
381 FastCGI-сервером и этот сервер может вернуть разные коды ответов,
382 например, 200, 302, 401 или 404, то можно выдавать возвращаемый код:
383 <example>
384 error_page 404 = /404.php;
385 </example>
386 </para>
387
388 <para>
389 Если при перенаправлении не нужно менять URI, то можно перенаправить
390 обработку ошибки в именованный location:
391 <example>
392 location / {
393 error_page 404 = @fallback;
394 }
395
396 location @fallback {
397 proxy_pass http://backend;
398 }
399 </example>
400 </para>
401
402 </directive>
403
404
405 <directive name="if_modified_since">
406 <syntax>if_modified_since <value>[off|exact|before]</value></syntax>
407 <default>if_modified_since exact</default>
408 <context>http, server, location</context>
409
410 <para>
411 Директива (0.7.24) определяет, как сравнивать время модификации ответа и
412 время в заголовке запроса "If-Modified-Since":
413 <list type="bullet">
414
415 <listitem>
416 off — не проверять заголовок запроса
417 "If-Modified-Since" (0.7.34);
418 </listitem>
419
420 <listitem>
421 exact — точно совпадение;
422 </listitem>
423
424 <listitem>
425 before — время модификации ответа меньше или равно времени, заданному
426 в заголовке запроса "If-Modified-Since".
427 </listitem>
428
429 </list>
430 </para>
431
432 </directive>
433
434
435 <directive name="internal">
436 <syntax>internal</syntax>
437 <default>нет</default>
438 <context>location</context>
439
440 <para>
441 Директива указывает, что данный location может использоваться только
442 для внутренних запросов.
443 Для внешних запросов будет возвращаться ошибка "Not found" (404).
444 Внутренними запросами являются
445 <list type="bullet">
446
447 <listitem>
448 запросы, перенаправленные директивой error_page;
449 </listitem>
450
451 <listitem>
452 подзапросы, формируемые командой include virtual модуля ngx_http_ssi_module;
453 </listitem>
454
455 <listitem>
456 запросы, изменённые директивой rewrite модуля ngx_http_rewrite_module.
457 </listitem>
458
459 </list>
460 </para>
461
462 <para>
463 Пример использования:
464 <example>
465 error_page 404 /404.html;
466
467 location /404.html {
468 internal;
469 }
470 </example>
471 </para>
472
473 </directive>
474
475
476 <directive name="keepalive_requests">
477 <syntax>keepalive_requests <value>число</value></syntax>
478 <default>keepalive_requests 100</default>
479 <context>http, server, location</context>
480
481 <para>
482 Директива (0.8.0) задаёт максимальное число запросов, которые можно
483 сделать по одному keep-alive соединению.
484 </para>
485
486 </directive>
487
488
489 <directive name="keepalive_timeout">
490 <syntax>keepalive_timeout <value>время [время]</value></syntax>
491 <default>keepalive_timeout 75</default>
492 <context>http, server, location</context>
493
494 <para>
495 Директива задаёт таймаут, в течение которого keep-alive соединение
496 с клиентом не будет закрыто со стороны сервера.
497 Второй параметр задаёт значение в строке "Keep-Alive: timeout=время"
498 в заголовке ответа. Параметры могут отличаться друг от друга.
499 Строку "Keep-Alive: timeout=время" понимают Mozilla и Konqueror.
500 MSIE сам закрывает keep-alive соединение примерно через 60 секунд.
501 </para>
502
503 </directive>
504
505
506 <directive name="large_client_header_buffers">
507 <syntax>large_client_header_buffers <value>число размер</value>
508 </syntax>
509 <default>large_client_header_buffers 4 4k/8k</default>
510 <context>http, server</context>
511
512 <para>
513 Директива задаёт максимальное число и размер буферов для чтения
514 большого заголовка запроса клиента.
515 Строка запроса должна быть не больше размера одного буфера, иначе клиенту
516 возвращается ошибка "Request URI too large" (414).
517 Длинная строка заголовка запроса также должна быть не больше размера одного
518 буфера, иначе клиенту возвращается ошибка "Bad request" (400).
519 Буферы выделяются только по мере необходимости.
520 По умолчанию размер одного буфера равен размеру страницы, в зависимости
521 от платформы это или 4K, или 8K.
522 Если по окончании обработки запроса соединение переходит в состояние
523 keep-alive, то эти буферы освобождаются.
524 </para>
525
526 </directive>
527
528
529 <directive name="limit_except">
530 <syntax>limit_except <value>методы</value> { ... }</syntax>
531 <default>нет</default>
532 <context>location</context>
533
534 <para>
535 Директива ограничивает HTTP-методы, доступные внутри location.
536 Метод GET также включает в себя метод HEAD.
537 Для ограничения могут использоваться директивы модулей <link doc="ngx_http_access_module.xml">ngx_http_access_module</link>
538 и <link doc="ngx_http_auth_basic_module.xml">ngx_http_auth_basic_module</link>:
539 <example>
540 limit_except GET {
541 allow 192.168.1.0/32;
542 deny all;
543 }
544 </example>
545 Обратите внимание, что данное ограничение будет выполняться для всех методов,
546 <value>кроме</value> методов GET и HEAD.
547 </para>
548
549 </directive>
550
551
552 <directive name="limit_rate">
553
554 <syntax>limit_rate <value>скорость</value></syntax>
555 <default>нет</default>
556 <context>http, server, location, if в location</context>
557
558 <para>
559 Директива задаёт скорость передачи ответа клиенту.
560 Скорость задаётся в байтах в секунду.
561
562 Ограничение работает только для одного соединения, то есть,
563 если клиент откроет 2 соединения, то суммарная скорость будет в 2 раза
564 выше ограниченной.
565 </para>
566
567 <para>
568 Если необходимо ограничить скорость для части клиентов на уровне сервера,
569 то директива limit_rate для этого не подходит. Вместо этого следует
570 задать нужную скорость переменной $limit_rate:
571 <example>
572 server {
573
574 if ($slow) {
575 set $limit_rate 4k;
576 }
577
578 ...
579 }
580 </example>
581 </para>
582
583 </directive>
584
585
586 <directive name="limit_rate_after">
587 <syntax>limit_rate_after <value>размер</value></syntax>
588 <default>нет</default>
589 <context>http, server, location, if в location</context>
590
591 <para>
592 Директива (0.8.0) задаёт объём данных, после передачи которого
593 начинает ограничиваться скорость передачи ответа клиенту, например:
594 <example>
595 location /flv/ {
596 flv;
597 limit_rate_after 500k;
598 limit_rate 50k;
599 }
600 </example>
601 </para>
602
603 </directive>
604
605
606 <directive name="listen">
607 <syntax>listen <value>адрес:порт
608 [default|default_server|
609 [backlog=число |
610 rcvbuf=размер |
611 sndbuf=размер |
612 accept_filter=фильтр |
613 deferred |
614 bind |
615 ipv6only=[on|off] |
616 ssl]]
617 </value></syntax>
618 <default>listen *:80 | *:8000</default>
619 <context>server</context>
620
621 <para>
622 Директива задаёт адрес и порт, на которых сервер принимает запросы.
623 Можно указать только адрес или только порт, кроме того, адрес может
624 быть именем сервера, например:
625 <example>
626 listen 127.0.0.1:8000;
627 listen 127.0.0.1;
628 listen 8000;
629 listen *:8000;
630 listen localhost:8000;
631 </example>
632 адреса IPv6 (0.7.36) задаются в квадратных скобках:
633 <example>
634 listen [::]:8000;
635 listen [fe80::1];
636 </example>
637 </para>
638
639 <para>
640 Если указан только адрес, то используется порт 80.
641 </para>
642
643 <para>
644 Если директива не указана, то используется порт *:80, если nginx работает
645 с правами пользователя root, или порт *:8000.
646 </para>
647
648 <para>
649 Если у директивы есть параметр default, то сервер, в котором описана
650 эта директива, будет сервером по умолчанию для указанной пары адрес:порт.
651 Если же директив с параметром default нет, то сервером по умолчанию
652 будет первый сервер, в котором описана пара адрес:порт.
653 Начиная с версии 0.8.21, можно использовать параметр default_server.
654 </para>
655
656 <para>
657 В директиве listen с параметром default можно также указать несколько
658 параметров, специфичных для системных вызовов listen(2) и bind(2).
659 Начиная с версии 0.8.21, эти параметры можно задать в любой директиве
660 listen, но только один раз для указанной пары адрес:порт.
661 <list type="bullet">
662
663 <listitem>
664 backlog=число — задаёт параметр backlog в вызове listen(2).
665 По умолчанию backlog равен -1 для FreeBSD и 511 для всех остальных
666 платформ.
667 </listitem>
668
669 <listitem>
670 rcvbuf=размер — задаёт параметр SO_RCVBUF для слушающего сокета.
671 </listitem>
672
673 <listitem>
674 sndbuf=размер — задаёт параметр SO_SNDBUF для слушающего сокета.
675 </listitem>
676
677 <listitem>
678 accept_filter=фильтр — задаёт название accept-фильтра.
679 Работает только на FreeBSD, можно использовать два фильтра — dataready
680 и httpready.
681 По сигналу -HUP accept-фильтр можно менять только в последних
682 версиях FreeBSD, начиная с 6.0, 5.4-STABLE и 4.11-STABLE.
683 </listitem>
684
685 <listitem>
686 deferred — указывает использовать отложенный accept(2) на Linux
687 с помощью опции TCP_DEFER_ACCEPT.
688 </listitem>
689
690 <listitem>
691 bind — указывает, что для данной пары адрес:порт нужно делать bind(2)
692 отдельно.
693 Дело в том, что если описаны несколько директив listen с одинаковым портом,
694 но разными адресами и одна из директив listen слушает на всех адресах
695 для данного порта (*:порт), то nginx сделает bind(2) только на *:порт.
696 Необходимо учитывать, что в этом случае для определения адреса, на которой
697 пришло соединение, делается системный вызов getsockname().
698 Если же используются параметры backlog, rcvbuf, sndbuf, accept_filter
699 или deferred, то для данной пары адрес:порт bind(2) всегда делается отдельно.
700 </listitem>
701
702 <listitem>
703 ipv6only — параметр (0.7.42) задаёт значение параметра IPV6_V6ONLY
704 для слушающего сокета.
705 Установить этот параметр можно только один раз на старте.
706 </listitem>
707
708 <listitem>
709 ssl — параметр (0.7.14) не имеет отношения к системным вызовам
710 listen(2) и bind(2), а позволяет указать, что все соединения,
711 принимаемые на этом порту, должны работать в режиме SSL.
712 Это позволяет задать компактную конфигурацию для сервера,
713 работающего сразу в двух режимах — HTTP и HTTPS.
714 <example>
715 listen 80;
716 listen 443 default ssl;
717 </example>
718 </listitem>
719
720 </list>
721 </para>
722
723 <para>
724 Пример использования параметров:
725 <example>
726 listen 127.0.0.1 default accept_filter=dataready backlog=1024;
727 </example>
728 </para>
729
730 </directive>
731
732
733 <directive name="location">
734 <syntax>location [<value>=|~|~*|^~|@</value>] <value>/uri/</value>
735 { ... }</syntax>
736 <default>нет</default>
737 <context>server</context>
738
739 <para>
740 Директива устанавливает конфигурацию в зависимости от URI запроса.
741 location можно задать обычной строкой или регулярным выражением.
742 Регулярные выражения задаются префиксом "~*" — без учёта регистра
743 символов, и "~" — с учётом.
744 Для определения соответствия location'а и запроса
745 сначала проверяются location'ы, заданные обычными строками.
746 Среди них ищется максимальное совпадение.
747 Затем проверяются регулярные выражения.
748 В отличие от обычных строк, они не сортируются, а проверяются в порядке
749 их следования в конфигурационном файле.
750 Проверка регулярных выражений прекращается после первого же совпадения.
751 Если совпадение с регулярным выражением не найдено, то используется
752 конфигурация максимально совпавшего location'а.
753 </para>
754
755 <para>
756 Для операционных систем, не чувствительных к регистру символов, таких
757 как Mac OS X и Cygwin, проверка обычных строк делается без учёта
758 регистра (0.7.7).
759 Однако, сравнение ограничено только однобайтными locale'ями.
760 </para>
761
762 <para>
763 Регулярное выражение может содержать выделения (0.7.40), которые
764 могут затем использоваться в других директивах.
765 </para>
766
767 <para>
768 Если нужно запретить проверку регулярных выражений после проверки
769 обычных строк, то это можно сделать с помощью префикса "^~".
770 Если у максимально совпавшего location'а есть этот префикс, то
771 регулярные выражения не проверяются.
772 </para>
773
774 <para>
775 Кроме того, с помощью префикса "=" можно задать точное совпадение
776 URI и location. При совпадении поиск сразу же прекращается, так как
777 дальше искать не имеет смысла. Например, если запрос "/" очень частый,
778 то указав "location = /", можно ускорить обработку этого запроса,
779 так как поиск location прекратится после первого же сравнения.
780 </para>
781
782 <para>
783 В версиях с 0.7.1 по 0.8.41, если запрос точно совпал с обычным location'ом
784 без префиксов "=" и "^~", то поиск тоже сразу же прекращается и
785 регулярные выражения также не проверяются.
786 </para>
787
788 <para>
789 Проиллюстрируем вышесказанное примером:
790 <example>
791 location = / {
792 [ конфигурация A ]
793 }
794
795 location / {
796 [ конфигурация B ]
797 }
798
799 location ^~ /images/ {
800 [ конфигурация C ]
801 }
802
803 location ~* \.(gif|jpg|jpeg)$ {
804 [ конфигурация D ]
805 }
806 </example>
807 Для запроса "/" будет выбрана конфигурация A,
808 для запроса "/documents/document.html" — конфигурация B,
809 для запроса "/images/1.gif" — конфигурация C,
810 для запроса "/documents/1.jpg" — конфигурация D.
811 </para>
812
813 <para>
814 Префикс "@" задаёт именованный location. Такой location не используется
815 при обычной обработке запросов, а предназначен только для перенаправления
816 в него запросов.
817 </para>
818
819 </directive>
820
821
822 <directive name="log_not_found">
823 <syntax>log_not_found <value>[on|off]</value></syntax>
824 <default>log_not_found on</default>
825 <context>http, server, location</context>
826
827 <para>
828 Директива разрешает или запрещает записывать в error_log
829 ошибки о том, что файл не найден.
830 </para>
831
832 </directive>
833
834
835 <directive name="log_subrequest">
836 <syntax>log_subrequest <value>[on|off]</value></syntax>
837 <default>log_subrequest off</default>
838 <context>http, server, location</context>
839
840 <para>
841 Директива разрешает или запрещает записывать в <link doc="ngx_http_log_module.xml#access_log">access_log</link>
842 подзапросы.
843 </para>
844
845 </directive>
846
847
848 <directive name="merge_slashes">
849 <syntax>merge_slashes <value>[on|off]</value></syntax>
850 <default>merge_slashes on</default>
851 <context>http, server</context>
852
853 <para>
854 Директива разрешает или запрещает объединять в URI два и более слэшей в один.
855 </para>
856
857 <para>
858 Необходимо иметь ввиду, что это объединение необходимо для корректной
859 проверки location'ов и регулярных выражений.
860 Например, запрос "//scripts/one.php" не попадает в
861 <example>
862 location /scripts/ {
863 ...
864 }
865 </example>
866 и может быть обслужен как статический файл,
867 поэтому он приводится в "/scripts/one.php".
868 </para>
869
870 <para>
871 Выключение объединения может понадобиться, если в URI используются имена,
872 закодированные методом base64, который использует символ "/".
873 Но по соображениям безопасности лучше избегать выключения объединения.
874 </para>
875
876 <para>
877 Если директива указана на уровне server в сервере по умолчанию,
878 то её значение распространяется на все виртуальные сервера, слушающие
879 на том же адресе и порту.
880 </para>
881
882 </directive>
883
884
885 <directive name="msie_padding">
886 <syntax>msie_padding <value>[on|off]</value></syntax>
887 <default>msie_padding on</default>
888 <context>http, server, location</context>
889
890 <para>
891 Директива разрешает или запрещает добавлять в ответы для MSIE
892 со статусом больше 400
893 комментарий для увеличения размера ответа до 512 байт.
894 </para>
895
896 </directive>
897
898
899 <directive name="msie_refresh">
900 <syntax>msie_refresh <value>[on|off]</value></syntax>
901 <default>msie_refresh off</default>
902 <context>http, server, location</context>
903
904 <para>
905 Директива разрешает или запрещает выдавать для MSIE refresh'ы вместо
906 редиректов.
907 </para>
908
909 </directive>
910
911
912 <directive name="open_file_cache">
913 <syntax>open_file_cache <value>max=N [inactive=время]|off</value>
914 </syntax>
915 <default>open_file_cache off</default>
916 <context>http, server, location</context>
917
918 <para>
919 Директива задаёт кэш, в котором могут хранится
920 <list type="bullet">
921
922 <listitem>
923 дескрипторы открытых файлов, информация об их размерах и времени модификации;
924 </listitem>
925
926 <listitem>
927 информация о существовании каталогов;
928 </listitem>
929
930 <listitem>
931 информация об ошибках поиска файла — нет файла, нет прав на чтение
932 и тому подобное. Кэширование ошибок нужно разрешить директивой
933 <link id="open_file_cache_errors"/>.
934 </listitem>
935
936 </list>
937 </para>
938
939 <para>
940 Параметры директивы:
941 <list type="bullet">
942
943 <listitem>
944 max — задаёт максимальное число элементов в кэше;
945 при переполнении кэша удаляются наиболее давно не используемые элементы (LRU);
946 </listitem>
947
948 <listitem>
949 inactive — задаёт время, после которого элемент кэша удаляется,
950 если к нему не было обращений в течение этого времени;
951 по умолчанию 60 секунд;
952 </listitem>
953
954 <listitem>
955 off — запрещает кэш.
956 </listitem>
957
958 </list>
959 </para>
960
961 <para>
962 Пример использования:
963 <example>
964 open_file_cache max=1000 inactive=20s;
965 open_file_cache_valid 30s;
966 open_file_cache_min_uses 2;
967 open_file_cache_errors on;
968 </example>
969 </para>
970
971 </directive>
972
973
974 <directive name="open_file_cache_errors">
975 <syntax>open_file_cache_errors <value>on|off</value></syntax>
976 <default>open_file_cache_errors off</default>
977 <context>http, server, location</context>
978
979 <para>
980 Директива определяет, кэшировать или нет ошибки поиска файлов в
981 <link id="open_file_cache"/>.
982 </para>
983
984 </directive>
985
986
987 <directive name="open_file_cache_min_uses">
988 <syntax>open_file_cache_min_uses <value>число</value></syntax>
989 <default>open_file_cache_min_uses 1</default>
990 <context>http, server, location</context>
991
992 <para>
993 Директива определяет минимальное число использований файла в течение
994 времени, заданного параметром inactive в директиве
995 <link id="open_file_cache"/>, после которого дескриптор файла
996 будет оставаться открытым в кэше.
997 </para>
998
999 </directive>
1000
1001
1002 <directive name="open_file_cache_valid">
1003 <syntax>open_file_cache_valid <value>время</value></syntax>
1004 <default>open_file_cache_valid 60</default>
1005 <context>http, server, location</context>
1006
1007 <para>
1008 Директива определяет, через какое время нужно проверять актуальность
1009 информации об элементе в <link id="open_file_cache"/>.
1010
1011 </para>
1012
1013 </directive>
1014
1015
1016 <directive name="optimize_server_names">
1017 <syntax>optimize_server_names <value>[on|off]</value></syntax>
1018 <default>optimize_server_names on</default>
1019 <context>http, server</context>
1020
1021 <para>
1022 Устаревшая директива.
1023 </para>
1024
1025 <para>
1026 Директива разрешает или запрещает оптимизировать проверку имени хоста
1027 в name-based виртуальных серверах.
1028 Проверка в частности влияет на имя хоста, используемого в редиректах.
1029 Если оптимизация разрешена и все name-based сервера, слушающие на одной
1030 паре адрес:порт, имеют одинаковую конфигурацию, то во время исполнения
1031 запроса имена не проверяются и в редиректах используется первое имя сервера.
1032 Если в редиректе нужно использовать имя хоста, переданное клиентом,
1033 то оптимизацию нужно выключить.
1034 </para>
1035
1036 </directive>
1037
1038
1039 <directive name="port_in_redirect">
1040 <syntax>port_in_redirect <value>[on|off]</value></syntax>
1041 <default>port_in_redirect on</default>
1042 <context>http, server, location</context>
1043
1044 <para>
1045 Директива разрешает или запрещает указывать порт в редиректах,
1046 выдаваемых nginx'ом.
1047 </para>
1048
1049 </directive>
1050
1051
1052 <directive name="read_ahead">
1053 <syntax>read_ahead <value>размер</value></syntax>
1054 <default>read_ahead 0</default>
1055 <context>http, server, location</context>
1056
1057 <para>
1058 Директива задаёт ядру размер предчтения при работе с файлами.
1059 Под Линуксом используется системный вызов
1060 <example>
1061 posix_fadvise(0, 0, 0, POSIX_FADV_SEQUENTIAL);
1062 </example>
1063 поэтому размер игнорируется.
1064 </para>
1065
1066 <para>
1067 Под FreeBSD используется fcntl(O_READAHEAD, размер), появившийся
1068 во FreeBSD-9 CURRENT. Для FreeBSD 7 нужно установить
1069 <link url="http://sysoev.ru/freebsd/patch.readahead.txt">патч</link>.
1070 </para>
1071
1072 </directive>
1073
1074
1075 <directive name="recursive_error_pages">
1076 <syntax>recursive_error_pages <value>[on|off]</value></syntax>
1077 <default>recursive_error_pages off</default>
1078 <context>http, server, location</context>
1079
1080 <para>
1081 Директива разрешает или запрещает делать несколько перенаправлений через
1082 директиву <link id="error_page"/>.
1083 </para>
1084
1085 </directive>
1086
1087
1088 <directive name="reset_timedout_connection">
1089 <syntax>reset_timedout_connection <value>[on|off]</value></syntax>
1090 <default>reset_timedout_connection off</default>
1091 <context>http, server, location</context>
1092
1093 <para>
1094 Директива разрешает или запрещает сбрасывать соединение по таймауту.
1095 Сброс делается следующим образом — перед закрытием сокета для него
1096 ставится опция SO_LINGER с таймаутом 0. После чего при закрытии сокета
1097 клиенту отсылается пакет RST, а всё память, связанная с этим сокетом,
1098 освобождается. Это позволяет избежать длительного нахождения уже закрытого
1099 сокета в состоянии FIN_WAIT1 с заполненными буферами.
1100 </para>
1101
1102 <para>
1103 Необходимо отметить, что соединения, находящиеся в состоянии keepalive,
1104 по истечении таймаута закрываются обычным образом.
1105 </para>
1106
1107 </directive>
1108
1109
1110 <directive name="resolver">
1111 <syntax>resolver <value>адрес</value></syntax>
1112 <default>нет</default>
1113 <context>http, server, location</context>
1114
1115 <para>
1116 Директива задаёт адрес name-сервера, например:
1117 <example>
1118 resolver 127.0.0.1;
1119 </example>
1120 </para>
1121
1122 </directive>
1123
1124
1125 <directive name="resolver_timeout">
1126 <syntax>resolver_timeout <value>время</value></syntax>
1127 <default>resolver_timeout 30s</default>
1128 <context>http, server, location</context>
1129
1130 <para>
1131 Директива задаёт таймаут для определения имени, например:
1132 <example>
1133 resolver_timeout 5s;
1134 </example>
1135 </para>
1136
1137 </directive>
1138
1139
1140 <directive name="root">
1141 <syntax>root <value>путь</value></syntax>
1142 <default>root html</default>
1143 <context>http, server, location, if в location</context>
1144
1145 <para>
1146 Директива задаёт корневой каталог для запросов.
1147 Например, при такой конфигурации
1148 <example>
1149 location /i/ {
1150 root /data/w3;
1151 }
1152 </example>
1153 на запрос "/i/top.gif" будет отдан файл "/data/w3/i/top.gif".
1154 </para>
1155
1156 <para>
1157 В значении пути можно использовать переменные.
1158 </para>
1159
1160 <para>
1161 Путь к файлу формируется как простое добавление URI к значению директивы root.
1162 Если же необходима модификация URI, то нужно воспользоваться директивой
1163 <link id="alias"/>.
1164 </para>
1165
1166 </directive>
1167
1168
1169 <directive name="satisfy">
1170 <syntax>satisfy <value>all|any</value></syntax>
1171 <default>satisfy all</default>
1172 <context>location</context>
1173
1174 <para>
1175 Директива разрешает доступ при хотя бы одной успешной проверке,
1176 выполненной модулями <link doc="ngx_http_access_module.xml">ngx_http_access_module</link>
1177 или <link doc="ngx_http_auth_basic_module.xml">ngx_http_auth_basic_module</link>:
1178 <example>
1179 location / {
1180 satisfy any;
1181
1182 allow 192.168.1.0/32;
1183 deny all;
1184
1185 auth_basic "closed site";
1186 auth_basic_user_file conf/htpasswd;
1187 }
1188 </example>
1189 </para>
1190
1191 </directive>
1192
1193
1194 <directive name="satisfy_any">
1195 <syntax>satisfy_any <value>on|off</value></syntax>
1196 <default>satisfy_any off</default>
1197 <context>location</context>
1198
1199 <para>
1200 Директива переименована в директиву <link id="satisfy"/>.
1201 </para>
1202
1203 </directive>
1204
1205
1206 <directive name="send_timeout">
1207 <syntax>send_timeout <value>время</value></syntax>
1208 <default>send_timeout 60</default>
1209 <context>http, server, location</context>
1210
1211 <para>
1212 Директива задаёт таймаут при передаче ответа клиенту.
1213 Таймаут устанавливается не на всю передачу ответа,
1214 а только между двумя операциями записями.
1215 Если по истечении этого времени клиент ничего не примет,
1216 то nginx закрывает соединение.
1217 </para>
1218
1219 </directive>
1220
1221
1222 <directive name="sendfile">
1223 <syntax>sendfile <value>[on|off]</value></syntax>
1224 <default>sendfile off</default>
1225 <context>http, server, location</context>
1226
1227 <para>
1228 Директива разрешает или запрещает использовать sendfile().
1229 </para>
1230
1231 </directive>
1232
1233
1234 <directive name="server">
1235 <syntax>server { ... }</syntax>
1236 <default>нет</default>
1237 <context>http</context>
1238
1239 <para>
1240 Директива задаёт конфигурацию для виртуального сервера.
1241 Чёткого разделения виртуальных серверов ip-based (на основании ip-адреса)
1242 и name-based (на основании имени, передаваемого в строке "Host"
1243 заголовка запроса), нет.
1244 Вместо этого директивами <link id="listen"/> описываются все адреса
1245 и порты, на которых нужно принимать соединения для этого сервера,
1246 и в директиве <link id="server_name"/> указываются все имена серверов.
1247 Пример конфигурации описан в <link doc="../virtual_hosts.xml">
1248 настройке виртуальных серверов</link>.
1249 </para>
1250
1251 </directive>
1252
1253
1254 <directive name="server_name">
1255 <syntax>server_name <value>имя [...]</value></syntax>
1256 <default>server_name hostname</default>
1257 <context>server</context>
1258
1259 <para>
1260 Директива задаёт имена виртуального сервера, например:
1261 <example>
1262 server {
1263 server_name example.com www.example.com;
1264 }
1265 </example>
1266 </para>
1267
1268 <para>
1269 Первое имя становится основным именем сервера.
1270 По умолчанию используется имя машины (hostname).
1271 В именах серверов можно использовать "*" для замены первой или последней
1272 части имени:
1273 <example>
1274 server {
1275 server_name example.com *.example.com www.example.*;
1276 }
1277 </example>
1278 </para>
1279
1280 <para>
1281 Два первых вышеприведённых имени можно объединить в одно:
1282 <example>
1283 server {
1284 server_name .example.com;
1285 }
1286 </example>
1287 </para>
1288
1289 <para>
1290 Кроме того, в качестве имени сервера можно использовать регулярное
1291 выражение, указав перед ним "~":
1292 <example>
1293 server {
1294 server_name www.example.com ~^www\d+\.example\.com$;
1295 }
1296 </example>
1297 </para>
1298
1299 <para>
1300 Регулярное выражение может содержать выделения (0.7.40), которые
1301 могут затем использоваться в других директивах:
1302 <example>
1303 server {
1304 server_name ~^(www\.)?(.+)$;
1305
1306 location / {
1307 root /sites/$2;
1308 }
1309 }
1310
1311 server {
1312 server_name _;
1313
1314 location / {
1315 root /sites/default;
1316 }
1317 }
1318 </example>
1319 </para>
1320
1321 <para>
1322 Начиная с 0.8.25, именованные выделения в регулярном выражении создают
1323 переменные, которые могут затем использоваться в других директивах:
1324 <example>
1325 server {
1326 server_name ~^(www\.)?(<emphasis>?&lt;domain&gt;</emphasis>.+)$;
1327
1328 location / {
1329 root /sites/<emphasis>$domain</emphasis>;
1330 }
1331 }
1332
1333 server {
1334 server_name _;
1335
1336 location / {
1337 root /sites/default;
1338 }
1339 }
1340 </example>
1341 </para>
1342
1343 <para>
1344 Начиная с 0.7.11, можно использовать пустое имя "":
1345 <example>
1346 server {
1347 server_name www.example.com "";
1348 }
1349 </example>
1350 что позволяет обрабатывать запросы без строки "Host" в заголовке запроса
1351 в этом сервере, а не в сервере по умолчанию для данной пары адрес:порт.
1352 </para>
1353
1354 <para>
1355 Порядок проверки имён следующий:
1356 <list type="bullet">
1357
1358 <listitem>
1359 полные имена,
1360 </listitem>
1361
1362 <listitem>
1363 имена с маской в начале имени — *.example.com,
1364 </listitem>
1365
1366 <listitem>
1367 имена с маской в конце имени — mail.*,
1368 </listitem>
1369
1370 <listitem>
1371 регулярные выражения.
1372 </listitem>
1373
1374 </list>
1375 </para>
1376
1377 </directive>
1378
1379
1380 <directive name="server_name_in_redirect">
1381 <syntax>server_name_in_redirect <value>[on|off]</value></syntax>
1382 <default>server_name_in_redirect on</default>
1383 <context>http, server, location</context>
1384
1385 <para>
1386 Директива разрешает или запрещает использовать в редиректах, выдаваемых
1387 nginx'ом, основное имя сервера, задаваемое директивой
1388 <link id="server_name"/>.
1389 Если использование основного имени запрещено, то используется имя,
1390 указанного в строке "Host" в заголовке запроса.
1391 Если же этой строки нет, то используется IP-адрес сервера.
1392 </para>
1393
1394 </directive>
1395
1396
1397 <directive name="server_names_hash_max_size">
1398 <syntax>server_names_hash_max_size <value>число</value></syntax>
1399 <default>server_names_hash_max_size 512</default>
1400 <context>http</context>
1401
1402 <para>
1403 Директива задаёт максимальный размер хэш-таблиц имён серверов.
1404 Подробнее смотри в <link doc="../hash.xml">описании
1405 настройки хэшей</link>.
1406 </para>
1407
1408 </directive>
1409
1410
1411 <directive name="server_names_hash_bucket_size">
1412 <syntax>server_names_hash_bucket_size <value>число</value></syntax>
1413 <default>server_names_hash_bucket_size 32/64/128</default>
1414 <context>http</context>
1415
1416 <para>
1417 Директива задаёт размер корзины в хэш-таблицах имён серверов.
1418 Значение по умолчанию зависит от размера строки кэша процессора.
1419 Подробнее смотри в <link doc="../hash.xml">описании
1420 настройки хэшей</link>.
1421 </para>
1422
1423 </directive>
1424
1425
1426 <directive name="server_tokens">
1427 <syntax>server_tokens <value>[on|off]</value></syntax>
1428 <default>server_tokens on</default>
1429 <context>http, server, location</context>
1430
1431 <para>
1432 Директива разрешает или запрещает выдавать версию nginx'а
1433 в сообщениях об ошибках и в строке заголовка ответа "Server".
1434 </para>
1435
1436 </directive>
1437
1438
1439 <directive name="tcp_nodelay">
1440 <syntax>tcp_nodelay <value>[on|off]</value></syntax>
1441 <default>tcp_nodelay on</default>
1442 <context>http, server, location</context>
1443
1444 <para>
1445 Директива разрешает или запрещает использовать опцию TCP_NODELAY.
1446 Опция включаются только при переходе соединения в состояние keep-alive.
1447 </para>
1448
1449 </directive>
1450
1451
1452 <directive name="tcp_nopush">
1453 <syntax>tcp_nopush <value>[on|off]</value></syntax>
1454 <default>tcp_nopush off</default>
1455 <context>http, server, location</context>
1456
1457 <para>
1458 Директива разрешает или запрещает использовать опции
1459 TCP_NOPUSH во FreeBSD или TCP_CORK в Linux.
1460 Опции включаются только при использовании <link id="sendfile"/>.
1461 Включение опции позволяет
1462 <list type="bullet">
1463
1464 <listitem>
1465 передавать заголовок ответа и начало файла в одном пакете в Linux
1466 и во FreeBSD 4.x;
1467 </listitem>
1468
1469 <listitem>
1470 передавать файл в полных пакетах.
1471 </listitem>
1472
1473 </list>
1474 </para>
1475
1476 </directive>
1477
1478
1479 <directive name="try_files">
1480 <syntax>try_files <value>файл [файл ...] (uri|=код)</value></syntax>
1481 <default>нет</default>
1482 <context>location</context>
1483
1484 <para>
1485 Директива проверяет существование файлов в заданном порядке
1486 и использует для обработки запроса первый найденный файл, причём
1487 обработка делается в контексте этого же location'а.
1488 С помощью слэша в конце имени можно задать проверку существования
1489 каталога, например, так — "$uri/".
1490 В случае, если ни один файл не найден, то делается внутренний редирект
1491 на последний параметр.
1492 Последний параметр может быть кодом (0.7.51):
1493 <example>
1494 location / {
1495 try_files $uri $uri/index.html $uri.html =404;
1496 }
1497 </example>
1498 </para>
1499
1500 <para>
1501 Пример использования при проксировании Mongrel:
1502 <example>
1503 location / {
1504 try_files /system/maintenance.html
1505 $uri $uri/index.html $uri.html
1506 @mongrel;
1507 }
1508
1509 location @mongrel {
1510 proxy_pass http://mongrel;
1511 }
1512 </example>
1513 </para>
1514
1515 <para>
1516 Пример использования вместе с Drupal/FastCGI:
1517 <example>
1518 location / {
1519 try_files $uri $uri/ @drupal;
1520 }
1521
1522 location ~ \.php$ {
1523 try_files $uri @drupal;
1524
1525 fastcgi_pass ...;
1526
1527 fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name;
1528 fastcgi_param SCRIPT_NAME $fastcgi_script_name;
1529 fastcgi_param QUERY_STRING $args;
1530
1531 ... прочие fastcgi_param
1532 }
1533
1534 location @drupal {
1535 fastcgi_pass ...;
1536
1537 fastcgi_param SCRIPT_FILENAME /path/to/index.php;
1538 fastcgi_param SCRIPT_NAME /index.php;
1539 fastcgi_param QUERY_STRING q=$uri&amp;$args;
1540
1541 ... прочие fastcgi_param
1542 }
1543 </example>
1544 В этом примере директива try_files
1545 <example>
1546 location / {
1547 try_files $uri $uri/ @drupal;
1548 }
1549 </example>
1550 аналогична директивам
1551 <example>
1552 location / {
1553 error_page 404 = @drupal;
1554 log_not_found off;
1555 }
1556 </example>
1557 А здесь
1558 <example>
1559 location ~ \.php$ {
1560 try_files $uri @drupal;
1561
1562 fastcgi_pass ...;
1563
1564 fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name;
1565
1566 ...
1567 }
1568 </example>
1569 try_files тестирует существование PHP-файла,
1570 прежде чем передать запрос FastCGI-серверу.
1571 </para>
1572
1573 <para>
1574 Пример использования вместе с Wordpress и Joomla:
1575 <example>
1576 location / {
1577 try_files $uri $uri/ @wordpress;
1578 }
1579
1580 location ~ \.php$ {
1581 try_files $uri @wordpress;
1582
1583 fastcgi_pass ...;
1584
1585 fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name;
1586 ... прочие fastcgi_param
1587 }
1588
1589 location @wordpress {
1590 fastcgi_pass ...;
1591
1592 fastcgi_param SCRIPT_FILENAME /path/to/index.php;
1593 ... прочие fastcgi_param
1594 }
1595 </example>
1596 </para>
1597
1598 </directive>
1599
1600
1601 <directive name="types">
1602 <syntax>types <value>{ ... }</value></syntax>
1603 <default>see below</default>
1604 <context>http, server, location</context>
1605
1606 <para>
1607 Директива задаёт соответствие расширения и MIME-типов ответов.
1608 Одному MIME-типу может соответствовать несколько расширений.
1609 По умолчанию используется такие соответствия:
1610 <example>
1611 types {
1612 text/html html;
1613 image/gif gif;
1614 image/jpeg jpg;
1615 }
1616 </example>
1617 </para>
1618
1619 <para>
1620 Достаточно полная таблица соответствий входит в дистрибутив
1621 и находится в файле conf/mime.types.
1622 </para>
1623
1624 <para>
1625 Для того, чтобы для определённого location'а для всех ответов выдавался
1626 MIME-тип "application/octet-stream", можно использовать следующее:
1627 <example>
1628 location /download/ {
1629 types { }
1630 default_type application/octet-stream;
1631 }
1632 </example>
1633 </para>
1634
1635 </directive>
1636
1637
1638 <directive name="underscores_in_headers">
1639 <syntax>underscores_in_headers <value>[on|off]</value></syntax>
1640 <default>underscores_in_headers off</default>
1641 <context>http, server</context>
1642
1643 <para>
1644 Директива разрешает или запрещает использование символов подчёркивания
1645 в строках заголовка запроса клиента.
1646 </para>
1647
1648 </directive>
1649
1650 </section>
1651
1652
1653 <section name="Встроенные переменные" id="variables">
1654
1655 <para>
1656 Модуль ngx_http_core_module поддерживает встроенные переменные, имена
1657 которых совпадают с именами переменных в Apache.
1658 Прежде всего, это переменные, представляющие из себя строки заголовка
1659 запроса клиента, например, $http_user_agent, $http_cookie
1660 и тому подобное. Кроме того, есть и другие переменные:
1661 <list type="bullet">
1662
1663 <listitem>
1664 $args, эта переменная равна аргументам в строке запроса;
1665 </listitem>
1666
1667 <listitem>
1668 $arg_<value>name</value>, эта переменная равна аргументу <value>name</value>
1669 в строке запроса;
1670 </listitem>
1671
1672 <listitem>
1673 $binary_remote_addr, эта переменная равна адресу клиента в бинарном виде,
1674 длина её значения всегда 4 байта;
1675 </listitem>
1676
1677 <listitem>
1678 $content_length, эта переменная равна строке "Content-Length" в заголовке
1679 запроса;
1680 </listitem>
1681
1682 <listitem>
1683 $content_type, эта переменная равна строке "Content-Type" в заголовке запроса;
1684 </listitem>
1685
1686 <listitem>
1687 $cookie_<value>name</value>, эта переменная равна cookie <value>name</value>;
1688 </listitem>
1689
1690 <listitem>
1691 $document_root, эта переменная равна значению директивы root для
1692 текущего запроса;
1693 </listitem>
1694
1695 <listitem>
1696 $document_uri, то же самое, что и $uri;
1697 </listitem>
1698
1699 <listitem>
1700 $host, эта переменная равна строке "Host" в заголовке запроса
1701 или имени сервера, на который пришёл запрос, если этой строки нет;
1702 </listitem>
1703
1704 <listitem>
1705 $hostname, эта переменная равна имени хоста;
1706 </listitem>
1707
1708 <listitem>
1709 $http_<value>name</value>, эта переменная равна строке <value>name</value>
1710 в заголовке запроса;
1711 </listitem>
1712
1713 <listitem>
1714 $is_args, эта переменная равна "?", если в строке запроса есть аргументы,
1715 и пустой строке, если их нет;
1716 </listitem>
1717
1718 <listitem>
1719 $limit_rate, эта переменная позволяет установить ограничение
1720 скорости соединения;
1721 </listitem>
1722
1723 <listitem>
1724 $pid, эта переменная равна номеру рабочего процесса;
1725 </listitem>
1726
1727 <listitem>
1728 $request_method, эта переменная равна методу запроса,
1729 обычно это "GET" или "POST";
1730 </listitem>
1731
1732 <listitem>
1733 $remote_addr, эта переменная равна адресу клиента;
1734 </listitem>
1735
1736 <listitem>
1737 $remote_port, эта переменная равна порту клиента;
1738 </listitem>
1739
1740 <listitem>
1741 $remote_user, эта переменная равна имени пользователя, используемого
1742 в Basic аутентификации;
1743 </listitem>
1744
1745 <listitem>
1746 $realpath_root, эта переменная равна значению директивы root для
1747 текущего запроса, при этом все символические ссылки преобразованы
1748 в реальные путь;
1749 </listitem>
1750
1751 <listitem>
1752 $request_filename, эта переменная равна пути к файлу для текущего
1753 запроса, формируемому из директив root или alias и URI запроса;
1754 </listitem>
1755
1756 <listitem>
1757 $request_body, эта переменная содержит тело запроса.
1758 Значение переменной появляется в location'ах, обрабатываемых директивами
1759 <link doc="ngx_http_proxy_module.xml#proxy_pass">proxy_pass</link>
1760 и <link doc="ngx_http_fastcgi_module.xml#fastcgi_pass">fastcgi_pass</link>.
1761 </listitem>
1762
1763 <listitem>
1764 $request_body_file, эта переменная равна имени временного файла, в котором
1765 хранится тело запроса.
1766 По завершению работы файл необходимо удалить.
1767 Для того, чтобы тело запроса клиента всегда записывалось в файл, нужно
1768 указать <link doc="ngx_http_core_module.xml#client_body_in_file_only">client_body_in_file_only on</link>.
1769 При передаче имени в проксированном запросе или в запросе к FastCGI-серверу
1770 следует запретить передачу самого тела директивами
1771 "proxy_pass_request_body off" или
1772 "fastcgi_pass_request_body off" соответственно.
1773 </listitem>
1774
1775 <listitem>
1776 $request_uri, эта переменная равна полному первоначальному URI вместе
1777 с аргументами;
1778 </listitem>
1779
1780 <listitem>
1781 $query_string, то же самое, что и $args;
1782 </listitem>
1783
1784 <listitem>
1785 $scheme, эта переменная равна схеме запроса — "http" или "https";
1786 </listitem>
1787
1788 <listitem>
1789 $server_protocol, эта переменная равна протоколу запроса,
1790 обычно это "HTTP/1.0" или "HTTP/1.1";
1791 </listitem>
1792
1793 <listitem>
1794 $server_addr, эта переменная равна адресу сервера, на который пришёл запрос.
1795 Как правило, для получения значения этой переменной делается один системный
1796 вызов. Для того, чтобы избежать системного вызова, нужно указывать
1797 адреса в директивах listen и использовать параметр bind;
1798 </listitem>
1799
1800 <listitem>
1801 $server_name, эта переменная равна имени сервера, на который пришёл запрос;
1802 </listitem>
1803
1804 <listitem>
1805 $server_port, эта переменная равна порту сервера, на который пришёл запрос;
1806 </listitem>
1807
1808 <listitem>
1809 $uri, эта переменная равна текущему URI в запросе, он
1810 может отличаться от первоначального, например, при внутренних редиректах
1811 или при использовании индексных файлов.
1812 </listitem>
1813
1814 </list>
1815 </para>
1816
1817 </section>
1818
1819 </module>