comparison xml/ru/docs/http/ngx_http_proxy_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_proxy_module"
6 link="/ru/docs/http/ngx_http_proxy_module.html"
7 lang="ru">
8
9 <section name="" id="summary">
10
11 <para>
12 Модуль ngx_http_proxy_module позволяет передавать запросы другому серверу.
13 </para>
14
15 </section>
16
17
18 <section name="Пример конфигурации" id="example">
19
20 <para>
21 <example>
22 location / {
23 proxy_pass http://localhost:8000;
24 proxy_set_header Host $host;
25 proxy_set_header X-Real-IP $remote_addr;
26 }
27 </example>
28 </para>
29
30 </section>
31
32
33 <section name="Директивы" id="directives">
34
35 <directive name="proxy_buffer_size">
36 <syntax>proxy_buffer_size <value>размер</value></syntax>
37 <default>proxy_buffer_size 4k/8k</default>
38 <context>http, server, location</context>
39
40 <para>
41 Директива задаёт размер буфера, в который будет читаться
42 первая часть ответа, получаемого от проксируемого сервера.
43 В этой части ответа находится, как правило, небольшой заголовок ответа.
44 По умолчанию размер буфера равен размеру одного буфера в директиве
45 <link id="proxy_buffers"/>, однако его можно сделать меньше.
46 </para>
47
48 </directive>
49
50
51 <directive name="proxy_buffering">
52 <syntax>proxy_buffering <value>on|off</value></syntax>
53 <default>proxy_buffering on</default>
54 <context>http, server, location</context>
55
56 <para>
57 Директива разрешает использовать буферизацию ответа проксируемого сервера.
58 Если буферизация включена, то nginx принимает ответ проксируемого сервера
59 как можно быстрее, сохраняя его в буфера, заданные директивами
60 <link id="proxy_buffer_size"/> и <link id="proxy_buffers"/>.
61 Если ответ не помещается полностью в память, то его часть записывается на диск.
62 </para>
63
64 <para>
65 Если буферизация выключена, то ответ синхронно передаётся клиенту сразу же
66 по мере его поступления. nginx не пытается считать весь ответ проксируемого
67 сервера, максимальный размер данных, который nginx может принять от сервера
68 задаётся директивой <link id="proxy_buffer_size"/>.
69 </para>
70
71 </directive>
72
73
74 <directive name="proxy_buffers">
75 <syntax>proxy_buffers <value>число размер</value></syntax>
76 <default>proxy_buffers 8 4k/8k</default>
77 <context>http, server, location</context>
78
79 <para>
80 Директива задаёт число и размер буферов для одного соединения,
81 в которые будет читаться ответ, получаемый от проксируемого сервера.
82 По умолчанию размер одного буфера равен размеру страницы, в зависимости
83 от платформы это или 4K, или 8K.
84 </para>
85
86 </directive>
87
88
89 <directive name="proxy_cache">
90 <syntax>proxy_cache <value>[зона|off]</value></syntax>
91 <default>off</default>
92 <context>http, server, location</context>
93
94 <para>
95 Директива задаёт зону для кэширования.
96 Одна и та же зона может использоваться в нескольких местах.
97 Параметр "off" запрещает кэширование, унаследованное с предыдущего
98 уровня конфигурации.
99 </para>
100
101 </directive>
102
103
104 <directive name="proxy_cache_bypass">
105 <syntax>proxy_cache_bypass <value>строка [...]</value></syntax>
106 <default>нет</default>
107 <context>http, server, location</context>
108
109 <para>
110 Директива задаёт условия, при которых ответ не будет браться из кэша.
111 Если значение хотя бы одной из строк переменных не пустое и не равно "0",
112 то ответ не берётся из кэша:
113 <example>
114 proxy_cache_bypass $cookie_nocache $arg_nocache$arg_comment;
115 proxy_cache_bypass $http_pragma $http_authorization;
116 </example>
117 Можно использовать совместно с директивой <link id="proxy_no_cache"/>.
118 </para>
119
120 </directive>
121
122
123 <directive name="proxy_cache_key">
124 <syntax>proxy_cache_key <value>строка</value></syntax>
125 <default>$scheme$proxy_host$request_uri</default>
126 <context>http, server, location</context>
127
128 <para>
129 Директива задаёт ключ для кэширования, например,
130 <example>
131 proxy_cache_key "$host$request_uri $cookie_user";
132 </example>
133 По умолчанию значение директивы близко к строке
134 <example>
135 proxy_cache_key $scheme$proxy_host$uri$is_args$args;
136 </example>
137 </para>
138
139 </directive>
140
141
142 <directive name="proxy_cache_path">
143 <syntax>proxy_cache_path <value>путь [levels=уровни]
144 keys_zone=название:размер [inactive=время] [max_size=размер]</value></syntax>
145 <default>нет</default>
146 <context>http</context>
147
148 <para>
149 Директива задаёт путь и другие параметры кэша. Данные кэша хранятся в файлах.
150 Ключом и именем файла в кэше является результат функции md5 от
151 проксированного URL. Параметр levels задаёт уровни иерархии кэша,
152 например, при использовании
153 <example>
154 proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=one:10m;
155 </example>
156 имена файлов в кэше будут такого вида:
157 <example>
158 /data/nginx/cache/<emphasis>c/29</emphasis>/b7f54b2df7773722d382f4809d650<emphasis>29c</emphasis>
159 </example>
160 </para>
161
162 <para>
163 Кэшируемый ответ записывается во временный файл, а потом этот файл
164 переименовывается. Начиная с версии 0.8.9, временные файлы и кэш
165 могут располагаться на разных файловых системах, но нужно учитывать,
166 что в этом случае вместо дешёвой операции переименовывания в пределах
167 одной файловой системы файл копируется с одной файловой системы на другую.
168 Поэтому лучше, если кэш будет находиться на той же файловой
169 системе, что и каталог с временными файлами, задаваемый директивой
170 <link id="proxy_temp_path"/> для данного location.
171 </para>
172
173 <para>
174 Кроме того, все активные ключи и информация о данных хранятся в разделяемой
175 памяти — зоне, имя и размер которой задаётся параметром keys_zone.
176 Если к данным кэша не обращются в течение времени, заданного параметром
177 inactive, то данные удаляются, независимо от их свежести.
178 По умолчанию inactive равен 10 минутам.
179 </para>
180
181 <para>
182 Специальный процесс "cache manager" следит за максимальным размером кэша,
183 заданным параметром max_size, и при превышении его размеров удаляет
184 самые невостребованные данные.
185 </para>
186
187 </directive>
188
189
190 <directive name="proxy_cache_min_uses">
191 <syntax>proxy_cache_min_uses <value>число</value></syntax>
192 <default>proxy_cache_min_uses 1</default>
193 <context>http, server, location</context>
194
195 <para>
196 Директива задаёт число запросов, после которого ответ будет
197 закэширован.
198 </para>
199
200 </directive>
201
202
203 <directive name="proxy_cache_valid">
204 <syntax>proxy_cache_valid <value>ответ [ответ ...] время</value>
205 </syntax>
206 <default>нет</default>
207 <context>http, server, location</context>
208
209 <para>
210 Директива задаёт время кэширования для разных ответов.
211 Например, директивы
212 <example>
213 proxy_cache_valid 200 302 10m;
214 proxy_cache_valid 404 1m;
215 </example>
216 задают время кэширования 10 минут для ответов 200 и 302,
217 и 1 минуту для ответов 404.
218 </para>
219
220 <para>
221 Если указано только время кэширования,
222 <example>
223 proxy_cache_valid 5m;
224 </example>
225 то кэшируются только ответы 200, 301 и 302.
226 </para>
227
228 <para>
229 Кроме того, может кэшировать любые ответы с помощью параметра "any":
230 <example>
231 proxy_cache_valid 200 302 10m;
232 proxy_cache_valid 301 1h;
233 proxy_cache_valid any 1m;
234 </example>
235 </para>
236
237 </directive>
238
239
240 <directive name="proxy_cache_use_stale">
241 <syntax>proxy_cache_use_stale <value>[error | timeout | invalid_header
242 | updating | http_500 | http_502 | http_503 | http_504 | http_404 | off]
243 [...]</value></syntax>
244 <default>proxy_cache_use_stale off</default>
245 <context>http, server, location</context>
246
247 <para>
248 Директива определяет, в каких случаях можно использовать
249 устаревший закэшированный ответ, если при работе с проксированным
250 сервером возникла ошибка. Параметры директивы совпадают с параметрами
251 директивы <link id="proxy_next_upstream"/>.
252 И, кроме того, есть параметр updating, которой разрешает использовать
253 устаревший закэшированный ответ, если на данный момент он уже обновляется.
254 </para>
255
256 </directive>
257
258
259 <directive name="proxy_connect_timeout">
260 <syntax>proxy_connect_timeout <value>время</value></syntax>
261 <default>proxy_connect_timeout 60</default>
262 <context>http, server, location</context>
263
264 <para>
265 Директива задаёт таймаут для соединения с проксированным сервером.
266 Необходимо иметь в виду, что этот таймаут не может быть больше 75 секунд.
267 </para>
268
269 </directive>
270
271
272 <directive name="proxy_hide_header">
273 <syntax>proxy_hide_header <value>имя</value></syntax>
274 <context>http, server, location</context>
275
276 <para>
277 nginx не передаёт клиенту строки заголовка "Date", "Server", "X-Pad" и
278 "X-Accel-..." из ответа проксированного сервера.
279 Директива proxy_hide_header задаёт дополнительные строки.
280 Если же строки нужно наоброт разрешить, то нужно воспользоваться
281 директивой <link id="proxy_pass_header"/>.
282 </para>
283
284 </directive>
285
286
287 <directive name="proxy_ignore_client_abort">
288 <syntax>proxy_ignore_client_abort <value>[on|off]</value></syntax>
289 <default>proxy_ignore_client_abort off</default>
290 <context>http, server, location</context>
291
292 <para>
293 Директива определяет, закрывать ли соединение с проксированным сервером
294 в случае, если клиент закрыл соединение, не дождавшись ответа.
295 </para>
296
297 </directive>
298
299
300 <directive name="proxy_ignore_headers">
301 <syntax>proxy_ignore_headers <value>имя [имя ...]</value></syntax>
302 <context>http, server, location</context>
303
304 <para>
305 Директива proxy_ignore_headers запрещает обработку некоторых
306 строк заголовка из ответа проксированного сервера.
307 В директиве можно указать строки "X-Accel-Redirect", "X-Accel-Expires",
308 "Expires" и "Cache-Control".
309 </para>
310
311 </directive>
312
313
314 <directive name="proxy_intercept_errors">
315 <syntax>proxy_intercept_errors <value>[on|off]</value></syntax>
316 <default>proxy_intercept_errors off</default>
317 <context>http, server, location</context>
318
319 <para>
320 Директива определяет, передавать ли клиенту проксированные ответы с кодом
321 больше или равные 400 или же перенаправлять их на обработку nginx'у с помощью
322 директивы error_page.
323 </para>
324
325 </directive>
326
327
328 <directive name="proxy_next_upstream">
329 <syntax>proxy_next_upstream <value>[error | timeout | invalid_header
330 | http_500 | http_502 | http_503 | http_504 | http_404 | off]
331 [...]</value></syntax>
332 <default>proxy_next_upstream error timeout</default>
333 <context>http, server, location</context>
334
335 <para>
336 Директива определяет, в каких случаях запрос будет передан следующему серверу:
337 <list type="bullet">
338
339 <listitem>
340 error — произшла ошибка соединения с сервером, передачи ему запроса или
341 чтения заголовка ответа сервера;
342 </listitem>
343
344 <listitem>
345 timeout — произошёл таймаут во время соединения с сервером,
346 передачи ему запроса или чтения заголовка ответа сервера;
347 </listitem>
348
349 <listitem>
350 invalid_header — сервер вернул пустой или неверный ответ;
351 </listitem>
352
353 <listitem>
354 http_500 — сервер вернул ответ с кодом 500;
355 </listitem>
356
357 <listitem>
358 http_502 — сервер вернул ответ с кодом 502;
359 </listitem>
360
361 <listitem>
362 http_503 — сервер вернул ответ с кодом 503;
363 </listitem>
364
365 <listitem>
366 http_504 — сервер вернул ответ с кодом 504;
367 </listitem>
368
369 <listitem>
370 http_404 — сервер вернул ответ с кодом 404;
371 </listitem>
372
373 <listitem>
374 off — запрещает передачу запроса следующему серверу;
375 </listitem>
376
377 </list>
378 </para>
379
380 <para>
381 Необходимо понимать, что передача запроса следующему серверу возможна
382 только при условии, что клиенту ещё ничего не передавалось.
383 То есть, если ошибка или таймаут возникли в середине передачи ответа,
384 то исправить это уже невозможно.
385 </para>
386
387 </directive>
388
389
390 <directive name="proxy_no_cache">
391 <syntax>proxy_no_cache <value>строка [...]</value></syntax>
392 <default>нет</default>
393 <context>http, server, location</context>
394
395 <para>
396 Директива задаёт условия, при которых ответ не будет сохраняться в кэш.
397 Если значение хотя бы одной из строк переменных не пустое и не равно "0",
398 то ответ не будет сохранён:
399 <example>
400 proxy_no_cache $cookie_nocache $arg_nocache$arg_comment;
401 proxy_no_cache $http_pragma $http_authorization;
402 </example>
403 Можно использовать совместно с директивой <link id="proxy_cache_bypass"/>.
404 </para>
405
406 </directive>
407
408
409 <directive name="proxy_pass">
410 <syntax>proxy_pass <value>URL</value></syntax>
411 <default>нет</default>
412 <context>location, if в location, limit_except</context>
413
414 <para>
415 Директива задаёт адрес проксируемоего сервера и URI, на который
416 будет отображаться location.
417 Адрес может быть указан в виде доменного имени или адреса и порта, например,
418 <example>
419 proxy_pass http://localhost:8000/uri/;
420 </example>
421 или в виде пути unix сокета:
422 <example>
423 proxy_pass http://unix:/tmp/backend.socket:/uri/;
424 </example>
425 путь указан после слова unix и заключён между двумя двоеточиями.
426 </para>
427
428 <para>
429 Если доменное имя резолвится в несколько адресов, то все они будут
430 использоваться в режиме round-robin.
431 И кроме того, адрес можно задать
432 <link doc="ngx_http_upstream.xml">группой серверов</link>.
433 </para>
434
435 <para>
436 При передаче запроса серверу часть URI, соответствующая location,
437 заменяется на URI, указанный в директиве proxy_pass.
438 Но из этого правила есть два исключения, в которых нельзя определить
439 заменяемый location:
440 <list type="bullet">
441
442 <listitem>
443 если location задан регулярным выражением;
444 </listitem>
445
446 <listitem>
447 если внутри проксируемого location с помощью директивы rewrite изменяется
448 URI и именно с этой конфигурацией будет обрабатываться запрос (break):
449 <example>
450 location /name/ {
451 rewrite /name/([^/]+) /users?name=$1 break;
452 proxy_pass http://127.0.0.1;
453 }
454 </example>
455 Для этих случаев URI передаётся без отображения.
456 </listitem>
457
458 </list>
459 </para>
460
461 <para>
462 Кроме того, можно указать, чтобы URI запроса передавалось в том же виде,
463 как его прислал клиент, а не в в обработанном виде.
464 Во время обработки
465 <list type="bullet">
466
467 <listitem>
468 два и более слэшей преобразуются в один слэш: "//" — "/";
469 </listitem>
470
471 <listitem>
472 убираются ссылки на текущий каталог: "/./" — "/";
473 </listitem>
474
475 <listitem>
476 убираются ссылки на предыдущий каталог: "/dir/../" — "/".
477 </listitem>
478
479 </list>
480 </para>
481
482 <para>
483 Если на сервер нужно передать URI в необработанном виде, то для этого
484 в директиве proxy_pass нужно указать URL сервера без URI:
485 <example>
486 location /some/path/ {
487 proxy_pass http://127.0.0.1;
488 }
489 </example>
490 </para>
491
492 <para>
493 Имя сервера, его порт и передаваемый URI можно также полностью задать
494 в помощью переменных:
495 <example>
496 proxy_pass http://$host$uri;
497 </example>
498 или так:
499 <example>
500 proxy_pass $request;
501 </example>
502 </para>
503
504 <para>
505 В этом случае имя сервера ищется среди описанных
506 <link doc="ngx_http_upstream.xml">групп серверов</link>
507 и если не найдено, то определяется с помощью <link doc="ngx_http_core_module.xml#resolver">resolver'а</link>.
508 </para>
509
510 </directive>
511
512
513 <directive name="proxy_pass_header">
514 <syntax>proxy_pass_header <value>имя</value></syntax>
515 <context>http, server, location</context>
516
517 <para>
518 Директива разрешает передавать от проксируемого сервера клиенту
519 запрещённые для передачи строки.
520 </para>
521
522 </directive>
523
524
525 <directive name="proxy_redirect">
526 <syntax>proxy_redirect <value>[default|off|редирект замена]</value>
527 </syntax>
528 <default>proxy_redirect default</default>
529 <context>http, server, location</context>
530
531 <para>
532 Директива задаёт текст, который нужно изменить в строках заголовка "Location"
533 и "Refresh" в ответе проксируемого сервера. Предположим, проксируемый сервер
534 вернул строку "Location: http://localhost:8000/two/some/uri/". Директива
535 <example>
536 proxy_redirect http://localhost:8000/two/ http://frontend/one/;
537 </example>
538 перепишет эту строку в виде "Location: http://frontend/one/some/uri/".
539 </para>
540
541 <para>
542 В заменяемой строке можно не указывать имя сервера:
543 <example>
544 proxy_redirect http://localhost:8000/two/ /;
545 </example>
546 тогда будет поставлено основное имя сервера и порт, если он отличен от 80.
547 </para>
548
549 <para>
550 Изменение по умолчанию, задаваемое параметром "default", использует
551 параметры директив location и proxy_pass.
552 Поэтому две нижеприведённые конфигурации одинаковы:
553 <example>
554 location /one/ {
555 proxy_pass http://upstream:port/two/;
556 proxy_redirect default;
557 </example>
558
559 <example>
560 location /one/ {
561 proxy_pass http://upstream:port/two/;
562 proxy_redirect http://upstream:port/two/ /one/;
563 </example>
564 </para>
565
566 <para>
567 В заменяемой строке можно использовать переменные:
568 <example>
569 proxy_redirect http://localhost:8000/ http://$host:$server_port/;
570 </example>
571 </para>
572
573 <para>
574 Директив может быть несколько:
575 <example>
576 proxy_redirect default;
577 proxy_redirect http://localhost:8000/ /;
578 proxy_redirect http://www.example.com/ /;
579 </example>
580 </para>
581
582 <para>
583 Параметр "off" запрещает все директивы proxy_redirect на данном уровне:
584 <example>
585 proxy_redirect off;
586 proxy_redirect default;
587 proxy_redirect http://localhost:8000/ /;
588 proxy_redirect http://www.example.com/ /;
589 </example>
590 </para>
591
592 <para>
593 С помощью этой директивы можно также добавлять имя хоста к относительным
594 редиректам, выдаваемым проксируемым сервером:
595 <example>
596 proxy_redirect / /;
597 </example>
598 </para>
599
600 </directive>
601
602
603 <directive name="proxy_read_timeout">
604 <syntax>proxy_read_timeout <value>время</value></syntax>
605 <default>proxy_read_timeout 60</default>
606 <context>http, server, location</context>
607
608 <para>
609 Директива задаёт таймаут при чтении ответа проксированного сервера.
610 Таймаут устанавливается не на всю передачу ответа,
611 а только между двумя операциями чтения.
612 Если по истечении этого времени проксируемый сервер ничего не передаст,
613 то nginx закрывает соединение.
614 </para>
615
616 </directive>
617
618
619 <directive name="proxy_redirect_errors">
620 <syntax>proxy_redirect_errors <value>[on|off]</value></syntax>
621
622 <para>
623 Директива переименована в <link id="proxy_intercept_errors"/>.
624 </para>
625
626 </directive>
627
628
629 <directive name="proxy_send_timeout">
630 <syntax>proxy_send_timeout <value>время</value></syntax>
631 <default>proxy_send_timeout 60</default>
632 <context>http, server, location</context>
633
634 <para>
635 Директива задаёт таймаут при передаче запроса проксированному серверу.
636 Таймаут устанавливается не на всю передачу запроса,
637 а только между двумя операциями записи.
638 Если по истечении этого времени проксируемый сервер не примет новых данных,
639 то nginx закрывает соединение.
640 </para>
641
642 </directive>
643
644
645 <directive name="proxy_set_header">
646 <syntax>proxy_set_header <value>заголовок значение</value></syntax>
647 <default>Host и Connection</default>
648 <context>http, server, location</context>
649
650 <para>
651 Директива позволяет переопределять или добавлять строки заголовка запроса,
652 передаваемые проксируемому серверу.
653 В качестве значения можно использовать текст, переменные и их комбинации.
654 Директивы наследуются с предыдущего уровня при условии, что на данном
655 уровне не описаны свои директивы proxy_set_header.
656 По умолчанию переопределяются только две строки:
657 <example>
658 proxy_set_header Host $proxy_host;
659 proxy_set_header Connection close;
660 </example>
661 </para>
662
663 <para>
664 Неизменённую строку заголовка запроса "Host" можно передать так:
665 <example>
666 proxy_set_header Host $http_host;
667 </example>
668 </para>
669
670 <para>
671 Однако, если эта строка отсутствует в запросе клиента, то ничего
672 передаваться не будет. В этом случае лучше воспользоваться переменной
673 $host, её значение равно имени сервера в строке заголовка запроса "Host"
674 или же основному имени сервера, если строки нет:
675 <example>
676 proxy_set_header Host $host;
677 </example>
678 </para>
679
680 <para>
681 Кроме того, можно передать имя сервера вместе с портом проксируемого сервера:
682 <example>
683 proxy_set_header Host $host:$proxy_port;
684 </example>
685 </para>
686
687 <para>
688 Если значение строки заголовка — пустая строка, то строка вообще
689 не будет передаваться проксируемому серверу:
690 <example>
691 proxy_set_header Accept-Encoding "";
692 </example>
693 </para>
694
695 </directive>
696
697
698 <directive name="proxy_ssl_session_reuse">
699 <syntax>proxy_ssl_session_reuse <value>[on|off]</value></syntax>
700 <default>proxy_ssl_session_reuse on</default>
701 <context>http, server, location</context>
702
703 <para>
704 Директива определяет, использовать ли повторно SSL-сессии при
705 работе с проксированным сервером. Если в логах появляются ошибки
706 "SSL3_GET_FINISHED:digest check failed", то можно попробовать выключить
707 повторное использование сессий.
708 </para>
709
710 </directive>
711
712
713 <directive name="proxy_store">
714 <syntax>proxy_store <value>on | off | строка </value></syntax>
715 <default>proxy_store off</default>
716 <context>http, server, location</context>
717
718 <para>
719 Директива разрешает сохранение на диск файлов.
720 Параметр "on" сохраняет файлы в соответствии с путями, указаными в директивах
721 <link doc="ngx_http_core_module.xml#alias">alias</link> или
722 <link doc="ngx_http_core_module.xml#root">root</link>.
723 Параметр "off" запрещает сохранение файлов.
724 Кроме того, имя файла можно явно задать с помощью строки с переменными:
725 <example>
726 proxy_store /data/www$original_uri;
727 </example>
728 </para>
729
730 <para>
731 Время модификации файлов выставляется согласно полученной строке
732 "Last-Modified" в заголовке ответа.
733 Ответ записывается во временный файл, а потом этот файл переименовывается.
734 Начиная с версии 0.8.9, временный файл и постоянное место хранения ответа
735 могут располагаться на разных файловых системах, но нужно учитывать,
736 что в этом случае вместо дешёвой операции переименовывания в пределах
737 одной файловой системы файл копируется с одной файловой системы на другую.
738 Поэтому лучше, если сохраняемые файлы будут находиться на той же файловой
739 системе, что и каталог с временными файлами, задаваемый директивой
740 <link id="proxy_temp_path"/> для данного location.
741 </para>
742
743 <para>
744 Директиву можно использовать для создания локальных копий статических
745 неизменяемых файлов, например, так:
746 <example>
747 location /images/ {
748 root /data/www;
749 open_file_cache_errors off;
750 error_page 404 = /fetch$uri;
751 }
752
753 location /fetch/ {
754 internal;
755
756 proxy_pass http://backend/;
757 proxy_store on;
758 proxy_store_access user:rw group:rw all:r;
759 proxy_temp_path /data/temp;
760
761 alias /data/www/;
762 }
763 </example>
764 </para>
765
766 <para>
767 или так:
768 <example>
769 location /images/ {
770 root /data/www;
771 error_page 404 = @fetch;
772 }
773
774 location @fetch {
775 internal;
776
777 proxy_pass http://backend;
778 proxy_store on;
779 proxy_store_access user:rw group:rw all:r;
780 proxy_temp_path /data/temp;
781
782 root /data/www;
783 }
784 </example>
785 </para>
786
787 </directive>
788
789
790 <directive name="proxy_store_access">
791 <syntax>proxy_store_access <value>пользователи:права [пользователи:права]
792 ...</value></syntax>
793 <default>proxy_store_access user:rw</default>
794 <context>http, server, location</context>
795
796 <para>
797 Директива задаёт права доступа для создаваемых файлов и каталогов, например,
798 <example>
799 proxy_store_access user:rw group:rw all:r;
800 </example>
801 </para>
802
803 <para>
804 Если заданы какие-либо права для groups или all, то права для user
805 указывать необязательно:
806 <example>
807 proxy_store_access group:rw all:r;
808 </example>
809 </para>
810
811 </directive>
812
813
814 <directive name="proxy_temp_path">
815 <syntax>proxy_temp_path <value>путь [ уровень1 [ уровень2 [ уровень3 ] ] ]
816 </value></syntax>
817 <default>proxy_temp_path proxy_temp</default>
818 <context>http, server, location</context>
819
820 <para>
821 Директива задаёт имя каталога для хранения временных файлов
822 полученных от другого сервера.
823 В каталоге может использоваться иерархия подкаталогов до трёх уровней.
824 Например, при такой конфигурации
825 <example>
826 proxy_temp_path /spool/nginx/proxy_temp 1 2;
827 </example>
828 имя временного будет такого вида:
829 <example>
830 /spool/nginx/proxy_temp/7/45/00000123457
831 </example>
832 </para>
833
834 </directive>
835
836 </section>
837
838
839 <section name="Встроенные переменные" id="variables">
840
841 <para>
842 В модуле ngx_http_proxy_module есть встроенные переменные,
843 которые можно использовать для формирования заголовков с помощью директивы
844 <link id="proxy_set_header"/>:
845 <list type="bullet">
846
847 <listitem>
848 $proxy_host, эта переменная равна имени проксируемого хоста и порта;
849 </listitem>
850
851 <listitem>
852 $proxy_port, эта переменная равна порту проксируемого хоста;
853 </listitem>
854
855 <listitem>
856 $proxy_add_x_forwarded_for, эта переменная равна строке заголовка запроса
857 клиента "X-Forwarded-For" и добавленной к ней через запятую переменной
858 $remote_addr. Если же строки "X-Forwarded-For" в запросе клиента нет,
859 то переменная $proxy_add_x_forwarded_for равна переменной $remote_addr.
860 </listitem>
861
862 </list>
863 </para>
864
865 </section>
866
867 </module>