Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
nginx
GitHub Repository: nginx/nginx.org
Path: blob/main/xml/ru/docs/http/ngx_http_proxy_module.xml
1 views
1
<?xml version="1.0"?>
2
3
<!--
4
Copyright (C) Igor Sysoev
5
Copyright (C) Nginx, Inc.
6
-->
7
8
<!DOCTYPE module SYSTEM "../../../../dtd/module.dtd">
9
10
<module name="Модуль ngx_http_proxy_module"
11
link="/ru/docs/http/ngx_http_proxy_module.html"
12
lang="ru"
13
rev="88">
14
15
<section id="summary">
16
17
<para>
18
Модуль <literal>ngx_http_proxy_module</literal> позволяет передавать
19
запросы другому серверу.
20
</para>
21
22
</section>
23
24
25
<section id="example" name="Пример конфигурации">
26
27
<para>
28
<example>
29
location / {
30
proxy_pass http://localhost:8000;
31
proxy_set_header Host $host;
32
proxy_set_header X-Real-IP $remote_addr;
33
}
34
</example>
35
</para>
36
37
</section>
38
39
40
<section id="directives" name="Директивы">
41
42
<directive name="proxy_allow_upstream">
43
<syntax><value>строка</value> ...</syntax>
44
<default/>
45
<context>http</context>
46
<context>server</context>
47
<context>location</context>
48
<appeared-in>1.29.3</appeared-in>
49
50
<para>
51
Задаёт условия, при которых доступ к проксируемому серверу
52
будет разрешён или <link id="denied">запрещён</link>.
53
Если все значения строковых параметров непустые
54
и не равны “0”, то доступ разрешён.
55
Условия проверяются каждый раз
56
перед установлением соединения с проксируемым сервером.
57
В значении параметров допустимо использование переменных:
58
<example>
59
geo $upstream_last_addr $allow {
60
volatile;
61
10.10.0.0/24 1;
62
}
63
64
server {
65
listen 127.0.0.1:8080;
66
67
location / {
68
proxy_pass localhost:8000;
69
proxy_allow_upstream $allow;
70
...
71
}
72
}
73
</example>
74
</para>
75
76
<para>
77
<note>
78
Директива доступна как часть
79
<commercial_version>коммерческой подписки</commercial_version>.
80
</note>
81
</para>
82
83
</directive>
84
85
86
<directive name="proxy_bind">
87
<syntax>
88
<value>адрес</value>
89
[<literal>transparent</literal>] |
90
<literal>off</literal></syntax>
91
<default/>
92
<context>http</context>
93
<context>server</context>
94
<context>location</context>
95
<appeared-in>0.8.22</appeared-in>
96
97
<para>
98
Задаёт локальный IP-адрес с необязательным портом (1.11.2),
99
который будет использоваться в исходящих соединениях с проксируемым сервером.
100
В значении параметра допустимо использование переменных (1.3.12).
101
Специальное значение <literal>off</literal> (1.3.12) отменяет действие
102
унаследованной с предыдущего уровня конфигурации
103
директивы <literal>proxy_bind</literal>, позволяя системе
104
самостоятельно выбирать локальный IP-адрес и порт.
105
</para>
106
107
<para id="proxy_bind_transparent">
108
Параметр <literal>transparent</literal> (1.11.0) позволяет
109
задать нелокальный IP-aдрес, который будет использоваться в
110
исходящих соединениях с проксируемым сервером,
111
например, реальный IP-адрес клиента:
112
<example>
113
proxy_bind $remote_addr transparent;
114
</example>
115
Для работы параметра
116
обычно требуется
117
запустить рабочие процессы nginx с привилегиями
118
<link doc="../ngx_core_module.xml" id="user">суперпользователя</link>.
119
В Linux этого не требуется (1.13.8), так как если
120
указан параметр <literal>transparent</literal>, то рабочие процессы
121
наследуют capability <literal>CAP_NET_RAW</literal> из главного процесса.
122
Также необходимо настроить таблицу маршрутизации ядра
123
для перехвата сетевого трафика с проксируемого сервера.
124
</para>
125
126
</directive>
127
128
129
<directive name="proxy_bind_dynamic">
130
<syntax><literal>on</literal> | <literal>off</literal></syntax>
131
<default>off</default>
132
<context>http</context>
133
<context>server</context>
134
<context>location</context>
135
<appeared-in>1.29.3</appeared-in>
136
137
<para>
138
Если включено, операция <link id="proxy_bind">bind</link> осуществляется
139
при каждой попытке соединения.
140
</para>
141
142
<para>
143
<note>
144
Директива доступна как часть
145
<commercial_version>коммерческой подписки</commercial_version>.
146
</note>
147
</para>
148
149
</directive>
150
151
152
<directive name="proxy_buffer_size">
153
<syntax><value>размер</value></syntax>
154
<default>4k|8k</default>
155
<context>http</context>
156
<context>server</context>
157
<context>location</context>
158
159
<para>
160
Задаёт <value>размер</value> буфера, в который будет читаться
161
первая часть ответа, получаемого от проксируемого сервера.
162
В этой части ответа находится, как правило, небольшой заголовок ответа;
163
если его размер больше заданного, то такой ответ считается
164
<link id="invalid_header">неверным</link>.
165
По умолчанию размер одного буфера равен размеру страницы памяти.
166
В зависимости от платформы это или 4K, или 8K,
167
однако его можно сделать меньше.
168
</para>
169
170
</directive>
171
172
173
<directive name="proxy_buffering">
174
<syntax><literal>on</literal> | <literal>off</literal></syntax>
175
<default>on</default>
176
<context>http</context>
177
<context>server</context>
178
<context>location</context>
179
180
<para>
181
Разрешает или запрещает использовать буферизацию ответов проксируемого сервера.
182
</para>
183
184
<para>
185
Если буферизация включена, то nginx принимает ответ проксируемого сервера
186
как можно быстрее, сохраняя его в буферы, заданные директивами
187
<link id="proxy_buffer_size"/> и <link id="proxy_buffers"/>.
188
Если ответ не вмещается целиком в память, то его часть может быть записана
189
на диск во <link id="proxy_temp_path">временный файл</link>.
190
Запись во временные файлы контролируется директивами
191
<link id="proxy_max_temp_file_size"/> и
192
<link id="proxy_temp_file_write_size"/>.
193
</para>
194
195
<para>
196
Если буферизация выключена, то ответ синхронно передаётся клиенту сразу же
197
по мере его поступления.
198
nginx не пытается считать весь ответ проксируемого сервера.
199
Максимальный размер данных, который nginx может принять от сервера
200
за один раз, задаётся директивой <link id="proxy_buffer_size"/>.
201
</para>
202
203
<para>
204
Буферизация может быть также включена или выключена путём передачи
205
значения “<literal>yes</literal>” или “<literal>no</literal>” в поле
206
<header>X-Accel-Buffering</header> заголовка ответа.
207
Эту возможность можно запретить с помощью директивы
208
<link id="proxy_ignore_headers"/>.
209
</para>
210
211
</directive>
212
213
214
<directive name="proxy_buffers">
215
<syntax><value>число</value> <value>размер</value></syntax>
216
<default>8 4k|8k</default>
217
<context>http</context>
218
<context>server</context>
219
<context>location</context>
220
221
<para>
222
Задаёт <value>число</value> и <value>размер</value> буферов
223
для одного соединения,
224
в которые будет читаться ответ, получаемый от проксируемого сервера.
225
По умолчанию размер одного буфера равен размеру страницы.
226
В зависимости от платформы это или 4K, или 8K.
227
</para>
228
229
</directive>
230
231
232
<directive name="proxy_busy_buffers_size">
233
<syntax><value>размер</value></syntax>
234
<default>8k|16k</default>
235
<context>http</context>
236
<context>server</context>
237
<context>location</context>
238
239
<para>
240
При включённой <link id="proxy_buffering">буферизации</link> ответов
241
проксируемого сервера, ограничивает суммарный <value>размер</value>
242
буферов, которые могут быть заняты для отправки ответа клиенту, пока
243
ответ ещё не прочитан целиком.
244
Оставшиеся буферы тем временем могут использоваться для чтения ответа
245
и, при необходимости, буферизации части ответа во временный файл.
246
По умолчанию <value>размер</value> ограничен величиной двух буферов, заданных
247
директивами <link id="proxy_buffer_size"/> и <link id="proxy_buffers"/>.
248
</para>
249
250
</directive>
251
252
253
<directive name="proxy_cache">
254
<syntax><value>зона</value> | <literal>off</literal></syntax>
255
<default>off</default>
256
<context>http</context>
257
<context>server</context>
258
<context>location</context>
259
260
<para>
261
Задаёт зону разделяемой памяти, используемой для кэширования.
262
Одна и та же зона может использоваться в нескольких местах.
263
В значении параметра можно использовать переменные (1.7.9).
264
Параметр <literal>off</literal> запрещает кэширование, унаследованное
265
с предыдущего уровня конфигурации.
266
</para>
267
268
</directive>
269
270
271
<directive name="proxy_cache_background_update">
272
<syntax><literal>on</literal> | <literal>off</literal></syntax>
273
<default>off</default>
274
<context>http</context>
275
<context>server</context>
276
<context>location</context>
277
<appeared-in>1.11.10</appeared-in>
278
279
<para>
280
Позволяет запустить фоновый подзапрос
281
для обновления просроченного элемента кэша,
282
в то время как клиенту возвращается устаревший закэшированный ответ.
283
Использование устаревшего закэшированного ответа в момент его обновления
284
должно быть
285
<link id="proxy_cache_use_stale_updating">разрешено</link>.
286
</para>
287
288
</directive>
289
290
291
<directive name="proxy_cache_bypass">
292
<syntax><value>строка</value> ...</syntax>
293
<default/>
294
<context>http</context>
295
<context>server</context>
296
<context>location</context>
297
298
<para>
299
Задаёт условия, при которых ответ не будет браться из кэша.
300
Если значение хотя бы одного из строковых параметров непустое и не равно “0”,
301
то ответ не берётся из кэша:
302
<example>
303
proxy_cache_bypass $cookie_nocache $arg_nocache$arg_comment;
304
proxy_cache_bypass $http_pragma $http_authorization;
305
</example>
306
Можно использовать совместно с директивой <link id="proxy_no_cache"/>.
307
</para>
308
309
</directive>
310
311
312
<directive name="proxy_cache_convert_head">
313
<syntax><literal>on</literal> | <literal>off</literal></syntax>
314
<default>on</default>
315
<context>http</context>
316
<context>server</context>
317
<context>location</context>
318
<appeared-in>1.9.7</appeared-in>
319
320
<para>
321
Разрешает или запрещает преобразование метода “<literal>HEAD</literal>
322
в “<literal>GET</literal>” для кэширования.
323
Если преобразование выключено, то
324
необходимо, чтобы <link id="proxy_cache_key">ключ кэширования</link>
325
включал в себя <var>$request_method</var>.
326
</para>
327
328
</directive>
329
330
331
<directive name="proxy_cache_key">
332
<syntax><value>строка</value></syntax>
333
<default>$scheme$proxy_host$request_uri</default>
334
<context>http</context>
335
<context>server</context>
336
<context>location</context>
337
338
<para>
339
Задаёт ключ для кэширования, например,
340
<example>
341
proxy_cache_key "$host$request_uri $cookie_user";
342
</example>
343
По умолчанию значение директивы близко к строке
344
<example>
345
proxy_cache_key $scheme$proxy_host$uri$is_args$args;
346
</example>
347
</para>
348
349
</directive>
350
351
352
<directive name="proxy_cache_lock">
353
<syntax><literal>on</literal> | <literal>off</literal></syntax>
354
<default>off</default>
355
<context>http</context>
356
<context>server</context>
357
<context>location</context>
358
<appeared-in>1.1.12</appeared-in>
359
360
<para>
361
Если включено, одновременно только одному запросу будет позволено
362
заполнить новый элемент кэша, идентифицируемый согласно директиве
363
<link id="proxy_cache_key"/>, передав запрос на проксируемый сервер.
364
Остальные запросы этого же элемента будут либо ожидать
365
появления ответа в кэше, либо освобождения блокировки
366
этого элемента, в течение времени, заданного директивой
367
<link id="proxy_cache_lock_timeout"/>.
368
</para>
369
370
</directive>
371
372
373
<directive name="proxy_cache_lock_age">
374
<syntax><value>время</value></syntax>
375
<default>5s</default>
376
<context>http</context>
377
<context>server</context>
378
<context>location</context>
379
<appeared-in>1.7.8</appeared-in>
380
381
<para>
382
Если последний запрос, переданный на проксируемый сервер
383
для заполнения нового элемента кэша,
384
не завершился за указанное <value>время</value>,
385
на проксируемый сервер может быть передан ещё один запрос.
386
</para>
387
388
</directive>
389
390
391
<directive name="proxy_cache_lock_timeout">
392
<syntax><value>время</value></syntax>
393
<default>5s</default>
394
<context>http</context>
395
<context>server</context>
396
<context>location</context>
397
<appeared-in>1.1.12</appeared-in>
398
399
<para>
400
Задаёт таймаут для <link id="proxy_cache_lock"/>.
401
По истечении указанного <value>времени</value>
402
запрос будет передан на проксируемый сервер,
403
однако ответ не будет закэширован.
404
<note>
405
До версии 1.7.8 такой ответ мог быть закэширован.
406
</note>
407
</para>
408
409
</directive>
410
411
412
<directive name="proxy_cache_max_range_offset">
413
<syntax><value>число</value></syntax>
414
<default/>
415
<context>http</context>
416
<context>server</context>
417
<context>location</context>
418
<appeared-in>1.11.6</appeared-in>
419
420
<para>
421
Задаёт смещение в байтах для запросов с указанием диапазона запрашиваемых байт
422
(byte-range requests).
423
Если диапазон находится за указанным смещением,
424
range-запрос будет передан на проксируемый сервер
425
и ответ не будет закэширован.
426
</para>
427
428
</directive>
429
430
431
<directive name="proxy_cache_methods">
432
<syntax>
433
<literal>GET</literal> |
434
<literal>HEAD</literal> |
435
<literal>POST</literal>
436
...</syntax>
437
<default>GET HEAD</default>
438
<context>http</context>
439
<context>server</context>
440
<context>location</context>
441
<appeared-in>0.7.59</appeared-in>
442
443
<para>
444
Если метод запроса клиента указан в этой директиве,
445
то ответ будет закэширован.
446
Методы “<literal>GET</literal>” и “<literal>HEAD</literal>” всегда добавляются
447
в список, но тем не менее рекомендуется перечислять их явно.
448
См. также директиву <link id="proxy_no_cache"/>.
449
</para>
450
451
</directive>
452
453
454
<directive name="proxy_cache_min_uses">
455
<syntax><value>число</value></syntax>
456
<default>1</default>
457
<context>http</context>
458
<context>server</context>
459
<context>location</context>
460
461
<para>
462
Задаёт <value>число</value> запросов, после которого ответ будет закэширован.
463
</para>
464
465
</directive>
466
467
468
<directive name="proxy_cache_path">
469
<syntax>
470
<value>путь</value>
471
[<literal>levels</literal>=<value>уровни</value>]
472
[<literal>use_temp_path</literal>=<literal>on</literal>|<literal>off</literal>]
473
<literal>keys_zone</literal>=<value>имя</value>:<value>размер</value>
474
[<literal>inactive</literal>=<value>время</value>]
475
[<literal>max_size</literal>=<value>размер</value>]
476
[<literal>min_free</literal>=<value>размер</value>]
477
[<literal>manager_files</literal>=<value>число</value>]
478
[<literal>manager_sleep</literal>=<value>время</value>]
479
[<literal>manager_threshold</literal>=<value>время</value>]
480
[<literal>loader_files</literal>=<value>число</value>]
481
[<literal>loader_sleep</literal>=<value>время</value>]
482
[<literal>loader_threshold</literal>=<value>время</value>]
483
[<literal>purger</literal>=<literal>on</literal>|<literal>off</literal>]
484
[<literal>purger_files</literal>=<value>число</value>]
485
[<literal>purger_sleep</literal>=<value>время</value>]
486
[<literal>purger_threshold</literal>=<value>время</value>]</syntax>
487
<default/>
488
<context>http</context>
489
490
<para>
491
Задаёт путь и другие параметры кэша.
492
Данные кэша хранятся в файлах.
493
Именем файла в кэше является результат функции MD5
494
от <link id="proxy_cache_key">ключа кэширования</link>.
495
Параметр <literal>levels</literal> задаёт уровни иерархии кэша:
496
можно задать от 1 до 3 уровней, на каждом уровне допускаются значения 1 или 2.
497
Например, при использовании
498
<example>
499
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=one:10m;
500
</example>
501
имена файлов в кэше будут такого вида:
502
<example>
503
/data/nginx/cache/<emphasis>c</emphasis>/<emphasis>29</emphasis>/b7f54b2df7773722d382f4809d650<emphasis>29c</emphasis>
504
</example>
505
</para>
506
507
<para>
508
Кэшируемый ответ сначала записывается во временный файл, а потом этот файл
509
переименовывается.
510
Начиная с версии 0.8.9 временные файлы и кэш
511
могут располагаться на разных файловых системах.
512
Однако нужно учитывать,
513
что в этом случае вместо дешёвой операции переименовывания в пределах
514
одной файловой системы файл копируется с одной файловой системы на другую.
515
Поэтому лучше, если кэш будет находиться на той же файловой
516
системе, что и каталог с временными файлами.
517
Какой из каталогов будет использоваться для временных файлов
518
определяется параметром <literal>use_temp_path</literal> (1.7.10).
519
Если параметр не задан или установлен в значение “<literal>on</literal>”,
520
то будет использоваться каталог, задаваемый директивой
521
<link id="proxy_temp_path"/> для данного location.
522
Если параметр установлен в значение “<literal>off</literal>”,
523
то временные файлы будут располагаться непосредственно в каталоге кэша.
524
</para>
525
526
<para>
527
Кроме того, все активные ключи и информация о данных хранятся в зоне
528
разделяемой памяти, <value>имя</value> и <value>размер</value> которой
529
задаются параметром <literal>keys_zone</literal>.
530
Зоны размером в 1 мегабайт достаточно для хранения около 8 тысяч ключей.
531
<note>
532
Как часть
533
<commercial_version>коммерческой подписки</commercial_version>
534
в зоне разделяемой памяти также хранится расширенная
535
<link doc="ngx_http_api_module.xml" id="http_caches_">информация</link> о кэше,
536
поэтому для хранения аналогичного количества ключей необходимо указывать
537
больший размер зоны.
538
Например
539
зоны размером в 1 мегабайт достаточно для хранения около 4 тысяч ключей.
540
</note>
541
</para>
542
543
<para>
544
Если к данным кэша не обращаются в течение времени, заданного параметром
545
<literal>inactive</literal>, то данные удаляются, независимо от их свежести.
546
По умолчанию <literal>inactive</literal> равен 10 минутам.
547
</para>
548
549
<para id="proxy_cache_path_max_size">
550
Специальный процесс “cache manager” следит за максимальным размером кэша,
551
заданным параметром <literal>max_size</literal>,
552
а также за минимальным объёмом свободного места на файловой системе с кэшем,
553
заданным параметром <literal>min_free</literal> (1.19.1).
554
При превышении максимального размера кэша
555
или недостаточном объёме свободного места
556
процесс удаляет наименее востребованные данные.
557
Удаление данных происходит итерациями, настраиваемыми параметрами (1.11.5)
558
<literal>manager_files</literal>,
559
<literal>manager_threshold</literal> и
560
<literal>manager_sleep</literal>.
561
За одну итерацию загружается не более <literal>manager_files</literal>
562
элементов (по умолчанию 100).
563
Время работы одной итерации ограничено параметром
564
<literal>manager_threshold</literal> (по умолчанию 200 миллисекунд).
565
Между итерациями делается пауза на время, заданное параметром
566
<literal>manager_sleep</literal> (по умолчанию 50 миллисекунд).
567
</para>
568
569
<para>
570
Через минуту после старта активируется специальный процесс “cache loader”,
571
который загружает в зону кэша информацию о ранее закэшированных данных,
572
хранящихся на файловой системе.
573
Загрузка также происходит итерациями.
574
За одну итерацию загружается не более <literal>loader_files</literal>
575
элементов (по умолчанию 100).
576
Кроме того, время работы одной итерации ограничено параметром
577
<literal>loader_threshold</literal> (по умолчанию 200 миллисекунд).
578
Между итерациями делается пауза на время, заданное параметром
579
<literal>loader_sleep</literal> (по умолчанию 50 миллисекунд).
580
</para>
581
582
<para>
583
Кроме того,
584
следующие параметры доступны как часть
585
<commercial_version>коммерческой подписки</commercial_version>:
586
</para>
587
588
<para>
589
<list type="tag">
590
591
<tag-name id="purger">
592
<literal>purger</literal>=<literal>on</literal>|<literal>off</literal>
593
</tag-name>
594
<tag-desc>
595
Указывает, будут ли записи в кэше, соответствующие
596
<link id="proxy_cache_purge">маске</link>,
597
удалены с диска при помощи процесса “cache purger” (1.7.12).
598
Установка параметра в значение <literal>on</literal>
599
(по умолчанию <literal>off</literal>)
600
активирует процесс “cache purger”, который
601
проходит по всем записям в кэше
602
и удаляет записи, соответствующие этой маске.
603
</tag-desc>
604
605
<tag-name id="purger_files">
606
<literal>purger_files</literal>=<value>число</value>
607
</tag-name>
608
<tag-desc>
609
Задаёт число элементов, которые будут сканироваться за одну итерацию (1.7.12).
610
По умолчанию <literal>purger_files</literal> равен 10.
611
</tag-desc>
612
613
<tag-name id="purger_threshold">
614
<literal>purger_threshold</literal>=<value>время</value>
615
</tag-name>
616
<tag-desc>
617
Задаёт продолжительность одной итерации (1.7.12).
618
По умолчанию <literal>purger_threshold</literal> равен 50 миллисекундам.
619
</tag-desc>
620
621
<tag-name id="purger_sleep">
622
<literal>purger_sleep</literal>=<value>время</value>
623
</tag-name>
624
<tag-desc>
625
Задаёт паузу между итерациями (1.7.12).
626
По умолчанию <literal>purger_sleep</literal> равен 50 миллисекундам.
627
</tag-desc>
628
629
</list>
630
</para>
631
632
<para>
633
<note>
634
В версиях 1.7.3, 1.7.7 и 1.11.10 формат заголовка кэша был изменён.
635
При обновлении на более новую версию nginx
636
ранее закэшированные ответы будут считаться недействительными.
637
</note>
638
</para>
639
640
</directive>
641
642
643
<directive name="proxy_cache_purge">
644
<syntax>строка ...</syntax>
645
<default/>
646
<context>http</context>
647
<context>server</context>
648
<context>location</context>
649
<appeared-in>1.5.7</appeared-in>
650
651
<para>
652
Задаёт условия, при которых запрос будет считаться запросом
653
на очистку кэша.
654
Если значение хотя бы одного из строковых параметров непустое и не равно “0”,
655
то запись в кэше с соответствующим
656
<link id="proxy_cache_key">ключом кэширования</link> удаляется.
657
В результате успешной операции возвращается ответ с кодом
658
<http-status code="204" text="No Content"/>.
659
</para>
660
661
<para>
662
Если <link id="proxy_cache_key">ключ кэширования</link>
663
запроса на очистку заканчивается
664
звёздочкой (“<literal>*</literal>”), то все записи в кэше, соответствующие
665
этой маске, будут удалены из кэша.
666
Тем не менее, эти записи будут оставаться на диске или до момента удаления
667
из-за <link id="proxy_cache_path">отсутствия обращения к данным</link>,
668
или до обработки их процессом “<link id="purger">cache purger</link>” (1.7.12),
669
или до попытки клиента получить к ним доступ.
670
</para>
671
672
<para>
673
Пример конфигурации:
674
<example>
675
proxy_cache_path /data/nginx/cache keys_zone=cache_zone:10m;
676
677
map $request_method $purge_method {
678
PURGE 1;
679
default 0;
680
}
681
682
server {
683
...
684
location / {
685
proxy_pass http://backend;
686
proxy_cache cache_zone;
687
proxy_cache_key $uri;
688
proxy_cache_purge $purge_method;
689
}
690
}
691
</example>
692
<note>
693
Функциональность доступна как часть
694
<commercial_version>коммерческой подписки</commercial_version>.
695
</note>
696
</para>
697
698
</directive>
699
700
701
<directive name="proxy_cache_revalidate">
702
<syntax><literal>on</literal> | <literal>off</literal></syntax>
703
<default>off</default>
704
<context>http</context>
705
<context>server</context>
706
<context>location</context>
707
<appeared-in>1.5.7</appeared-in>
708
709
<para>
710
Разрешает ревалидацию просроченных элементов кэша при помощи
711
условных запросов с полями заголовка
712
<header>If-Modified-Since</header> и <header>If-None-Match</header>.
713
</para>
714
715
</directive>
716
717
718
<directive name="proxy_cache_use_stale">
719
<syntax>
720
<literal>error</literal> |
721
<literal>timeout</literal> |
722
<literal>invalid_header</literal> |
723
<literal>updating</literal> |
724
<literal>http_500</literal> |
725
<literal>http_502</literal> |
726
<literal>http_503</literal> |
727
<literal>http_504</literal> |
728
<literal>http_403</literal> |
729
<literal>http_404</literal> |
730
<literal>http_429</literal> |
731
<literal>off</literal>
732
...</syntax>
733
<default>off</default>
734
<context>http</context>
735
<context>server</context>
736
<context>location</context>
737
738
<para>
739
Определяет, в каких случаях можно использовать
740
устаревший закэшированный ответ.
741
Параметры директивы совпадают с параметрами
742
директивы <link id="proxy_next_upstream"/>.
743
</para>
744
745
<para>
746
Параметр <literal>error</literal> также позволяет использовать
747
устаревший закэшированный ответ при невозможности выбора
748
проксированного сервера для обработки запроса.
749
</para>
750
751
<para id="proxy_cache_use_stale_updating">
752
Кроме того, дополнительный параметр <literal>updating</literal>
753
разрешает использовать устаревший закэшированный ответ,
754
если на данный момент он уже обновляется.
755
Это позволяет минимизировать число обращений к проксированным серверам
756
при обновлении закэшированных данных.
757
</para>
758
759
<para>
760
Использование устаревшего закэшированного ответа
761
может также быть разрешено непосредственно в заголовке ответа
762
на определённое количество секунд после того, как ответ устарел (1.11.10).
763
Такой способ менее приоритетен, чем задание параметров директивы.
764
<list type="bullet" compact="no">
765
766
<listitem>
767
Расширение
768
<link url="https://datatracker.ietf.org/doc/html/rfc5861#section-3">stale-while-revalidate</link>
769
поля заголовка <header>Cache-Control</header> разрешает
770
использовать устаревший закэшированный ответ,
771
если на данный момент он уже обновляется.
772
</listitem>
773
774
<listitem>
775
Расширение
776
<link url="https://datatracker.ietf.org/doc/html/rfc5861#section-4">stale-if-error</link>
777
поля заголовка <header>Cache-Control</header> разрешает
778
использовать устаревший закэшированный ответ в случае ошибки.
779
</listitem>
780
781
</list>
782
</para>
783
784
<para>
785
Чтобы минимизировать число обращений к проксированным серверам при
786
заполнении нового элемента кэша, можно воспользоваться директивой
787
<link id="proxy_cache_lock"/>.
788
</para>
789
790
</directive>
791
792
793
<directive name="proxy_cache_valid">
794
<syntax>[<value>код</value> ...] <value>время</value></syntax>
795
<default/>
796
<context>http</context>
797
<context>server</context>
798
<context>location</context>
799
800
<para>
801
Задаёт время кэширования для разных кодов ответа.
802
Например, директивы
803
<example>
804
proxy_cache_valid 200 302 10m;
805
proxy_cache_valid 404 1m;
806
</example>
807
задают время кэширования 10 минут для ответов с кодами 200 и 302
808
и 1 минуту для ответов с кодом 404.
809
</para>
810
811
<para>
812
Если указано только <value>время</value> кэширования,
813
<example>
814
proxy_cache_valid 5m;
815
</example>
816
то кэшируются только ответы 200, 301 и 302.
817
</para>
818
819
<para>
820
Кроме того, можно кэшировать любые ответы с помощью параметра
821
<literal>any</literal>:
822
<example>
823
proxy_cache_valid 200 302 10m;
824
proxy_cache_valid 301 1h;
825
proxy_cache_valid any 1m;
826
</example>
827
</para>
828
829
<para>
830
Параметры кэширования могут также быть заданы непосредственно
831
в заголовке ответа.
832
Такой способ приоритетнее, чем задание времени кэширования с помощью директивы.
833
<list type="bullet" compact="no">
834
835
<listitem>
836
Поле заголовка <header>X-Accel-Expires</header> задаёт время кэширования
837
ответа в секундах.
838
Значение 0 запрещает кэшировать ответ.
839
Если значение начинается с префикса <literal>@</literal>, оно задаёт абсолютное
840
время в секундах с начала эпохи, до которого ответ может быть закэширован.
841
</listitem>
842
843
<listitem>
844
Если в заголовке нет поля <header>X-Accel-Expires</header>,
845
параметры кэширования определяются по полям заголовка
846
<header>Expires</header> или <header>Cache-Control</header>.
847
</listitem>
848
849
<listitem>
850
Ответ, в заголовке которого есть поле <header>Set-Cookie</header>,
851
не будет кэшироваться.
852
</listitem>
853
854
<listitem>
855
Ответ, в заголовке которого есть поле <header>Vary</header>
856
со специальным значением “<literal>*</literal>”,
857
не будет кэшироваться (1.7.7).
858
Ответ, в заголовке которого есть поле <header>Vary</header>
859
с другим значением, будет закэширован
860
с учётом соответствующих полей заголовка запроса (1.7.7).
861
</listitem>
862
863
</list>
864
Обработка одного или более из этих полей заголовка может быть отключена
865
при помощи директивы <link id="proxy_ignore_headers"/>.
866
</para>
867
868
</directive>
869
870
871
<directive name="proxy_connect_timeout">
872
<syntax><value>время</value></syntax>
873
<default>60s</default>
874
<context>http</context>
875
<context>server</context>
876
<context>location</context>
877
878
<para>
879
Задаёт таймаут для установления соединения с проксированным сервером.
880
Необходимо иметь в виду, что этот таймаут обычно не может превышать 75 секунд.
881
</para>
882
883
</directive>
884
885
886
<directive name="proxy_cookie_domain">
887
<syntax><literal>off</literal></syntax>
888
<syntax><value>домен</value> <value>замена</value></syntax>
889
<default>off</default>
890
<context>http</context>
891
<context>server</context>
892
<context>location</context>
893
<appeared-in>1.1.15</appeared-in>
894
895
<para>
896
Задаёт текст, который нужно изменить в атрибуте <literal>domain</literal>
897
полей <header>Set-Cookie</header> заголовка ответа проксируемого сервера.
898
Предположим, проксируемый сервер вернул поле заголовка
899
<header>Set-Cookie</header> с атрибутом
900
<literal>domain=localhost</literal>”.
901
Директива
902
<example>
903
proxy_cookie_domain localhost example.org;
904
</example>
905
перепишет данный атрибут в виде
906
<literal>domain=example.org</literal>”.
907
</para>
908
909
<para>
910
Точка в начале строк <value>домен</value> и <value>замена</value>,
911
а равно как и в атрибуте <literal>domain</literal> игнорируется.
912
Регистр значения не имеет.
913
</para>
914
915
<para>
916
В строках <value>домен</value> и <value>замена</value> можно использовать
917
переменные:
918
<example>
919
proxy_cookie_domain www.$host $host;
920
</example>
921
</para>
922
923
<para>
924
Директиву также можно задать при помощи регулярных выражений.
925
При этом <value>домен</value> должен начинаться с символа
926
<literal>~</literal>”.
927
Регулярное выражение может содержать именованные и позиционные выделения,
928
а <value>замена</value> ссылаться на них:
929
<example>
930
proxy_cookie_domain ~\.(?P&lt;sl_domain&gt;[-0-9a-z]+\.[a-z]+)$ $sl_domain;
931
</example>
932
</para>
933
934
<para>
935
На одном уровне может быть указано
936
несколько директив <literal>proxy_cookie_domain</literal>:
937
<example>
938
proxy_cookie_domain localhost example.org;
939
proxy_cookie_domain ~\.([a-z]+\.[a-z]+)$ $1;
940
</example>
941
Если к куке могут быть применены несколько директив,
942
будет выбрана первая из них.
943
</para>
944
945
<para>
946
Параметр <literal>off</literal> отменяет действие
947
унаследованных с предыдущего уровня конфигурации
948
директив <literal>proxy_cookie_domain</literal>.
949
</para>
950
951
</directive>
952
953
954
<directive name="proxy_cookie_flags">
955
<syntax>
956
<literal>off</literal> |
957
<value>кука</value>
958
[<value>флаг</value> ...]</syntax>
959
<default>off</default>
960
<context>http</context>
961
<context>server</context>
962
<context>location</context>
963
<appeared-in>1.19.3</appeared-in>
964
965
<para>
966
Задаёт один или несколько флагов для куки.
967
В качестве <value>куки</value>
968
можно использовать текст, переменные и их комбинации.
969
В качестве <value>флага</value>
970
можно использовать текст, переменные и их комбинации (1.19.8).
971
Параметры
972
<literal>secure</literal>,
973
<literal>httponly</literal>,
974
<literal>samesite=strict</literal>,
975
<literal>samesite=lax</literal>,
976
<literal>samesite=none</literal>
977
добавляют соответствующие флаги.
978
Параметры
979
<literal>nosecure</literal>,
980
<literal>nohttponly</literal>,
981
<literal>nosamesite</literal>
982
удаляют соответствующие флаги.
983
</para>
984
985
<para>
986
Куки также можно задать при помощи регулярных выражений.
987
При этом <value>кука</value> должна начинаться с символа
988
<literal>~</literal>”.
989
</para>
990
991
<para>
992
На одном уровне конфигурации может быть указано
993
несколько директив <literal>proxy_cookie_flags</literal>:
994
<example>
995
proxy_cookie_flags one httponly;
996
proxy_cookie_flags ~ nosecure samesite=strict;
997
</example>
998
Если к куке могут быть применены несколько директив,
999
будет выбрана первая из них.
1000
В данном примере флаг <literal>httponly</literal>
1001
добавляется к куке <literal>one</literal>,
1002
для остальных кук
1003
добавляется флаг <literal>samesite=strict</literal> и
1004
удаляется флаг <literal>secure</literal>.
1005
</para>
1006
1007
<para>
1008
Параметр <literal>off</literal> отменяет действие всех директив
1009
<literal>proxy_cookie_flags</literal>
1010
на данном уровне.
1011
</para>
1012
1013
</directive>
1014
1015
1016
<directive name="proxy_cookie_path">
1017
<syntax><literal>off</literal></syntax>
1018
<syntax><value>путь</value> <value>замена</value></syntax>
1019
<default>off</default>
1020
<context>http</context>
1021
<context>server</context>
1022
<context>location</context>
1023
<appeared-in>1.1.15</appeared-in>
1024
1025
<para>
1026
Задаёт текст, который нужно изменить в атрибуте <literal>path</literal>
1027
полей <header>Set-Cookie</header> заголовка ответа проксируемого сервера.
1028
Предположим, проксируемый сервер вернул поле заголовка
1029
<header>Set-Cookie</header> с атрибутом
1030
<literal>path=/two/some/uri/</literal>”.
1031
Директива
1032
<example>
1033
proxy_cookie_path /two/ /;
1034
</example>
1035
перепишет данный атрибут в виде
1036
<literal>path=/some/uri/</literal>”.
1037
</para>
1038
1039
<para>
1040
В строках <value>путь</value> и <value>замена</value> можно использовать
1041
переменные:
1042
<example>
1043
proxy_cookie_path $uri /some$uri;
1044
</example>
1045
</para>
1046
1047
<para>
1048
Директиву также можно задать при помощи регулярных выражений.
1049
При этом <value>путь</value> должен начинаться либо с символа
1050
<literal>~</literal>”, если при сравнении следует учитывать регистр символов,
1051
либо с символов “<literal>~*</literal>”, если регистр символов учитывать
1052
не нужно.
1053
Регулярное выражение может содержать именованные и позиционные выделения,
1054
а <value>замена</value> ссылаться на них:
1055
<example>
1056
proxy_cookie_path ~*^/user/([^/]+) /u/$1;
1057
</example>
1058
</para>
1059
1060
<para>
1061
На одном уровне может быть указано
1062
несколько директив <literal>proxy_cookie_path</literal>:
1063
<example>
1064
proxy_cookie_path /one/ /;
1065
proxy_cookie_path / /two/;
1066
</example>
1067
Если к куке могут быть применены несколько директив,
1068
будет выбрана первая из них.
1069
</para>
1070
1071
<para>
1072
Параметр <literal>off</literal> отменяет действие
1073
унаследованных с предыдущего уровня конфигурации
1074
директив <literal>proxy_cookie_path</literal>.
1075
</para>
1076
1077
</directive>
1078
1079
1080
<directive name="proxy_force_ranges">
1081
<syntax><literal>on</literal> | <literal>off</literal></syntax>
1082
<default>off</default>
1083
<context>http</context>
1084
<context>server</context>
1085
<context>location</context>
1086
<appeared-in>1.7.7</appeared-in>
1087
1088
<para>
1089
Включает поддержку диапазонов запрашиваемых байт (byte-range)
1090
для кэшированных и некэшированных ответов проксируемого сервера
1091
вне зависимости от наличия поля <header>Accept-Ranges</header>
1092
в заголовках этих ответов.
1093
</para>
1094
1095
</directive>
1096
1097
1098
<directive name="proxy_headers_hash_bucket_size">
1099
<syntax><value>размер</value></syntax>
1100
<default>64</default>
1101
<context>http</context>
1102
<context>server</context>
1103
<context>location</context>
1104
1105
<para>
1106
Задаёт <value>размер</value> корзины для хэш-таблиц,
1107
используемых директивами <link id="proxy_hide_header"/>
1108
и <link id="proxy_set_header"/>.
1109
Подробнее настройка хэш-таблиц обсуждается в отдельном
1110
<link doc="../hash.xml">документе</link>.
1111
</para>
1112
1113
</directive>
1114
1115
1116
<directive name="proxy_headers_hash_max_size">
1117
<syntax><value>размер</value></syntax>
1118
<default>512</default>
1119
<context>http</context>
1120
<context>server</context>
1121
<context>location</context>
1122
1123
<para>
1124
Задаёт максимальный <value>размер</value> хэш-таблиц,
1125
используемых директивами <link id="proxy_hide_header"/> и
1126
<link id="proxy_set_header"/>.
1127
Подробнее настройка хэш-таблиц обсуждается в отдельном
1128
<link doc="../hash.xml">документе</link>.
1129
</para>
1130
1131
</directive>
1132
1133
1134
<directive name="proxy_hide_header">
1135
<syntax><value>поле</value></syntax>
1136
<default/>
1137
<context>http</context>
1138
<context>server</context>
1139
<context>location</context>
1140
1141
<para>
1142
По умолчанию
1143
nginx не передаёт клиенту поля заголовка <header>Date</header>,
1144
<header>Server</header>, <header>X-Pad</header> и
1145
<header>X-Accel-...</header> из ответа проксированного сервера.
1146
Директива <literal>proxy_hide_header</literal> задаёт дополнительные поля,
1147
которые не будут передаваться.
1148
Если же передачу полей нужно разрешить, можно воспользоваться
1149
директивой <link id="proxy_pass_header"/>.
1150
</para>
1151
1152
</directive>
1153
1154
1155
<directive name="proxy_http_version">
1156
<syntax>
1157
<literal>1.0</literal> | <literal>1.1</literal> |
1158
<literal>2</literal></syntax>
1159
<default>1.1</default>
1160
<context>http</context>
1161
<context>server</context>
1162
<context>location</context>
1163
<appeared-in>1.1.4</appeared-in>
1164
1165
<para>
1166
Задаёт версию протокола HTTP для проксирования.
1167
Начиная с 1.29.7 по умолчанию используется версия 1.1.
1168
До версии 1.29.7 по умолчанию использовалась версия 1.0.
1169
Для работы
1170
<link doc="ngx_http_upstream_module.xml" id="keepalive">постоянных
1171
соединений</link> и
1172
<link doc="ngx_http_upstream_module.xml" id="ntlm">проверки подлинности
1173
NTLM</link> рекомендуется версия 1.1 или 2 (1.29.4).
1174
<note>
1175
Для версии 2 необходим
1176
модуль <link doc="ngx_http_v2_module.xml">ngx_http_v2_module</link>.
1177
</note>
1178
</para>
1179
1180
</directive>
1181
1182
1183
<directive name="proxy_ignore_client_abort">
1184
<syntax><literal>on</literal> | <literal>off</literal></syntax>
1185
<default>off</default>
1186
<context>http</context>
1187
<context>server</context>
1188
<context>location</context>
1189
1190
<para>
1191
Определяет, закрывать ли соединение с проксированным сервером
1192
в случае, если клиент закрыл соединение, не дождавшись ответа.
1193
</para>
1194
1195
</directive>
1196
1197
1198
<directive name="proxy_ignore_headers">
1199
<syntax><value>поле</value> ...</syntax>
1200
<default/>
1201
<context>http</context>
1202
<context>server</context>
1203
<context>location</context>
1204
1205
<para>
1206
Запрещает обработку некоторых полей заголовка из ответа проксированного сервера.
1207
В директиве можно указать поля <header>X-Accel-Redirect</header>,
1208
<header>X-Accel-Expires</header>, <header>X-Accel-Limit-Rate</header> (1.1.6),
1209
<header>X-Accel-Buffering</header> (1.1.6),
1210
<header>X-Accel-Charset</header> (1.1.6), <header>Expires</header>,
1211
<header>Cache-Control</header>, <header>Set-Cookie</header> (0.8.44)
1212
и <header>Vary</header> (1.7.7).
1213
</para>
1214
1215
<para>
1216
Если не запрещено, обработка этих полей заголовка заключается в следующем:
1217
<list type="bullet" compact="no">
1218
1219
<listitem>
1220
<header>X-Accel-Expires</header>, <header>Expires</header>,
1221
<header>Cache-Control</header>, <header>Set-Cookie</header>
1222
и <header>Vary</header>
1223
задают параметры <link id="proxy_cache_valid">кэширования</link> ответа;
1224
</listitem>
1225
1226
<listitem>
1227
<header>X-Accel-Redirect</header> производит
1228
<link doc="ngx_http_core_module.xml" id="internal">внутреннее
1229
перенаправление</link> на указанный URI;
1230
</listitem>
1231
1232
<listitem>
1233
<header>X-Accel-Limit-Rate</header> задаёт
1234
<link doc="ngx_http_core_module.xml" id="limit_rate">ограничение
1235
скорости</link> передачи ответа клиенту;
1236
</listitem>
1237
1238
<listitem>
1239
<header>X-Accel-Buffering</header> включает или выключает
1240
<link id="proxy_buffering">буферизацию</link> ответа;
1241
</listitem>
1242
1243
<listitem>
1244
<header>X-Accel-Charset</header> задаёт желаемую
1245
<link doc="ngx_http_charset_module.xml" id="charset">кодировку</link>
1246
ответа.
1247
</listitem>
1248
1249
</list>
1250
</para>
1251
1252
</directive>
1253
1254
1255
<directive name="proxy_intercept_errors">
1256
<syntax><literal>on</literal> | <literal>off</literal></syntax>
1257
<default>off</default>
1258
<context>http</context>
1259
<context>server</context>
1260
<context>location</context>
1261
1262
<para>
1263
Определяет, передавать ли клиенту проксированные ответы с кодом
1264
больше либо равным 300,
1265
или же перехватывать их и перенаправлять на обработку nginx’у с помощью
1266
директивы <link doc="ngx_http_core_module.xml" id="error_page"/>.
1267
</para>
1268
1269
</directive>
1270
1271
1272
<directive name="proxy_limit_rate">
1273
<syntax><value>скорость</value></syntax>
1274
<default>0</default>
1275
<context>http</context>
1276
<context>server</context>
1277
<context>location</context>
1278
<appeared-in>1.7.7</appeared-in>
1279
1280
<para>
1281
Ограничивает скорость чтения ответа от проксируемого сервера.
1282
<value>Скорость</value> задаётся в байтах в секунду.
1283
Значение 0 отключает ограничение скорости.
1284
Ограничение устанавливается на запрос,
1285
поэтому, если nginx одновременно
1286
откроет два соединения к проксируемому серверу,
1287
суммарная скорость будет вдвое выше заданного ограничения.
1288
Ограничение работает только в случае, если включена
1289
<link id="proxy_buffering">буферизация</link> ответов проксируемого сервера.
1290
В значении параметра можно использовать переменные (1.27.0).
1291
</para>
1292
1293
</directive>
1294
1295
1296
<directive name="proxy_max_temp_file_size">
1297
<syntax><value>размер</value></syntax>
1298
<default>1024m</default>
1299
<context>http</context>
1300
<context>server</context>
1301
<context>location</context>
1302
1303
<para>
1304
Если включена <link id="proxy_buffering">буферизация</link> ответов
1305
проксируемого сервера, и ответ не вмещается целиком в буферы,
1306
заданные директивами <link id="proxy_buffer_size"/> и
1307
<link id="proxy_buffers"/>, часть ответа может быть записана во временный файл.
1308
Эта директива задаёт максимальный <value>размер</value> временного файла.
1309
Размер данных, сбрасываемых во временный файл за один раз, задаётся
1310
директивой <link id="proxy_temp_file_write_size"/>.
1311
</para>
1312
1313
<para>
1314
Значение 0 отключает возможность буферизации ответов во временные файлы.
1315
</para>
1316
1317
<para>
1318
<note>
1319
Данное ограничение не распространяется на ответы,
1320
которые будут <link id="proxy_cache">закэшированы</link>
1321
или <link id="proxy_store">сохранены</link> на диске.
1322
</note>
1323
</para>
1324
1325
</directive>
1326
1327
1328
<directive name="proxy_method">
1329
<syntax><value>метод</value></syntax>
1330
<default/>
1331
<context>http</context>
1332
<context>server</context>
1333
<context>location</context>
1334
1335
<para>
1336
Задаёт HTTP-<value>метод</value>, который будет использоваться
1337
в передаваемых на проксируемый сервер запросах вместо метода
1338
из клиентского запроса.
1339
В значении параметра допустимо использование переменных (1.11.6).
1340
</para>
1341
1342
</directive>
1343
1344
1345
<directive name="proxy_next_upstream">
1346
<syntax>
1347
<literal>error</literal> |
1348
<literal>timeout</literal> |
1349
<literal>denied</literal> |
1350
<literal>invalid_header</literal> |
1351
<literal>http_500</literal> |
1352
<literal>http_502</literal> |
1353
<literal>http_503</literal> |
1354
<literal>http_504</literal> |
1355
<literal>http_403</literal> |
1356
<literal>http_404</literal> |
1357
<literal>http_429</literal> |
1358
<literal>non_idempotent</literal> |
1359
<literal>off</literal>
1360
...</syntax>
1361
<default>error timeout</default>
1362
<context>http</context>
1363
<context>server</context>
1364
<context>location</context>
1365
1366
<para>
1367
Определяет, в каких случаях запрос будет передан следующему серверу:
1368
<list type="tag">
1369
1370
<tag-name><literal>error</literal></tag-name>
1371
<tag-desc>произошла ошибка соединения с сервером, передачи ему запроса или
1372
чтения заголовка ответа сервера;</tag-desc>
1373
1374
<tag-name><literal>timeout</literal></tag-name>
1375
<tag-desc>произошёл таймаут во время соединения с сервером,
1376
передачи ему запроса или чтения заголовка ответа сервера;</tag-desc>
1377
1378
<tag-name id="denied"><literal>denied</literal></tag-name>
1379
<tag-desc>сервер <link id="proxy_allow_upstream">отклонил</link>
1380
соединение (1.29.3);
1381
<para>
1382
<note>
1383
Параметр доступен как часть
1384
<commercial_version>коммерческой подписки</commercial_version>.
1385
</note>
1386
</para>
1387
</tag-desc>
1388
1389
<tag-name id="invalid_header"><literal>invalid_header</literal></tag-name>
1390
<tag-desc>сервер вернул пустой или неверный ответ;</tag-desc>
1391
1392
<tag-name><literal>http_500</literal></tag-name>
1393
<tag-desc>сервер вернул ответ с кодом 500;</tag-desc>
1394
1395
<tag-name><literal>http_502</literal></tag-name>
1396
<tag-desc>сервер вернул ответ с кодом 502;</tag-desc>
1397
1398
<tag-name><literal>http_503</literal></tag-name>
1399
<tag-desc>сервер вернул ответ с кодом 503;</tag-desc>
1400
1401
<tag-name><literal>http_504</literal></tag-name>
1402
<tag-desc>сервер вернул ответ с кодом 504;</tag-desc>
1403
1404
<tag-name><literal>http_403</literal></tag-name>
1405
<tag-desc>сервер вернул ответ с кодом 403;</tag-desc>
1406
1407
<tag-name><literal>http_404</literal></tag-name>
1408
<tag-desc>сервер вернул ответ с кодом 404;</tag-desc>
1409
1410
<tag-name><literal>http_429</literal></tag-name>
1411
<tag-desc>сервер вернул ответ с кодом 429 (1.11.13);</tag-desc>
1412
1413
<tag-name id="non_idempotent"><literal>non_idempotent</literal></tag-name>
1414
<tag-desc>обычно запросы с
1415
<link url="https://datatracker.ietf.org/doc/html/rfc7231#section-4.2.2">неидемпотентным</link>
1416
методом
1417
(<literal>POST</literal>, <literal>LOCK</literal>, <literal>PATCH</literal>)
1418
не передаются на другой сервер,
1419
если запрос серверу группы уже был отправлен (1.9.13);
1420
включение параметра явно разрешает повторять подобные запросы;
1421
</tag-desc>
1422
1423
1424
<tag-name><literal>off</literal></tag-name>
1425
<tag-desc>запрещает передачу запроса следующему серверу.</tag-desc>
1426
1427
</list>
1428
</para>
1429
1430
<para>
1431
Необходимо понимать, что передача запроса следующему серверу возможна
1432
только при условии, что клиенту ещё ничего не передавалось.
1433
То есть, если ошибка или таймаут возникли в середине передачи ответа
1434
клиенту, то исправить это уже невозможно.
1435
</para>
1436
1437
<para>
1438
Директива также определяет, что считается
1439
<link doc="ngx_http_upstream_module.xml" id="max_fails">неудачной
1440
попыткой</link> работы с сервером.
1441
Случаи <literal>error</literal>, <literal>timeout</literal>,
1442
<literal>denied</literal> и
1443
<literal>invalid_header</literal>
1444
всегда считаются неудачными попытками, даже если они не указаны в директиве.
1445
Случаи <literal>http_500</literal>, <literal>http_502</literal>,
1446
<literal>http_503</literal>, <literal>http_504</literal>
1447
и <literal>http_429</literal>
1448
считаются неудачными попытками, только если они указаны в директиве.
1449
Случаи <literal>http_403</literal> и <literal>http_404</literal>
1450
никогда не считаются неудачными попытками.
1451
</para>
1452
1453
<para>
1454
Передача запроса следующему серверу может быть ограничена по
1455
<link id="proxy_next_upstream_tries">количеству попыток</link>
1456
и по <link id="proxy_next_upstream_timeout">времени</link>.
1457
</para>
1458
1459
</directive>
1460
1461
1462
<directive name="proxy_next_upstream_timeout">
1463
<syntax><value>время</value></syntax>
1464
<default>0</default>
1465
<context>http</context>
1466
<context>server</context>
1467
<context>location</context>
1468
<appeared-in>1.7.5</appeared-in>
1469
1470
<para>
1471
Ограничивает время, в течение которого возможна передача запроса
1472
<link id="proxy_next_upstream">следующему серверу</link>.
1473
Значение <literal>0</literal> отключает это ограничение.
1474
</para>
1475
1476
</directive>
1477
1478
1479
<directive name="proxy_next_upstream_tries">
1480
<syntax><value>число</value></syntax>
1481
<default>0</default>
1482
<context>http</context>
1483
<context>server</context>
1484
<context>location</context>
1485
<appeared-in>1.7.5</appeared-in>
1486
1487
<para>
1488
Ограничивает число допустимых попыток для передачи запроса
1489
<link id="proxy_next_upstream">следующему серверу</link>.
1490
Значение <literal>0</literal> отключает это ограничение.
1491
</para>
1492
1493
</directive>
1494
1495
1496
<directive name="proxy_no_cache">
1497
<syntax><value>строка</value> ...</syntax>
1498
<default/>
1499
<context>http</context>
1500
<context>server</context>
1501
<context>location</context>
1502
1503
<para>
1504
Задаёт условия, при которых ответ не будет сохраняться в кэш.
1505
Если значение хотя бы одного из строковых параметров непустое и не равно “0”,
1506
то ответ не будет сохранён:
1507
<example>
1508
proxy_no_cache $cookie_nocache $arg_nocache$arg_comment;
1509
proxy_no_cache $http_pragma $http_authorization;
1510
</example>
1511
Можно использовать совместно с директивой <link id="proxy_cache_bypass"/>.
1512
</para>
1513
1514
</directive>
1515
1516
1517
<directive name="proxy_pass">
1518
<syntax><value>URL</value></syntax>
1519
<default/>
1520
<context>location</context>
1521
<context>if в location</context>
1522
<context>limit_except</context>
1523
1524
<para>
1525
Задаёт протокол и адрес проксируемого сервера, а также необязательный URI,
1526
на который должен отображаться location.
1527
В качестве протокола можно указать
1528
<literal>http</literal>” или “<literal>https</literal>”.
1529
Адрес может быть указан в виде доменного имени или IP-адреса,
1530
и необязательного порта:
1531
<example>
1532
proxy_pass http://localhost:8000/uri/;
1533
</example>
1534
или в виде пути UNIX-сокета, который указывается после слова
1535
<literal>unix</literal>” и заключается в двоеточия:
1536
<example>
1537
proxy_pass http://unix:/tmp/backend.socket:/uri/;
1538
</example>
1539
</para>
1540
1541
<para>
1542
Если доменному имени соответствует несколько адресов, то все они будут
1543
использоваться по очереди (round-robin).
1544
Кроме того, в качестве адреса можно указать
1545
<link doc="ngx_http_upstream_module.xml">группу серверов</link>.
1546
</para>
1547
1548
<para>
1549
В значении параметра можно использовать переменные.
1550
В этом случае, если адрес указан в виде доменного имени,
1551
имя ищется среди описанных групп серверов
1552
и если не найдено, то определяется с помощью
1553
<link doc="ngx_http_core_module.xml" id="resolver"/>’а.
1554
</para>
1555
1556
<para>
1557
URI запроса передаётся на сервер так:
1558
<list type="bullet" compact="no">
1559
1560
<listitem>
1561
Если директива <literal>proxy_pass</literal> указана с URI,
1562
то при передаче запроса серверу часть
1563
<link doc="ngx_http_core_module.xml" id="location">нормализованного</link>
1564
URI запроса, соответствующая location, заменяется на URI,
1565
указанный в директиве:
1566
<example>
1567
location /name/ {
1568
proxy_pass http://127.0.0.1/remote/;
1569
}
1570
</example>
1571
</listitem>
1572
1573
<listitem>
1574
Если директива <literal>proxy_pass</literal> указана без URI,
1575
то при обработке первоначального запроса на сервер передаётся
1576
URI запроса в том же виде, в каком его прислал клиент,
1577
а при обработке изменённого URI&mdash;
1578
нормализованный URI запроса целиком:
1579
<example>
1580
location /some/path/ {
1581
proxy_pass http://127.0.0.1;
1582
}
1583
</example>
1584
<note>
1585
До версии 1.1.12,
1586
если <literal>proxy_pass</literal> указана без URI,
1587
в ряде случаев при изменении URI на сервер мог передаваться
1588
URI первоначального запроса вместо изменённого URI.
1589
</note>
1590
</listitem>
1591
</list>
1592
</para>
1593
1594
<para>
1595
В ряде случаев часть URI запроса, подлежащую замене, выделить невозможно:
1596
<list type="bullet" compact="no">
1597
1598
<listitem>
1599
Если location задан регулярным выражением,
1600
а также в именованных location’ах.
1601
<para>
1602
В этих случаях
1603
<literal>proxy_pass</literal> следует указывать без URI.
1604
</para>
1605
</listitem>
1606
1607
<listitem>
1608
Если внутри проксируемого location с помощью директивы
1609
<link doc="ngx_http_rewrite_module.xml" id="rewrite"/> изменяется
1610
URI, и именно с этой конфигурацией будет обрабатываться запрос
1611
(<literal>break</literal>):
1612
<example>
1613
location /name/ {
1614
rewrite /name/([^/]+) /users?name=$1 break;
1615
proxy_pass http://127.0.0.1;
1616
}
1617
</example>
1618
<para>
1619
В этом случае URI, указанный в директиве, игнорируется, и на сервер
1620
передаётся изменённый URI запроса целиком.
1621
</para>
1622
</listitem>
1623
1624
<listitem>
1625
При использовании переменных в <literal>proxy_pass</literal>:
1626
<example>
1627
location /name/ {
1628
proxy_pass http://127.0.0.1$request_uri;
1629
}
1630
</example>
1631
В этом случае если в директиве указан URI,
1632
он передаётся на сервер как есть,
1633
заменяя URI первоначального запроса.
1634
</listitem>
1635
</list>
1636
</para>
1637
1638
<para>
1639
Проксирование <link doc="websocket.xml">WebSocket</link> требует особой
1640
настройки и поддерживается начиная с версии 1.3.13.
1641
</para>
1642
1643
</directive>
1644
1645
1646
<directive name="proxy_pass_header">
1647
<syntax><value>поле</value></syntax>
1648
<default/>
1649
<context>http</context>
1650
<context>server</context>
1651
<context>location</context>
1652
1653
<para>
1654
Разрешает передавать от проксируемого сервера клиенту
1655
<link id="proxy_hide_header">запрещённые для передачи</link> поля заголовка.
1656
</para>
1657
1658
</directive>
1659
1660
1661
<directive name="proxy_pass_request_body">
1662
<syntax><literal>on</literal> | <literal>off</literal></syntax>
1663
<default>on</default>
1664
<context>http</context>
1665
<context>server</context>
1666
<context>location</context>
1667
1668
<para>
1669
Позволяет запретить передачу исходного тела запроса
1670
на проксируемый сервер.
1671
<example>
1672
location /x-accel-redirect-here/ {
1673
proxy_method GET;
1674
proxy_pass_request_body off;
1675
proxy_set_header Content-Length "";
1676
1677
proxy_pass ...
1678
}
1679
</example>
1680
См. также директивы <link id="proxy_set_header"/> и
1681
<link id="proxy_pass_request_headers"/>.
1682
</para>
1683
1684
</directive>
1685
1686
1687
<directive name="proxy_pass_request_headers">
1688
<syntax><literal>on</literal> | <literal>off</literal></syntax>
1689
<default>on</default>
1690
<context>http</context>
1691
<context>server</context>
1692
<context>location</context>
1693
1694
<para>
1695
Позволяет запретить передачу полей заголовка исходного запроса на
1696
проксируемый сервер.
1697
<example>
1698
location /x-accel-redirect-here/ {
1699
proxy_method GET;
1700
proxy_pass_request_headers off;
1701
proxy_pass_request_body off;
1702
1703
proxy_pass ...
1704
}
1705
</example>
1706
См. также директивы <link id="proxy_set_header"/> и
1707
<link id="proxy_pass_request_body"/>.
1708
</para>
1709
1710
</directive>
1711
1712
1713
<directive name="proxy_pass_trailers">
1714
<syntax><literal>on</literal> | <literal>off</literal></syntax>
1715
<default>off</default>
1716
<context>http</context>
1717
<context>server</context>
1718
<context>location</context>
1719
<appeared-in>1.27.2</appeared-in>
1720
1721
<para>
1722
Разрешает передавать от проксируемого сервера клиенту поля заголовка
1723
в конце ответа.
1724
</para>
1725
1726
<para>
1727
<note>
1728
Использование заголовков в конце ответа включается
1729
<link url="https://datatracker.ietf.org/doc/html/rfc9110#section-6.5.1">явным образом</link>:
1730
</note>
1731
<example>
1732
location / {
1733
# proxy_http_version 1.1; # версии до 1.29.7
1734
proxy_set_header Connection "te";
1735
proxy_set_header TE "trailers";
1736
proxy_pass_trailers on;
1737
1738
proxy_pass ...
1739
}
1740
</example>
1741
</para>
1742
1743
<para>
1744
<note>
1745
Заголовки в конце ответа, полученные от
1746
вышестоящего сервера, передаются клиенту как есть, без интерпретации.
1747
</note>
1748
</para>
1749
1750
</directive>
1751
1752
1753
<directive name="proxy_read_timeout">
1754
<syntax><value>время</value></syntax>
1755
<default>60s</default>
1756
<context>http</context>
1757
<context>server</context>
1758
<context>location</context>
1759
1760
<para>
1761
Задаёт таймаут при чтении ответа проксированного сервера.
1762
Таймаут устанавливается не на всю передачу ответа,
1763
а только между двумя операциями чтения.
1764
Если по истечении этого времени проксируемый сервер ничего не передаст,
1765
соединение закрывается.
1766
</para>
1767
1768
</directive>
1769
1770
1771
<directive name="proxy_redirect">
1772
<syntax><literal>default</literal></syntax>
1773
<syntax><literal>off</literal></syntax>
1774
<syntax><value>перенаправление</value> <value>замена</value></syntax>
1775
<default>default</default>
1776
<context>http</context>
1777
<context>server</context>
1778
<context>location</context>
1779
1780
<para>
1781
Задаёт текст, который нужно изменить в полях заголовка
1782
<header>Location</header> и <header>Refresh</header> в ответе
1783
проксируемого сервера.
1784
Предположим, проксируемый сервер вернул поле заголовка
1785
<literal>Location: http://localhost:8000/two/some/uri/</literal>”.
1786
Директива
1787
<example>
1788
proxy_redirect http://localhost:8000/two/ http://frontend/one/;
1789
</example>
1790
перепишет эту строку в виде
1791
<literal>Location: http://frontend/one/some/uri/</literal>”.
1792
</para>
1793
1794
<para>
1795
В заменяемой строке можно не указывать имя сервера:
1796
<example>
1797
proxy_redirect http://localhost:8000/two/ /;
1798
</example>
1799
тогда будут подставлены основное имя сервера и порт, если он отличен от 80.
1800
</para>
1801
1802
<para>
1803
Стандартная замена, задаваемая параметром <literal>default</literal>,
1804
использует параметры директив
1805
<link doc="ngx_http_core_module.xml" id="location"/> и
1806
<link id="proxy_pass"/>.
1807
Поэтому две нижеприведённые конфигурации одинаковы:
1808
<example>
1809
location /one/ {
1810
proxy_pass http://upstream:port/two/;
1811
proxy_redirect default;
1812
</example>
1813
1814
<example>
1815
location /one/ {
1816
proxy_pass http://upstream:port/two/;
1817
proxy_redirect http://upstream:port/two/ /one/;
1818
</example>
1819
Параметр <literal>default</literal> недопустим, если в <link id="proxy_pass"/>
1820
используются переменные.
1821
</para>
1822
1823
<para>
1824
В строке <value>замена</value> можно использовать переменные:
1825
<example>
1826
proxy_redirect http://localhost:8000/ http://$host:$server_port/;
1827
</example>
1828
</para>
1829
1830
<para>
1831
В строке <value>перенаправление</value> тоже можно использовать (1.1.11)
1832
переменные:
1833
<example>
1834
proxy_redirect http://$proxy_host:8000/ /;
1835
</example>
1836
</para>
1837
1838
<para>
1839
Директиву также можно задать (1.1.11) при помощи регулярных выражений.
1840
При этом <value>перенаправление</value> должно начинаться либо с символа
1841
<literal>~</literal>”, если при сравнении следует учитывать регистр символов,
1842
либо с символов “<literal>~*</literal>”, если регистр символов учитывать
1843
не нужно.
1844
Регулярное выражение может содержать именованные и позиционные выделения,
1845
а <value>замена</value> ссылаться на них:
1846
<example>
1847
proxy_redirect ~^(http://[^:]+):\d+(/.+)$ $1$2;
1848
proxy_redirect ~*/user/([^/]+)/(.+)$ http://$1.example.com/$2;
1849
</example>
1850
</para>
1851
1852
<para>
1853
На одном уровне может быть указано
1854
несколько директив <literal>proxy_redirect</literal>:
1855
<example>
1856
proxy_redirect default;
1857
proxy_redirect http://localhost:8000/ /;
1858
proxy_redirect http://www.example.com/ /;
1859
</example>
1860
Если к полям заголовка в ответе проксируемого сервера
1861
могут быть применены несколько директив,
1862
будет выбрана первая из них.
1863
</para>
1864
1865
<para>
1866
Параметр <literal>off</literal> отменяет действие
1867
унаследованных с предыдущего уровня конфигурации
1868
директив <literal>proxy_redirect</literal>.
1869
</para>
1870
1871
<para>
1872
С помощью этой директивы можно также добавлять имя хоста к относительным
1873
перенаправлениям, выдаваемым проксируемым сервером:
1874
<example>
1875
proxy_redirect / /;
1876
</example>
1877
</para>
1878
1879
</directive>
1880
1881
1882
<directive name="proxy_request_buffering">
1883
<syntax><literal>on</literal> | <literal>off</literal></syntax>
1884
<default>on</default>
1885
<context>http</context>
1886
<context>server</context>
1887
<context>location</context>
1888
<appeared-in>1.7.11</appeared-in>
1889
1890
<para>
1891
Разрешает или запрещает использовать буферизацию тела запроса клиента.
1892
</para>
1893
1894
<para>
1895
Если буферизация включена, то тело запроса полностью
1896
<link doc="ngx_http_core_module.xml" id="client_body_buffer_size">читается</link>
1897
от клиента перед отправкой запроса на проксируемый сервер.
1898
</para>
1899
1900
<para>
1901
Если буферизация выключена, то тело запроса отправляется
1902
на проксируемый сервер сразу же по мере его поступления.
1903
В этом случае запрос не может быть передан
1904
<link id="proxy_next_upstream">следующему серверу</link>,
1905
если nginx уже начал отправку тела запроса.
1906
</para>
1907
1908
<para>
1909
Если для отправки тела исходного запроса используется HTTP/1.1
1910
и передача данных частями (chunked transfer encoding),
1911
то тело запроса буферизуется независимо от значения директивы,
1912
если для проксирования также не
1913
<link id="proxy_http_version">включён</link> HTTP/1.1 или HTTP/2.
1914
</para>
1915
1916
</directive>
1917
1918
1919
<directive name="proxy_request_dynamic">
1920
<syntax><literal>on</literal> | <literal>off</literal></syntax>
1921
<default>off</default>
1922
<context>http</context>
1923
<context>server</context>
1924
<context>location</context>
1925
<appeared-in>1.29.3</appeared-in>
1926
1927
<para>
1928
Разрешает или запрещает создание отдельного экземпляра запроса
1929
для каждого проксируемого сервера.
1930
По умолчанию для всех проксируемых серверов используется единый запрос.
1931
Если разрешено, то для каждого сервера создаётся отдельный экземпляр запроса,
1932
что позволяет кастомизировать запрос для конкретного сервера.
1933
Например каждому серверу можно назначить своё значение
1934
поля <header>Host</header> в заголовке запроса:
1935
<example>
1936
proxy_request_dynamic on;
1937
proxy_set_header Host $upstream_last_server_name;
1938
</example>
1939
</para>
1940
1941
<para>
1942
<note>
1943
Директива доступна как часть
1944
<commercial_version>коммерческой подписки</commercial_version>.
1945
</note>
1946
</para>
1947
1948
</directive>
1949
1950
1951
<directive name="proxy_send_lowat">
1952
<syntax><value>размер</value></syntax>
1953
<default>0</default>
1954
<context>http</context>
1955
<context>server</context>
1956
<context>location</context>
1957
1958
<para>
1959
При установке директивы в ненулевое значение nginx будет пытаться минимизировать
1960
число операций отправки на исходящих соединениях с проксируемым сервером либо
1961
при помощи флага <c-def>NOTE_LOWAT</c-def> метода
1962
<link doc="../events.xml" id="kqueue"/>,
1963
либо при помощи параметра сокета <c-def>SO_SNDLOWAT</c-def>,
1964
с указанным <value>размером</value>.
1965
</para>
1966
1967
<para>
1968
Эта директива игнорируется на Linux, Solaris и Windows.
1969
</para>
1970
1971
</directive>
1972
1973
1974
<directive name="proxy_send_timeout">
1975
<syntax><value>время</value></syntax>
1976
<default>60s</default>
1977
<context>http</context>
1978
<context>server</context>
1979
<context>location</context>
1980
1981
<para>
1982
Задаёт таймаут при передаче запроса проксированному серверу.
1983
Таймаут устанавливается не на всю передачу запроса,
1984
а только между двумя операциями записи.
1985
Если по истечении этого времени проксируемый сервер не примет новых данных,
1986
соединение закрывается.
1987
</para>
1988
1989
</directive>
1990
1991
1992
<directive name="proxy_set_body">
1993
<syntax><value>значение</value></syntax>
1994
<default/>
1995
<context>http</context>
1996
<context>server</context>
1997
<context>location</context>
1998
1999
<para>
2000
Позволяет переопределить тело запроса, передаваемое на проксируемый сервер.
2001
В качестве значения можно использовать текст, переменные и их комбинации.
2002
</para>
2003
2004
</directive>
2005
2006
2007
<directive name="proxy_set_header">
2008
<syntax><value>поле</value> <value>значение</value></syntax>
2009
<default>Host $proxy_host</default>
2010
<default>Connection close</default>
2011
<context>http</context>
2012
<context>server</context>
2013
<context>location</context>
2014
2015
<para>
2016
Позволяет переопределять или добавлять поля заголовка запроса,
2017
<link id="proxy_pass_request_headers">передаваемые</link> проксируемому серверу.
2018
В качестве значения можно использовать текст, переменные и их комбинации.
2019
Директивы наследуются с предыдущего уровня конфигурации при условии, что
2020
на данном уровне не описаны свои директивы <literal>proxy_set_header</literal>.
2021
</para>
2022
2023
<para>
2024
По умолчанию поля заголовка
2025
<header>Host</header>
2026
и
2027
<header>Connection</header>
2028
исходного запроса не передаются на проксируемый сервер.
2029
Если для проксирования
2030
<link id="proxy_http_version">включён</link> HTTP/1.0 или HTTP/1.1,
2031
эти поля переопределяются:
2032
<example>
2033
proxy_set_header Host $proxy_host;
2034
proxy_set_header Connection close;
2035
</example>
2036
Для HTTP/2 по умолчанию передаётся поле псевдо-заголовка
2037
<header>:authority</header>
2038
со значением
2039
<value>$proxy_host</value>,
2040
при условии что поле заголовка <header>Host</header> не задано явно.
2041
</para>
2042
2043
<para>
2044
Если включено кэширование, поля заголовка
2045
<header>If-Modified-Since</header>,
2046
<header>If-Unmodified-Since</header>,
2047
<header>If-None-Match</header>,
2048
<header>If-Match</header>,
2049
<header>Range</header>
2050
и
2051
<header>If-Range</header>
2052
исходного запроса не передаются на проксируемый сервер.
2053
</para>
2054
2055
<para>
2056
Неизменённое поле заголовка запроса <header>Host</header> можно передать так:
2057
<example>
2058
proxy_set_header Host $http_host;
2059
</example>
2060
</para>
2061
2062
<para>
2063
Однако, если это поле отсутствует в заголовке запроса клиента, то ничего
2064
передаваться не будет.
2065
В этом случае лучше воспользоваться переменной <var>$host</var>&mdash;её
2066
значение равно имени сервера в поле <header>Host</header>
2067
заголовка запроса, или же основному имени сервера, если поля нет:
2068
<example>
2069
proxy_set_header Host $host;
2070
</example>
2071
</para>
2072
2073
<para>
2074
Кроме того, можно передать имя сервера вместе с портом проксируемого сервера:
2075
<example>
2076
proxy_set_header Host $host:$proxy_port;
2077
</example>
2078
</para>
2079
2080
<para>
2081
Если значение поля заголовка — пустая строка, то поле вообще
2082
не будет передаваться проксируемому серверу:
2083
<example>
2084
proxy_set_header Accept-Encoding "";
2085
</example>
2086
</para>
2087
2088
</directive>
2089
2090
2091
<directive name="proxy_socket_keepalive">
2092
<syntax><literal>on</literal> | <literal>off</literal></syntax>
2093
<default>off</default>
2094
<context>http</context>
2095
<context>server</context>
2096
<context>location</context>
2097
<appeared-in>1.15.6</appeared-in>
2098
2099
<para>
2100
Конфигурирует поведение “TCP keepalive”
2101
для исходящих соединений к проксируемому серверу.
2102
По умолчанию для сокета действуют настройки операционной системы.
2103
Если указано значение “<literal>on</literal>”, то
2104
для сокета включается параметр <c-def>SO_KEEPALIVE</c-def>.
2105
</para>
2106
2107
</directive>
2108
2109
2110
<directive name="proxy_ssl_certificate">
2111
<syntax><value>файл</value></syntax>
2112
<default/>
2113
<context>http</context>
2114
<context>server</context>
2115
<context>location</context>
2116
<appeared-in>1.7.8</appeared-in>
2117
2118
<para>
2119
Задаёт <value>файл</value> с сертификатом в формате PEM
2120
для аутентификации на проксируемом HTTPS-сервере.
2121
</para>
2122
2123
<para id="proxy_ssl_certificate_variables">
2124
Начиная с версии 1.21.0 в имени файла можно использовать переменные.
2125
</para>
2126
2127
</directive>
2128
2129
2130
<directive name="proxy_ssl_certificate_cache">
2131
<syntax><literal>off</literal></syntax>
2132
<syntax>
2133
<literal>max</literal>=<value>N</value>
2134
[<literal>inactive</literal>=<value>время</value>]
2135
[<literal>valid</literal>=<value>время</value>]</syntax>
2136
<default>off</default>
2137
<context>http</context>
2138
<context>server</context>
2139
<context>location</context>
2140
<appeared-in>1.27.4</appeared-in>
2141
2142
<para>
2143
Задаёт кэш, в котором могут храниться
2144
<link id="proxy_ssl_certificate">SSL-сертификаты</link> и
2145
<link id="proxy_ssl_certificate_key">секретные ключи</link>,
2146
полученные из <link id="proxy_ssl_certificate_key_variables">переменных</link>.
2147
</para>
2148
2149
<para>
2150
У директивы есть следующие параметры:
2151
<list type="tag">
2152
2153
<tag-name id="proxy_ssl_certificate_cache_max">
2154
<literal>max</literal>
2155
</tag-name>
2156
<tag-desc>
2157
задаёт максимальное число элементов в кэше;
2158
при переполнении кэша удаляются наименее востребованные элементы (LRU);
2159
</tag-desc>
2160
2161
<tag-name id="proxy_ssl_certificate_cache_inactive">
2162
<literal>inactive</literal>
2163
</tag-name>
2164
<tag-desc>
2165
задаёт время, после которого элемент кэша удаляется,
2166
если к нему не было обращений в течение этого времени;
2167
по умолчанию 10 секунд;
2168
</tag-desc>
2169
2170
<tag-name id="proxy_ssl_certificate_cache_valid">
2171
<literal>valid</literal>
2172
</tag-name>
2173
<tag-desc>
2174
задает время, в течение которого
2175
элемент кэша считается действительным
2176
и может быть повторно использован,
2177
по умолчанию 60 секунд.
2178
По завершении этого времени сертификат будет обновлён или повторно проверен;
2179
</tag-desc>
2180
2181
<tag-name id="proxy_ssl_certificate_cache_off">
2182
<literal>off</literal>
2183
</tag-name>
2184
<tag-desc>
2185
запрещает кэш.
2186
</tag-desc>
2187
2188
</list>
2189
</para>
2190
2191
<para>
2192
Пример:
2193
<example>
2194
proxy_ssl_certificate $proxy_ssl_server_name.crt;
2195
proxy_ssl_certificate_key $proxy_ssl_server_name.key;
2196
proxy_ssl_certificate_cache max=1000 inactive=20s valid=1m;
2197
</example>
2198
</para>
2199
2200
</directive>
2201
2202
2203
<directive name="proxy_ssl_certificate_key">
2204
<syntax><value>файл</value></syntax>
2205
<default/>
2206
<context>http</context>
2207
<context>server</context>
2208
<context>location</context>
2209
<appeared-in>1.7.8</appeared-in>
2210
2211
<para>
2212
Задаёт <value>файл</value> с секретным ключом в формате PEM
2213
для аутентификации на проксируемом HTTPS-сервере.
2214
</para>
2215
2216
<para>
2217
Вместо <value>файла</value> можно указать значение
2218
<literal>engine</literal>:<value>имя</value>:<value>id</value> (1.7.9),
2219
которое загружает ключ с указанным <value>id</value>
2220
из OpenSSL engine с заданным <value>именем</value>.
2221
</para>
2222
2223
<para>
2224
Вместо <value>файла</value> можно указать значение
2225
<literal>store</literal>:<value>схема</value>:<value>id</value> (1.29.0),
2226
которое используется для загрузки ключа с указанным <value>id</value>
2227
и зарегистрированной провайдером OpenSSL <value>схемой</value> URI, такой как
2228
<link url="https://datatracker.ietf.org/doc/html/rfc7512"><literal>pkcs11</literal></link>.
2229
</para>
2230
2231
<para id="proxy_ssl_certificate_key_variables">
2232
Начиная с версии 1.21.0 в имени файла можно использовать переменные.
2233
</para>
2234
2235
</directive>
2236
2237
2238
<directive name="proxy_ssl_ciphers">
2239
<syntax><value>шифры</value></syntax>
2240
<default>DEFAULT</default>
2241
<context>http</context>
2242
<context>server</context>
2243
<context>location</context>
2244
<appeared-in>1.5.6</appeared-in>
2245
2246
<para>
2247
Описывает разрешённые шифры для запросов к проксируемому HTTPS-серверу.
2248
Шифры задаются в формате, поддерживаемом библиотекой OpenSSL.
2249
</para>
2250
2251
<para>
2252
Полный список можно посмотреть с помощью команды
2253
<command>openssl ciphers</command>”.
2254
</para>
2255
2256
</directive>
2257
2258
2259
<directive name="proxy_ssl_conf_command">
2260
<syntax><value>имя</value> <value>значение</value></syntax>
2261
<default/>
2262
<context>http</context>
2263
<context>server</context>
2264
<context>location</context>
2265
<appeared-in>1.19.4</appeared-in>
2266
2267
<para>
2268
Задаёт произвольные конфигурационные
2269
<link url="https://www.openssl.org/docs/man1.1.1/man3/SSL_CONF_cmd.html">команды</link>
2270
OpenSSL
2271
при установлении соединения с проксируемым HTTPS-сервером.
2272
<note>
2273
Директива поддерживается при использовании OpenSSL 1.0.2 и выше.
2274
</note>
2275
</para>
2276
2277
<para>
2278
На одном уровне может быть указано
2279
несколько директив <literal>proxy_ssl_conf_command</literal>.
2280
Директивы наследуются с предыдущего уровня конфигурации при условии, что
2281
на данном уровне не описаны
2282
свои директивы <literal>proxy_ssl_conf_command</literal>.
2283
</para>
2284
2285
<para>
2286
<note>
2287
Следует учитывать, что изменение настроек OpenSSL напрямую
2288
может привести к неожиданному поведению.
2289
</note>
2290
</para>
2291
2292
</directive>
2293
2294
2295
<directive name="proxy_ssl_crl">
2296
<syntax><value>файл</value></syntax>
2297
<default/>
2298
<context>http</context>
2299
<context>server</context>
2300
<context>location</context>
2301
<appeared-in>1.7.0</appeared-in>
2302
2303
<para>
2304
Указывает <value>файл</value> с отозванными сертификатами (CRL)
2305
в формате PEM, используемыми при <link id="proxy_ssl_verify">проверке</link>
2306
сертификата проксируемого HTTPS-сервера.
2307
Если используются промежуточные сертификаты,
2308
их списки CRL должны находиться в этом же файле.
2309
</para>
2310
2311
</directive>
2312
2313
2314
<directive name="proxy_ssl_key_log">
2315
<syntax>путь</syntax>
2316
<default/>
2317
<context>http</context>
2318
<context>server</context>
2319
<context>location</context>
2320
<appeared-in>1.27.2</appeared-in>
2321
2322
<para>
2323
Включает логирование SSL-ключей соединений с проксируемым HTTPS-сервером
2324
и указывает путь к лог-файлу ключей.
2325
Ключи записываются в формате
2326
<link url="https://datatracker.ietf.org/doc/html/draft-ietf-tls-keylogfile">SSLKEYLOGFILE</link>
2327
совместимом с Wireshark.
2328
</para>
2329
2330
<para>
2331
<note>
2332
Директива доступна как часть
2333
<commercial_version>коммерческой подписки</commercial_version>.
2334
</note>
2335
</para>
2336
2337
</directive>
2338
2339
2340
<directive name="proxy_ssl_name">
2341
<syntax><value>имя</value></syntax>
2342
<default>$proxy_host</default>
2343
<context>http</context>
2344
<context>server</context>
2345
<context>location</context>
2346
<appeared-in>1.7.0</appeared-in>
2347
2348
<para>
2349
Позволяет переопределить имя сервера, используемое при
2350
<link id="proxy_ssl_verify">проверке</link>
2351
сертификата проксируемого HTTPS-сервера, а также для
2352
<link id="proxy_ssl_server_name">передачи его через SNI</link>
2353
при установлении соединения с проксируемым HTTPS-сервером.
2354
</para>
2355
2356
<para>
2357
По умолчанию используется имя хоста из URL’а, заданного
2358
директивой <link id="proxy_pass"/>.
2359
</para>
2360
2361
</directive>
2362
2363
2364
<directive name="proxy_ssl_password_file">
2365
<syntax><value>файл</value></syntax>
2366
<default/>
2367
<context>http</context>
2368
<context>server</context>
2369
<context>location</context>
2370
<appeared-in>1.7.8</appeared-in>
2371
2372
<para>
2373
Задаёт <value>файл</value> с паролями от
2374
<link id="proxy_ssl_certificate_key">секретных ключей</link>,
2375
где каждый пароль указан на отдельной строке.
2376
Пароли применяются по очереди в момент загрузки ключа.
2377
</para>
2378
2379
</directive>
2380
2381
2382
<directive name="proxy_ssl_protocols">
2383
<syntax>
2384
[<literal>SSLv2</literal>]
2385
[<literal>SSLv3</literal>]
2386
[<literal>TLSv1</literal>]
2387
[<literal>TLSv1.1</literal>]
2388
[<literal>TLSv1.2</literal>]
2389
[<literal>TLSv1.3</literal>]</syntax>
2390
<default>TLSv1.2 TLSv1.3</default>
2391
<context>http</context>
2392
<context>server</context>
2393
<context>location</context>
2394
<appeared-in>1.5.6</appeared-in>
2395
2396
<para>
2397
Разрешает указанные протоколы для запросов к проксируемому HTTPS-серверу.
2398
</para>
2399
2400
<para>
2401
<note>
2402
Параметр <literal>TLSv1.3</literal> используется по умолчанию
2403
начиная с 1.23.4.
2404
</note>
2405
</para>
2406
2407
</directive>
2408
2409
2410
<directive name="proxy_ssl_server_name">
2411
<syntax><literal>on</literal> | <literal>off</literal></syntax>
2412
<default>off</default>
2413
<context>http</context>
2414
<context>server</context>
2415
<context>location</context>
2416
<appeared-in>1.7.0</appeared-in>
2417
2418
<para>
2419
Разрешает или запрещает передачу имени сервера через
2420
<link url="http://en.wikipedia.org/wiki/Server_Name_Indication">расширение
2421
Server Name Indication протокола TLS</link> (SNI, RFC 6066)
2422
при установлении соединения с проксируемым HTTPS-сервером.
2423
</para>
2424
2425
</directive>
2426
2427
2428
<directive name="proxy_ssl_session_reuse">
2429
<syntax><literal>on</literal> | <literal>off</literal></syntax>
2430
<default>on</default>
2431
<context>http</context>
2432
<context>server</context>
2433
<context>location</context>
2434
2435
<para>
2436
Определяет, использовать ли повторно SSL-сессии при
2437
работе с проксированным сервером.
2438
Если в логах появляются ошибки
2439
<literal>digest check failed</literal>”,
2440
то можно попробовать выключить
2441
повторное использование сессий.
2442
</para>
2443
2444
</directive>
2445
2446
2447
<directive name="proxy_ssl_trusted_certificate">
2448
<syntax><value>файл</value></syntax>
2449
<default/>
2450
<context>http</context>
2451
<context>server</context>
2452
<context>location</context>
2453
<appeared-in>1.7.0</appeared-in>
2454
2455
<para>
2456
Задаёт <value>файл</value> с доверенными сертификатами CA в формате PEM,
2457
используемыми при <link id="proxy_ssl_verify">проверке</link>
2458
сертификата проксируемого HTTPS-сервера.
2459
</para>
2460
2461
</directive>
2462
2463
2464
<directive name="proxy_ssl_verify">
2465
<syntax><literal>on</literal> | <literal>off</literal></syntax>
2466
<default>off</default>
2467
<context>http</context>
2468
<context>server</context>
2469
<context>location</context>
2470
<appeared-in>1.7.0</appeared-in>
2471
2472
<para>
2473
Разрешает или запрещает проверку сертификата проксируемого HTTPS-сервера.
2474
</para>
2475
2476
</directive>
2477
2478
2479
<directive name="proxy_ssl_verify_depth">
2480
<syntax><value>число</value></syntax>
2481
<default>1</default>
2482
<context>http</context>
2483
<context>server</context>
2484
<context>location</context>
2485
<appeared-in>1.7.0</appeared-in>
2486
2487
<para>
2488
Устанавливает глубину проверки в цепочке сертификатов
2489
проксируемого HTTPS-сервера.
2490
</para>
2491
2492
</directive>
2493
2494
2495
<directive name="proxy_store">
2496
<syntax>
2497
<literal>on</literal> |
2498
<literal>off</literal> |
2499
<value>строка</value></syntax>
2500
<default>off</default>
2501
<context>http</context>
2502
<context>server</context>
2503
<context>location</context>
2504
2505
<para>
2506
Разрешает сохранение на диск файлов.
2507
Параметр <literal>on</literal> сохраняет файлы в соответствии с путями,
2508
указанными в директивах
2509
<link doc="ngx_http_core_module.xml" id="alias"/> или
2510
<link doc="ngx_http_core_module.xml" id="root"/>.
2511
Параметр <literal>off</literal> запрещает сохранение файлов.
2512
Кроме того, имя файла можно задать явно с помощью строки с переменными:
2513
<example>
2514
proxy_store /data/www$original_uri;
2515
</example>
2516
</para>
2517
2518
<para>
2519
Время изменения файлов выставляется согласно полученному полю
2520
<header>Last-Modified</header> в заголовке ответа.
2521
Ответ сначала записывается во временный файл, а потом этот файл
2522
переименовывается.
2523
Начиная с версии 0.8.9 временный файл и постоянное место хранения ответа
2524
могут располагаться на разных файловых системах.
2525
Однако нужно учитывать,
2526
что в этом случае вместо дешёвой операции переименовывания в пределах
2527
одной файловой системы файл копируется с одной файловой системы на другую.
2528
Поэтому лучше, если сохраняемые файлы будут находиться на той же файловой
2529
системе, что и каталог с временными файлами, задаваемый директивой
2530
<link id="proxy_temp_path"/> для данного location.
2531
</para>
2532
2533
<para>
2534
Директиву можно использовать для создания локальных копий статических
2535
неизменяемых файлов, например, так:
2536
<example>
2537
location /images/ {
2538
root /data/www;
2539
error_page 404 = /fetch$uri;
2540
}
2541
2542
location /fetch/ {
2543
internal;
2544
2545
proxy_pass http://backend/;
2546
proxy_store on;
2547
proxy_store_access user:rw group:rw all:r;
2548
proxy_temp_path /data/temp;
2549
2550
alias /data/www/;
2551
}
2552
</example>
2553
</para>
2554
2555
<para>
2556
или так:
2557
<example>
2558
location /images/ {
2559
root /data/www;
2560
error_page 404 = @fetch;
2561
}
2562
2563
location @fetch {
2564
internal;
2565
2566
proxy_pass http://backend;
2567
proxy_store on;
2568
proxy_store_access user:rw group:rw all:r;
2569
proxy_temp_path /data/temp;
2570
2571
root /data/www;
2572
}
2573
</example>
2574
</para>
2575
2576
</directive>
2577
2578
2579
<directive name="proxy_store_access">
2580
<syntax><value>пользователи</value>:<value>права</value> ...</syntax>
2581
<default>user:rw</default>
2582
<context>http</context>
2583
<context>server</context>
2584
<context>location</context>
2585
2586
<para>
2587
Задаёт права доступа для создаваемых файлов и каталогов, например,
2588
<example>
2589
proxy_store_access user:rw group:rw all:r;
2590
</example>
2591
</para>
2592
2593
<para>
2594
Если заданы какие-либо права для <literal>group</literal> или
2595
<literal>all</literal>, то права для <literal>user</literal>
2596
указывать необязательно:
2597
<example>
2598
proxy_store_access group:rw all:r;
2599
</example>
2600
</para>
2601
2602
</directive>
2603
2604
2605
<directive name="proxy_temp_file_write_size">
2606
<syntax><value>размер</value></syntax>
2607
<default>8k|16k</default>
2608
<context>http</context>
2609
<context>server</context>
2610
<context>location</context>
2611
2612
<para>
2613
Ограничивает <value>размер</value> данных, сбрасываемых во временный файл
2614
за один раз, при включённой буферизации ответов проксируемого сервера
2615
во временные файлы.
2616
По умолчанию <value>размер</value> ограничен двумя буферами, заданными
2617
директивами <link id="proxy_buffer_size"/> и <link id="proxy_buffers"/>.
2618
Максимальный размер временного файла задаётся директивой
2619
<link id="proxy_max_temp_file_size"/>.
2620
</para>
2621
2622
</directive>
2623
2624
2625
<directive name="proxy_temp_path">
2626
<syntax>
2627
<value>путь</value>
2628
[<value>уровень1</value>
2629
[<value>уровень2</value>
2630
[<value>уровень3</value>]]]</syntax>
2631
<default>proxy_temp</default>
2632
<context>http</context>
2633
<context>server</context>
2634
<context>location</context>
2635
2636
<para>
2637
Задаёт имя каталога для хранения временных файлов с данными,
2638
полученными от проксируемых серверов.
2639
В каталоге может использоваться иерархия подкаталогов до трёх уровней.
2640
Например, при такой конфигурации
2641
<example>
2642
proxy_temp_path /spool/nginx/proxy_temp 1 2;
2643
</example>
2644
временный файл будет следующего вида:
2645
<example>
2646
/spool/nginx/proxy_temp/<emphasis>7</emphasis>/<emphasis>45</emphasis>/00000123<emphasis>457</emphasis>
2647
</example>
2648
</para>
2649
2650
<para>
2651
См. также параметр <literal>use_temp_path</literal> директивы
2652
<link id="proxy_cache_path"/>.
2653
</para>
2654
2655
</directive>
2656
2657
</section>
2658
2659
2660
<section id="variables" name="Встроенные переменные">
2661
2662
<para>
2663
В модуле <literal>ngx_http_proxy_module</literal> есть встроенные переменные,
2664
которые можно использовать для формирования заголовков с помощью директивы
2665
<link id="proxy_set_header"/>:
2666
<list type="tag">
2667
2668
<tag-name id="var_proxy_host"><var>$proxy_host</var></tag-name>
2669
<tag-desc>имя и порт проксируемого сервера, как указано в
2670
директиве <link id="proxy_pass"/>;</tag-desc>
2671
2672
<tag-name id="var_proxy_port"><var>$proxy_port</var></tag-name>
2673
<tag-desc>порт проксируемого сервера, как указано в
2674
директиве <link id="proxy_pass"/>, или стандартный порт протокола;</tag-desc>
2675
2676
<tag-name id="var_proxy_add_x_forwarded_for">
2677
<var>$proxy_add_x_forwarded_for</var></tag-name>
2678
<tag-desc>поле заголовка запроса клиента <header>X-Forwarded-For</header>
2679
и добавленная к нему через запятую переменная <var>$remote_addr</var>.
2680
Если же поля <header>X-Forwarded-For</header> в заголовке запроса клиента нет,
2681
то переменная <var>$proxy_add_x_forwarded_for</var>
2682
равна переменной <var>$remote_addr</var>.</tag-desc>
2683
</list>
2684
</para>
2685
2686
</section>
2687
2688
</module>
2689
2690