Mercurial > hg > nginx-site
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> |