Path: blob/main/xml/ru/docs/http/ngx_http_proxy_module.xml
1 views
<?xml version="1.0"?>12<!--3Copyright (C) Igor Sysoev4Copyright (C) Nginx, Inc.5-->67<!DOCTYPE module SYSTEM "../../../../dtd/module.dtd">89<module name="Модуль ngx_http_proxy_module"10link="/ru/docs/http/ngx_http_proxy_module.html"11lang="ru"12rev="88">1314<section id="summary">1516<para>17Модуль <literal>ngx_http_proxy_module</literal> позволяет передавать18запросы другому серверу.19</para>2021</section>222324<section id="example" name="Пример конфигурации">2526<para>27<example>28location / {29proxy_pass http://localhost:8000;30proxy_set_header Host $host;31proxy_set_header X-Real-IP $remote_addr;32}33</example>34</para>3536</section>373839<section id="directives" name="Директивы">4041<directive name="proxy_allow_upstream">42<syntax><value>строка</value> ...</syntax>43<default/>44<context>http</context>45<context>server</context>46<context>location</context>47<appeared-in>1.29.3</appeared-in>4849<para>50Задаёт условия, при которых доступ к проксируемому серверу51будет разрешён или <link id="denied">запрещён</link>.52Если все значения строковых параметров непустые53и не равны “0”, то доступ разрешён.54Условия проверяются каждый раз55перед установлением соединения с проксируемым сервером.56В значении параметров допустимо использование переменных:57<example>58geo $upstream_last_addr $allow {59volatile;6010.10.0.0/24 1;61}6263server {64listen 127.0.0.1:8080;6566location / {67proxy_pass localhost:8000;68proxy_allow_upstream $allow;69...70}71}72</example>73</para>7475<para>76<note>77Директива доступна как часть78<commercial_version>коммерческой подписки</commercial_version>.79</note>80</para>8182</directive>838485<directive name="proxy_bind">86<syntax>87<value>адрес</value>88[<literal>transparent</literal>] |89<literal>off</literal></syntax>90<default/>91<context>http</context>92<context>server</context>93<context>location</context>94<appeared-in>0.8.22</appeared-in>9596<para>97Задаёт локальный IP-адрес с необязательным портом (1.11.2),98который будет использоваться в исходящих соединениях с проксируемым сервером.99В значении параметра допустимо использование переменных (1.3.12).100Специальное значение <literal>off</literal> (1.3.12) отменяет действие101унаследованной с предыдущего уровня конфигурации102директивы <literal>proxy_bind</literal>, позволяя системе103самостоятельно выбирать локальный IP-адрес и порт.104</para>105106<para id="proxy_bind_transparent">107Параметр <literal>transparent</literal> (1.11.0) позволяет108задать нелокальный IP-aдрес, который будет использоваться в109исходящих соединениях с проксируемым сервером,110например, реальный IP-адрес клиента:111<example>112proxy_bind $remote_addr transparent;113</example>114Для работы параметра115обычно требуется116запустить рабочие процессы nginx с привилегиями117<link doc="../ngx_core_module.xml" id="user">суперпользователя</link>.118В Linux этого не требуется (1.13.8), так как если119указан параметр <literal>transparent</literal>, то рабочие процессы120наследуют capability <literal>CAP_NET_RAW</literal> из главного процесса.121Также необходимо настроить таблицу маршрутизации ядра122для перехвата сетевого трафика с проксируемого сервера.123</para>124125</directive>126127128<directive name="proxy_bind_dynamic">129<syntax><literal>on</literal> | <literal>off</literal></syntax>130<default>off</default>131<context>http</context>132<context>server</context>133<context>location</context>134<appeared-in>1.29.3</appeared-in>135136<para>137Если включено, операция <link id="proxy_bind">bind</link> осуществляется138при каждой попытке соединения.139</para>140141<para>142<note>143Директива доступна как часть144<commercial_version>коммерческой подписки</commercial_version>.145</note>146</para>147148</directive>149150151<directive name="proxy_buffer_size">152<syntax><value>размер</value></syntax>153<default>4k|8k</default>154<context>http</context>155<context>server</context>156<context>location</context>157158<para>159Задаёт <value>размер</value> буфера, в который будет читаться160первая часть ответа, получаемого от проксируемого сервера.161В этой части ответа находится, как правило, небольшой заголовок ответа;162если его размер больше заданного, то такой ответ считается163<link id="invalid_header">неверным</link>.164По умолчанию размер одного буфера равен размеру страницы памяти.165В зависимости от платформы это или 4K, или 8K,166однако его можно сделать меньше.167</para>168169</directive>170171172<directive name="proxy_buffering">173<syntax><literal>on</literal> | <literal>off</literal></syntax>174<default>on</default>175<context>http</context>176<context>server</context>177<context>location</context>178179<para>180Разрешает или запрещает использовать буферизацию ответов проксируемого сервера.181</para>182183<para>184Если буферизация включена, то nginx принимает ответ проксируемого сервера185как можно быстрее, сохраняя его в буферы, заданные директивами186<link id="proxy_buffer_size"/> и <link id="proxy_buffers"/>.187Если ответ не вмещается целиком в память, то его часть может быть записана188на диск во <link id="proxy_temp_path">временный файл</link>.189Запись во временные файлы контролируется директивами190<link id="proxy_max_temp_file_size"/> и191<link id="proxy_temp_file_write_size"/>.192</para>193194<para>195Если буферизация выключена, то ответ синхронно передаётся клиенту сразу же196по мере его поступления.197nginx не пытается считать весь ответ проксируемого сервера.198Максимальный размер данных, который nginx может принять от сервера199за один раз, задаётся директивой <link id="proxy_buffer_size"/>.200</para>201202<para>203Буферизация может быть также включена или выключена путём передачи204значения “<literal>yes</literal>” или “<literal>no</literal>” в поле205<header>X-Accel-Buffering</header> заголовка ответа.206Эту возможность можно запретить с помощью директивы207<link id="proxy_ignore_headers"/>.208</para>209210</directive>211212213<directive name="proxy_buffers">214<syntax><value>число</value> <value>размер</value></syntax>215<default>8 4k|8k</default>216<context>http</context>217<context>server</context>218<context>location</context>219220<para>221Задаёт <value>число</value> и <value>размер</value> буферов222для одного соединения,223в которые будет читаться ответ, получаемый от проксируемого сервера.224По умолчанию размер одного буфера равен размеру страницы.225В зависимости от платформы это или 4K, или 8K.226</para>227228</directive>229230231<directive name="proxy_busy_buffers_size">232<syntax><value>размер</value></syntax>233<default>8k|16k</default>234<context>http</context>235<context>server</context>236<context>location</context>237238<para>239При включённой <link id="proxy_buffering">буферизации</link> ответов240проксируемого сервера, ограничивает суммарный <value>размер</value>241буферов, которые могут быть заняты для отправки ответа клиенту, пока242ответ ещё не прочитан целиком.243Оставшиеся буферы тем временем могут использоваться для чтения ответа244и, при необходимости, буферизации части ответа во временный файл.245По умолчанию <value>размер</value> ограничен величиной двух буферов, заданных246директивами <link id="proxy_buffer_size"/> и <link id="proxy_buffers"/>.247</para>248249</directive>250251252<directive name="proxy_cache">253<syntax><value>зона</value> | <literal>off</literal></syntax>254<default>off</default>255<context>http</context>256<context>server</context>257<context>location</context>258259<para>260Задаёт зону разделяемой памяти, используемой для кэширования.261Одна и та же зона может использоваться в нескольких местах.262В значении параметра можно использовать переменные (1.7.9).263Параметр <literal>off</literal> запрещает кэширование, унаследованное264с предыдущего уровня конфигурации.265</para>266267</directive>268269270<directive name="proxy_cache_background_update">271<syntax><literal>on</literal> | <literal>off</literal></syntax>272<default>off</default>273<context>http</context>274<context>server</context>275<context>location</context>276<appeared-in>1.11.10</appeared-in>277278<para>279Позволяет запустить фоновый подзапрос280для обновления просроченного элемента кэша,281в то время как клиенту возвращается устаревший закэшированный ответ.282Использование устаревшего закэшированного ответа в момент его обновления283должно быть284<link id="proxy_cache_use_stale_updating">разрешено</link>.285</para>286287</directive>288289290<directive name="proxy_cache_bypass">291<syntax><value>строка</value> ...</syntax>292<default/>293<context>http</context>294<context>server</context>295<context>location</context>296297<para>298Задаёт условия, при которых ответ не будет браться из кэша.299Если значение хотя бы одного из строковых параметров непустое и не равно “0”,300то ответ не берётся из кэша:301<example>302proxy_cache_bypass $cookie_nocache $arg_nocache$arg_comment;303proxy_cache_bypass $http_pragma $http_authorization;304</example>305Можно использовать совместно с директивой <link id="proxy_no_cache"/>.306</para>307308</directive>309310311<directive name="proxy_cache_convert_head">312<syntax><literal>on</literal> | <literal>off</literal></syntax>313<default>on</default>314<context>http</context>315<context>server</context>316<context>location</context>317<appeared-in>1.9.7</appeared-in>318319<para>320Разрешает или запрещает преобразование метода “<literal>HEAD</literal>”321в “<literal>GET</literal>” для кэширования.322Если преобразование выключено, то323необходимо, чтобы <link id="proxy_cache_key">ключ кэширования</link>324включал в себя <var>$request_method</var>.325</para>326327</directive>328329330<directive name="proxy_cache_key">331<syntax><value>строка</value></syntax>332<default>$scheme$proxy_host$request_uri</default>333<context>http</context>334<context>server</context>335<context>location</context>336337<para>338Задаёт ключ для кэширования, например,339<example>340proxy_cache_key "$host$request_uri $cookie_user";341</example>342По умолчанию значение директивы близко к строке343<example>344proxy_cache_key $scheme$proxy_host$uri$is_args$args;345</example>346</para>347348</directive>349350351<directive name="proxy_cache_lock">352<syntax><literal>on</literal> | <literal>off</literal></syntax>353<default>off</default>354<context>http</context>355<context>server</context>356<context>location</context>357<appeared-in>1.1.12</appeared-in>358359<para>360Если включено, одновременно только одному запросу будет позволено361заполнить новый элемент кэша, идентифицируемый согласно директиве362<link id="proxy_cache_key"/>, передав запрос на проксируемый сервер.363Остальные запросы этого же элемента будут либо ожидать364появления ответа в кэше, либо освобождения блокировки365этого элемента, в течение времени, заданного директивой366<link id="proxy_cache_lock_timeout"/>.367</para>368369</directive>370371372<directive name="proxy_cache_lock_age">373<syntax><value>время</value></syntax>374<default>5s</default>375<context>http</context>376<context>server</context>377<context>location</context>378<appeared-in>1.7.8</appeared-in>379380<para>381Если последний запрос, переданный на проксируемый сервер382для заполнения нового элемента кэша,383не завершился за указанное <value>время</value>,384на проксируемый сервер может быть передан ещё один запрос.385</para>386387</directive>388389390<directive name="proxy_cache_lock_timeout">391<syntax><value>время</value></syntax>392<default>5s</default>393<context>http</context>394<context>server</context>395<context>location</context>396<appeared-in>1.1.12</appeared-in>397398<para>399Задаёт таймаут для <link id="proxy_cache_lock"/>.400По истечении указанного <value>времени</value>401запрос будет передан на проксируемый сервер,402однако ответ не будет закэширован.403<note>404До версии 1.7.8 такой ответ мог быть закэширован.405</note>406</para>407408</directive>409410411<directive name="proxy_cache_max_range_offset">412<syntax><value>число</value></syntax>413<default/>414<context>http</context>415<context>server</context>416<context>location</context>417<appeared-in>1.11.6</appeared-in>418419<para>420Задаёт смещение в байтах для запросов с указанием диапазона запрашиваемых байт421(byte-range requests).422Если диапазон находится за указанным смещением,423range-запрос будет передан на проксируемый сервер424и ответ не будет закэширован.425</para>426427</directive>428429430<directive name="proxy_cache_methods">431<syntax>432<literal>GET</literal> |433<literal>HEAD</literal> |434<literal>POST</literal>435...</syntax>436<default>GET HEAD</default>437<context>http</context>438<context>server</context>439<context>location</context>440<appeared-in>0.7.59</appeared-in>441442<para>443Если метод запроса клиента указан в этой директиве,444то ответ будет закэширован.445Методы “<literal>GET</literal>” и “<literal>HEAD</literal>” всегда добавляются446в список, но тем не менее рекомендуется перечислять их явно.447См. также директиву <link id="proxy_no_cache"/>.448</para>449450</directive>451452453<directive name="proxy_cache_min_uses">454<syntax><value>число</value></syntax>455<default>1</default>456<context>http</context>457<context>server</context>458<context>location</context>459460<para>461Задаёт <value>число</value> запросов, после которого ответ будет закэширован.462</para>463464</directive>465466467<directive name="proxy_cache_path">468<syntax>469<value>путь</value>470[<literal>levels</literal>=<value>уровни</value>]471[<literal>use_temp_path</literal>=<literal>on</literal>|<literal>off</literal>]472<literal>keys_zone</literal>=<value>имя</value>:<value>размер</value>473[<literal>inactive</literal>=<value>время</value>]474[<literal>max_size</literal>=<value>размер</value>]475[<literal>min_free</literal>=<value>размер</value>]476[<literal>manager_files</literal>=<value>число</value>]477[<literal>manager_sleep</literal>=<value>время</value>]478[<literal>manager_threshold</literal>=<value>время</value>]479[<literal>loader_files</literal>=<value>число</value>]480[<literal>loader_sleep</literal>=<value>время</value>]481[<literal>loader_threshold</literal>=<value>время</value>]482[<literal>purger</literal>=<literal>on</literal>|<literal>off</literal>]483[<literal>purger_files</literal>=<value>число</value>]484[<literal>purger_sleep</literal>=<value>время</value>]485[<literal>purger_threshold</literal>=<value>время</value>]</syntax>486<default/>487<context>http</context>488489<para>490Задаёт путь и другие параметры кэша.491Данные кэша хранятся в файлах.492Именем файла в кэше является результат функции MD5493от <link id="proxy_cache_key">ключа кэширования</link>.494Параметр <literal>levels</literal> задаёт уровни иерархии кэша:495можно задать от 1 до 3 уровней, на каждом уровне допускаются значения 1 или 2.496Например, при использовании497<example>498proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=one:10m;499</example>500имена файлов в кэше будут такого вида:501<example>502/data/nginx/cache/<emphasis>c</emphasis>/<emphasis>29</emphasis>/b7f54b2df7773722d382f4809d650<emphasis>29c</emphasis>503</example>504</para>505506<para>507Кэшируемый ответ сначала записывается во временный файл, а потом этот файл508переименовывается.509Начиная с версии 0.8.9 временные файлы и кэш510могут располагаться на разных файловых системах.511Однако нужно учитывать,512что в этом случае вместо дешёвой операции переименовывания в пределах513одной файловой системы файл копируется с одной файловой системы на другую.514Поэтому лучше, если кэш будет находиться на той же файловой515системе, что и каталог с временными файлами.516Какой из каталогов будет использоваться для временных файлов517определяется параметром <literal>use_temp_path</literal> (1.7.10).518Если параметр не задан или установлен в значение “<literal>on</literal>”,519то будет использоваться каталог, задаваемый директивой520<link id="proxy_temp_path"/> для данного location.521Если параметр установлен в значение “<literal>off</literal>”,522то временные файлы будут располагаться непосредственно в каталоге кэша.523</para>524525<para>526Кроме того, все активные ключи и информация о данных хранятся в зоне527разделяемой памяти, <value>имя</value> и <value>размер</value> которой528задаются параметром <literal>keys_zone</literal>.529Зоны размером в 1 мегабайт достаточно для хранения около 8 тысяч ключей.530<note>531Как часть532<commercial_version>коммерческой подписки</commercial_version>533в зоне разделяемой памяти также хранится расширенная534<link doc="ngx_http_api_module.xml" id="http_caches_">информация</link> о кэше,535поэтому для хранения аналогичного количества ключей необходимо указывать536больший размер зоны.537Например538зоны размером в 1 мегабайт достаточно для хранения около 4 тысяч ключей.539</note>540</para>541542<para>543Если к данным кэша не обращаются в течение времени, заданного параметром544<literal>inactive</literal>, то данные удаляются, независимо от их свежести.545По умолчанию <literal>inactive</literal> равен 10 минутам.546</para>547548<para id="proxy_cache_path_max_size">549Специальный процесс “cache manager” следит за максимальным размером кэша,550заданным параметром <literal>max_size</literal>,551а также за минимальным объёмом свободного места на файловой системе с кэшем,552заданным параметром <literal>min_free</literal> (1.19.1).553При превышении максимального размера кэша554или недостаточном объёме свободного места555процесс удаляет наименее востребованные данные.556Удаление данных происходит итерациями, настраиваемыми параметрами (1.11.5)557<literal>manager_files</literal>,558<literal>manager_threshold</literal> и559<literal>manager_sleep</literal>.560За одну итерацию загружается не более <literal>manager_files</literal>561элементов (по умолчанию 100).562Время работы одной итерации ограничено параметром563<literal>manager_threshold</literal> (по умолчанию 200 миллисекунд).564Между итерациями делается пауза на время, заданное параметром565<literal>manager_sleep</literal> (по умолчанию 50 миллисекунд).566</para>567568<para>569Через минуту после старта активируется специальный процесс “cache loader”,570который загружает в зону кэша информацию о ранее закэшированных данных,571хранящихся на файловой системе.572Загрузка также происходит итерациями.573За одну итерацию загружается не более <literal>loader_files</literal>574элементов (по умолчанию 100).575Кроме того, время работы одной итерации ограничено параметром576<literal>loader_threshold</literal> (по умолчанию 200 миллисекунд).577Между итерациями делается пауза на время, заданное параметром578<literal>loader_sleep</literal> (по умолчанию 50 миллисекунд).579</para>580581<para>582Кроме того,583следующие параметры доступны как часть584<commercial_version>коммерческой подписки</commercial_version>:585</para>586587<para>588<list type="tag">589590<tag-name id="purger">591<literal>purger</literal>=<literal>on</literal>|<literal>off</literal>592</tag-name>593<tag-desc>594Указывает, будут ли записи в кэше, соответствующие595<link id="proxy_cache_purge">маске</link>,596удалены с диска при помощи процесса “cache purger” (1.7.12).597Установка параметра в значение <literal>on</literal>598(по умолчанию <literal>off</literal>)599активирует процесс “cache purger”, который600проходит по всем записям в кэше601и удаляет записи, соответствующие этой маске.602</tag-desc>603604<tag-name id="purger_files">605<literal>purger_files</literal>=<value>число</value>606</tag-name>607<tag-desc>608Задаёт число элементов, которые будут сканироваться за одну итерацию (1.7.12).609По умолчанию <literal>purger_files</literal> равен 10.610</tag-desc>611612<tag-name id="purger_threshold">613<literal>purger_threshold</literal>=<value>время</value>614</tag-name>615<tag-desc>616Задаёт продолжительность одной итерации (1.7.12).617По умолчанию <literal>purger_threshold</literal> равен 50 миллисекундам.618</tag-desc>619620<tag-name id="purger_sleep">621<literal>purger_sleep</literal>=<value>время</value>622</tag-name>623<tag-desc>624Задаёт паузу между итерациями (1.7.12).625По умолчанию <literal>purger_sleep</literal> равен 50 миллисекундам.626</tag-desc>627628</list>629</para>630631<para>632<note>633В версиях 1.7.3, 1.7.7 и 1.11.10 формат заголовка кэша был изменён.634При обновлении на более новую версию nginx635ранее закэшированные ответы будут считаться недействительными.636</note>637</para>638639</directive>640641642<directive name="proxy_cache_purge">643<syntax>строка ...</syntax>644<default/>645<context>http</context>646<context>server</context>647<context>location</context>648<appeared-in>1.5.7</appeared-in>649650<para>651Задаёт условия, при которых запрос будет считаться запросом652на очистку кэша.653Если значение хотя бы одного из строковых параметров непустое и не равно “0”,654то запись в кэше с соответствующим655<link id="proxy_cache_key">ключом кэширования</link> удаляется.656В результате успешной операции возвращается ответ с кодом657<http-status code="204" text="No Content"/>.658</para>659660<para>661Если <link id="proxy_cache_key">ключ кэширования</link>662запроса на очистку заканчивается663звёздочкой (“<literal>*</literal>”), то все записи в кэше, соответствующие664этой маске, будут удалены из кэша.665Тем не менее, эти записи будут оставаться на диске или до момента удаления666из-за <link id="proxy_cache_path">отсутствия обращения к данным</link>,667или до обработки их процессом “<link id="purger">cache purger</link>” (1.7.12),668или до попытки клиента получить к ним доступ.669</para>670671<para>672Пример конфигурации:673<example>674proxy_cache_path /data/nginx/cache keys_zone=cache_zone:10m;675676map $request_method $purge_method {677PURGE 1;678default 0;679}680681server {682...683location / {684proxy_pass http://backend;685proxy_cache cache_zone;686proxy_cache_key $uri;687proxy_cache_purge $purge_method;688}689}690</example>691<note>692Функциональность доступна как часть693<commercial_version>коммерческой подписки</commercial_version>.694</note>695</para>696697</directive>698699700<directive name="proxy_cache_revalidate">701<syntax><literal>on</literal> | <literal>off</literal></syntax>702<default>off</default>703<context>http</context>704<context>server</context>705<context>location</context>706<appeared-in>1.5.7</appeared-in>707708<para>709Разрешает ревалидацию просроченных элементов кэша при помощи710условных запросов с полями заголовка711<header>If-Modified-Since</header> и <header>If-None-Match</header>.712</para>713714</directive>715716717<directive name="proxy_cache_use_stale">718<syntax>719<literal>error</literal> |720<literal>timeout</literal> |721<literal>invalid_header</literal> |722<literal>updating</literal> |723<literal>http_500</literal> |724<literal>http_502</literal> |725<literal>http_503</literal> |726<literal>http_504</literal> |727<literal>http_403</literal> |728<literal>http_404</literal> |729<literal>http_429</literal> |730<literal>off</literal>731...</syntax>732<default>off</default>733<context>http</context>734<context>server</context>735<context>location</context>736737<para>738Определяет, в каких случаях можно использовать739устаревший закэшированный ответ.740Параметры директивы совпадают с параметрами741директивы <link id="proxy_next_upstream"/>.742</para>743744<para>745Параметр <literal>error</literal> также позволяет использовать746устаревший закэшированный ответ при невозможности выбора747проксированного сервера для обработки запроса.748</para>749750<para id="proxy_cache_use_stale_updating">751Кроме того, дополнительный параметр <literal>updating</literal>752разрешает использовать устаревший закэшированный ответ,753если на данный момент он уже обновляется.754Это позволяет минимизировать число обращений к проксированным серверам755при обновлении закэшированных данных.756</para>757758<para>759Использование устаревшего закэшированного ответа760может также быть разрешено непосредственно в заголовке ответа761на определённое количество секунд после того, как ответ устарел (1.11.10).762Такой способ менее приоритетен, чем задание параметров директивы.763<list type="bullet" compact="no">764765<listitem>766Расширение767“<link url="https://datatracker.ietf.org/doc/html/rfc5861#section-3">stale-while-revalidate</link>”768поля заголовка <header>Cache-Control</header> разрешает769использовать устаревший закэшированный ответ,770если на данный момент он уже обновляется.771</listitem>772773<listitem>774Расширение775“<link url="https://datatracker.ietf.org/doc/html/rfc5861#section-4">stale-if-error</link>”776поля заголовка <header>Cache-Control</header> разрешает777использовать устаревший закэшированный ответ в случае ошибки.778</listitem>779780</list>781</para>782783<para>784Чтобы минимизировать число обращений к проксированным серверам при785заполнении нового элемента кэша, можно воспользоваться директивой786<link id="proxy_cache_lock"/>.787</para>788789</directive>790791792<directive name="proxy_cache_valid">793<syntax>[<value>код</value> ...] <value>время</value></syntax>794<default/>795<context>http</context>796<context>server</context>797<context>location</context>798799<para>800Задаёт время кэширования для разных кодов ответа.801Например, директивы802<example>803proxy_cache_valid 200 302 10m;804proxy_cache_valid 404 1m;805</example>806задают время кэширования 10 минут для ответов с кодами 200 и 302807и 1 минуту для ответов с кодом 404.808</para>809810<para>811Если указано только <value>время</value> кэширования,812<example>813proxy_cache_valid 5m;814</example>815то кэшируются только ответы 200, 301 и 302.816</para>817818<para>819Кроме того, можно кэшировать любые ответы с помощью параметра820<literal>any</literal>:821<example>822proxy_cache_valid 200 302 10m;823proxy_cache_valid 301 1h;824proxy_cache_valid any 1m;825</example>826</para>827828<para>829Параметры кэширования могут также быть заданы непосредственно830в заголовке ответа.831Такой способ приоритетнее, чем задание времени кэширования с помощью директивы.832<list type="bullet" compact="no">833834<listitem>835Поле заголовка <header>X-Accel-Expires</header> задаёт время кэширования836ответа в секундах.837Значение 0 запрещает кэшировать ответ.838Если значение начинается с префикса <literal>@</literal>, оно задаёт абсолютное839время в секундах с начала эпохи, до которого ответ может быть закэширован.840</listitem>841842<listitem>843Если в заголовке нет поля <header>X-Accel-Expires</header>,844параметры кэширования определяются по полям заголовка845<header>Expires</header> или <header>Cache-Control</header>.846</listitem>847848<listitem>849Ответ, в заголовке которого есть поле <header>Set-Cookie</header>,850не будет кэшироваться.851</listitem>852853<listitem>854Ответ, в заголовке которого есть поле <header>Vary</header>855со специальным значением “<literal>*</literal>”,856не будет кэшироваться (1.7.7).857Ответ, в заголовке которого есть поле <header>Vary</header>858с другим значением, будет закэширован859с учётом соответствующих полей заголовка запроса (1.7.7).860</listitem>861862</list>863Обработка одного или более из этих полей заголовка может быть отключена864при помощи директивы <link id="proxy_ignore_headers"/>.865</para>866867</directive>868869870<directive name="proxy_connect_timeout">871<syntax><value>время</value></syntax>872<default>60s</default>873<context>http</context>874<context>server</context>875<context>location</context>876877<para>878Задаёт таймаут для установления соединения с проксированным сервером.879Необходимо иметь в виду, что этот таймаут обычно не может превышать 75 секунд.880</para>881882</directive>883884885<directive name="proxy_cookie_domain">886<syntax><literal>off</literal></syntax>887<syntax><value>домен</value> <value>замена</value></syntax>888<default>off</default>889<context>http</context>890<context>server</context>891<context>location</context>892<appeared-in>1.1.15</appeared-in>893894<para>895Задаёт текст, который нужно изменить в атрибуте <literal>domain</literal>896полей <header>Set-Cookie</header> заголовка ответа проксируемого сервера.897Предположим, проксируемый сервер вернул поле заголовка898<header>Set-Cookie</header> с атрибутом899“<literal>domain=localhost</literal>”.900Директива901<example>902proxy_cookie_domain localhost example.org;903</example>904перепишет данный атрибут в виде905“<literal>domain=example.org</literal>”.906</para>907908<para>909Точка в начале строк <value>домен</value> и <value>замена</value>,910а равно как и в атрибуте <literal>domain</literal> игнорируется.911Регистр значения не имеет.912</para>913914<para>915В строках <value>домен</value> и <value>замена</value> можно использовать916переменные:917<example>918proxy_cookie_domain www.$host $host;919</example>920</para>921922<para>923Директиву также можно задать при помощи регулярных выражений.924При этом <value>домен</value> должен начинаться с символа925“<literal>~</literal>”.926Регулярное выражение может содержать именованные и позиционные выделения,927а <value>замена</value> ссылаться на них:928<example>929proxy_cookie_domain ~\.(?P<sl_domain>[-0-9a-z]+\.[a-z]+)$ $sl_domain;930</example>931</para>932933<para>934На одном уровне может быть указано935несколько директив <literal>proxy_cookie_domain</literal>:936<example>937proxy_cookie_domain localhost example.org;938proxy_cookie_domain ~\.([a-z]+\.[a-z]+)$ $1;939</example>940Если к куке могут быть применены несколько директив,941будет выбрана первая из них.942</para>943944<para>945Параметр <literal>off</literal> отменяет действие946унаследованных с предыдущего уровня конфигурации947директив <literal>proxy_cookie_domain</literal>.948</para>949950</directive>951952953<directive name="proxy_cookie_flags">954<syntax>955<literal>off</literal> |956<value>кука</value>957[<value>флаг</value> ...]</syntax>958<default>off</default>959<context>http</context>960<context>server</context>961<context>location</context>962<appeared-in>1.19.3</appeared-in>963964<para>965Задаёт один или несколько флагов для куки.966В качестве <value>куки</value>967можно использовать текст, переменные и их комбинации.968В качестве <value>флага</value>969можно использовать текст, переменные и их комбинации (1.19.8).970Параметры971<literal>secure</literal>,972<literal>httponly</literal>,973<literal>samesite=strict</literal>,974<literal>samesite=lax</literal>,975<literal>samesite=none</literal>976добавляют соответствующие флаги.977Параметры978<literal>nosecure</literal>,979<literal>nohttponly</literal>,980<literal>nosamesite</literal>981удаляют соответствующие флаги.982</para>983984<para>985Куки также можно задать при помощи регулярных выражений.986При этом <value>кука</value> должна начинаться с символа987“<literal>~</literal>”.988</para>989990<para>991На одном уровне конфигурации может быть указано992несколько директив <literal>proxy_cookie_flags</literal>:993<example>994proxy_cookie_flags one httponly;995proxy_cookie_flags ~ nosecure samesite=strict;996</example>997Если к куке могут быть применены несколько директив,998будет выбрана первая из них.999В данном примере флаг <literal>httponly</literal>1000добавляется к куке <literal>one</literal>,1001для остальных кук1002добавляется флаг <literal>samesite=strict</literal> и1003удаляется флаг <literal>secure</literal>.1004</para>10051006<para>1007Параметр <literal>off</literal> отменяет действие всех директив1008<literal>proxy_cookie_flags</literal>1009на данном уровне.1010</para>10111012</directive>101310141015<directive name="proxy_cookie_path">1016<syntax><literal>off</literal></syntax>1017<syntax><value>путь</value> <value>замена</value></syntax>1018<default>off</default>1019<context>http</context>1020<context>server</context>1021<context>location</context>1022<appeared-in>1.1.15</appeared-in>10231024<para>1025Задаёт текст, который нужно изменить в атрибуте <literal>path</literal>1026полей <header>Set-Cookie</header> заголовка ответа проксируемого сервера.1027Предположим, проксируемый сервер вернул поле заголовка1028<header>Set-Cookie</header> с атрибутом1029“<literal>path=/two/some/uri/</literal>”.1030Директива1031<example>1032proxy_cookie_path /two/ /;1033</example>1034перепишет данный атрибут в виде1035“<literal>path=/some/uri/</literal>”.1036</para>10371038<para>1039В строках <value>путь</value> и <value>замена</value> можно использовать1040переменные:1041<example>1042proxy_cookie_path $uri /some$uri;1043</example>1044</para>10451046<para>1047Директиву также можно задать при помощи регулярных выражений.1048При этом <value>путь</value> должен начинаться либо с символа1049“<literal>~</literal>”, если при сравнении следует учитывать регистр символов,1050либо с символов “<literal>~*</literal>”, если регистр символов учитывать1051не нужно.1052Регулярное выражение может содержать именованные и позиционные выделения,1053а <value>замена</value> ссылаться на них:1054<example>1055proxy_cookie_path ~*^/user/([^/]+) /u/$1;1056</example>1057</para>10581059<para>1060На одном уровне может быть указано1061несколько директив <literal>proxy_cookie_path</literal>:1062<example>1063proxy_cookie_path /one/ /;1064proxy_cookie_path / /two/;1065</example>1066Если к куке могут быть применены несколько директив,1067будет выбрана первая из них.1068</para>10691070<para>1071Параметр <literal>off</literal> отменяет действие1072унаследованных с предыдущего уровня конфигурации1073директив <literal>proxy_cookie_path</literal>.1074</para>10751076</directive>107710781079<directive name="proxy_force_ranges">1080<syntax><literal>on</literal> | <literal>off</literal></syntax>1081<default>off</default>1082<context>http</context>1083<context>server</context>1084<context>location</context>1085<appeared-in>1.7.7</appeared-in>10861087<para>1088Включает поддержку диапазонов запрашиваемых байт (byte-range)1089для кэшированных и некэшированных ответов проксируемого сервера1090вне зависимости от наличия поля <header>Accept-Ranges</header>1091в заголовках этих ответов.1092</para>10931094</directive>109510961097<directive name="proxy_headers_hash_bucket_size">1098<syntax><value>размер</value></syntax>1099<default>64</default>1100<context>http</context>1101<context>server</context>1102<context>location</context>11031104<para>1105Задаёт <value>размер</value> корзины для хэш-таблиц,1106используемых директивами <link id="proxy_hide_header"/>1107и <link id="proxy_set_header"/>.1108Подробнее настройка хэш-таблиц обсуждается в отдельном1109<link doc="../hash.xml">документе</link>.1110</para>11111112</directive>111311141115<directive name="proxy_headers_hash_max_size">1116<syntax><value>размер</value></syntax>1117<default>512</default>1118<context>http</context>1119<context>server</context>1120<context>location</context>11211122<para>1123Задаёт максимальный <value>размер</value> хэш-таблиц,1124используемых директивами <link id="proxy_hide_header"/> и1125<link id="proxy_set_header"/>.1126Подробнее настройка хэш-таблиц обсуждается в отдельном1127<link doc="../hash.xml">документе</link>.1128</para>11291130</directive>113111321133<directive name="proxy_hide_header">1134<syntax><value>поле</value></syntax>1135<default/>1136<context>http</context>1137<context>server</context>1138<context>location</context>11391140<para>1141По умолчанию1142nginx не передаёт клиенту поля заголовка <header>Date</header>,1143<header>Server</header>, <header>X-Pad</header> и1144<header>X-Accel-...</header> из ответа проксированного сервера.1145Директива <literal>proxy_hide_header</literal> задаёт дополнительные поля,1146которые не будут передаваться.1147Если же передачу полей нужно разрешить, можно воспользоваться1148директивой <link id="proxy_pass_header"/>.1149</para>11501151</directive>115211531154<directive name="proxy_http_version">1155<syntax>1156<literal>1.0</literal> | <literal>1.1</literal> |1157<literal>2</literal></syntax>1158<default>1.1</default>1159<context>http</context>1160<context>server</context>1161<context>location</context>1162<appeared-in>1.1.4</appeared-in>11631164<para>1165Задаёт версию протокола HTTP для проксирования.1166Начиная с 1.29.7 по умолчанию используется версия 1.1.1167До версии 1.29.7 по умолчанию использовалась версия 1.0.1168Для работы1169<link doc="ngx_http_upstream_module.xml" id="keepalive">постоянных1170соединений</link> и1171<link doc="ngx_http_upstream_module.xml" id="ntlm">проверки подлинности1172NTLM</link> рекомендуется версия 1.1 или 2 (1.29.4).1173<note>1174Для версии 2 необходим1175модуль <link doc="ngx_http_v2_module.xml">ngx_http_v2_module</link>.1176</note>1177</para>11781179</directive>118011811182<directive name="proxy_ignore_client_abort">1183<syntax><literal>on</literal> | <literal>off</literal></syntax>1184<default>off</default>1185<context>http</context>1186<context>server</context>1187<context>location</context>11881189<para>1190Определяет, закрывать ли соединение с проксированным сервером1191в случае, если клиент закрыл соединение, не дождавшись ответа.1192</para>11931194</directive>119511961197<directive name="proxy_ignore_headers">1198<syntax><value>поле</value> ...</syntax>1199<default/>1200<context>http</context>1201<context>server</context>1202<context>location</context>12031204<para>1205Запрещает обработку некоторых полей заголовка из ответа проксированного сервера.1206В директиве можно указать поля <header>X-Accel-Redirect</header>,1207<header>X-Accel-Expires</header>, <header>X-Accel-Limit-Rate</header> (1.1.6),1208<header>X-Accel-Buffering</header> (1.1.6),1209<header>X-Accel-Charset</header> (1.1.6), <header>Expires</header>,1210<header>Cache-Control</header>, <header>Set-Cookie</header> (0.8.44)1211и <header>Vary</header> (1.7.7).1212</para>12131214<para>1215Если не запрещено, обработка этих полей заголовка заключается в следующем:1216<list type="bullet" compact="no">12171218<listitem>1219<header>X-Accel-Expires</header>, <header>Expires</header>,1220<header>Cache-Control</header>, <header>Set-Cookie</header>1221и <header>Vary</header>1222задают параметры <link id="proxy_cache_valid">кэширования</link> ответа;1223</listitem>12241225<listitem>1226<header>X-Accel-Redirect</header> производит1227<link doc="ngx_http_core_module.xml" id="internal">внутреннее1228перенаправление</link> на указанный URI;1229</listitem>12301231<listitem>1232<header>X-Accel-Limit-Rate</header> задаёт1233<link doc="ngx_http_core_module.xml" id="limit_rate">ограничение1234скорости</link> передачи ответа клиенту;1235</listitem>12361237<listitem>1238<header>X-Accel-Buffering</header> включает или выключает1239<link id="proxy_buffering">буферизацию</link> ответа;1240</listitem>12411242<listitem>1243<header>X-Accel-Charset</header> задаёт желаемую1244<link doc="ngx_http_charset_module.xml" id="charset">кодировку</link>1245ответа.1246</listitem>12471248</list>1249</para>12501251</directive>125212531254<directive name="proxy_intercept_errors">1255<syntax><literal>on</literal> | <literal>off</literal></syntax>1256<default>off</default>1257<context>http</context>1258<context>server</context>1259<context>location</context>12601261<para>1262Определяет, передавать ли клиенту проксированные ответы с кодом1263больше либо равным 300,1264или же перехватывать их и перенаправлять на обработку nginx’у с помощью1265директивы <link doc="ngx_http_core_module.xml" id="error_page"/>.1266</para>12671268</directive>126912701271<directive name="proxy_limit_rate">1272<syntax><value>скорость</value></syntax>1273<default>0</default>1274<context>http</context>1275<context>server</context>1276<context>location</context>1277<appeared-in>1.7.7</appeared-in>12781279<para>1280Ограничивает скорость чтения ответа от проксируемого сервера.1281<value>Скорость</value> задаётся в байтах в секунду.1282Значение 0 отключает ограничение скорости.1283Ограничение устанавливается на запрос,1284поэтому, если nginx одновременно1285откроет два соединения к проксируемому серверу,1286суммарная скорость будет вдвое выше заданного ограничения.1287Ограничение работает только в случае, если включена1288<link id="proxy_buffering">буферизация</link> ответов проксируемого сервера.1289В значении параметра можно использовать переменные (1.27.0).1290</para>12911292</directive>129312941295<directive name="proxy_max_temp_file_size">1296<syntax><value>размер</value></syntax>1297<default>1024m</default>1298<context>http</context>1299<context>server</context>1300<context>location</context>13011302<para>1303Если включена <link id="proxy_buffering">буферизация</link> ответов1304проксируемого сервера, и ответ не вмещается целиком в буферы,1305заданные директивами <link id="proxy_buffer_size"/> и1306<link id="proxy_buffers"/>, часть ответа может быть записана во временный файл.1307Эта директива задаёт максимальный <value>размер</value> временного файла.1308Размер данных, сбрасываемых во временный файл за один раз, задаётся1309директивой <link id="proxy_temp_file_write_size"/>.1310</para>13111312<para>1313Значение 0 отключает возможность буферизации ответов во временные файлы.1314</para>13151316<para>1317<note>1318Данное ограничение не распространяется на ответы,1319которые будут <link id="proxy_cache">закэшированы</link>1320или <link id="proxy_store">сохранены</link> на диске.1321</note>1322</para>13231324</directive>132513261327<directive name="proxy_method">1328<syntax><value>метод</value></syntax>1329<default/>1330<context>http</context>1331<context>server</context>1332<context>location</context>13331334<para>1335Задаёт HTTP-<value>метод</value>, который будет использоваться1336в передаваемых на проксируемый сервер запросах вместо метода1337из клиентского запроса.1338В значении параметра допустимо использование переменных (1.11.6).1339</para>13401341</directive>134213431344<directive name="proxy_next_upstream">1345<syntax>1346<literal>error</literal> |1347<literal>timeout</literal> |1348<literal>denied</literal> |1349<literal>invalid_header</literal> |1350<literal>http_500</literal> |1351<literal>http_502</literal> |1352<literal>http_503</literal> |1353<literal>http_504</literal> |1354<literal>http_403</literal> |1355<literal>http_404</literal> |1356<literal>http_429</literal> |1357<literal>non_idempotent</literal> |1358<literal>off</literal>1359...</syntax>1360<default>error timeout</default>1361<context>http</context>1362<context>server</context>1363<context>location</context>13641365<para>1366Определяет, в каких случаях запрос будет передан следующему серверу:1367<list type="tag">13681369<tag-name><literal>error</literal></tag-name>1370<tag-desc>произошла ошибка соединения с сервером, передачи ему запроса или1371чтения заголовка ответа сервера;</tag-desc>13721373<tag-name><literal>timeout</literal></tag-name>1374<tag-desc>произошёл таймаут во время соединения с сервером,1375передачи ему запроса или чтения заголовка ответа сервера;</tag-desc>13761377<tag-name id="denied"><literal>denied</literal></tag-name>1378<tag-desc>сервер <link id="proxy_allow_upstream">отклонил</link>1379соединение (1.29.3);1380<para>1381<note>1382Параметр доступен как часть1383<commercial_version>коммерческой подписки</commercial_version>.1384</note>1385</para>1386</tag-desc>13871388<tag-name id="invalid_header"><literal>invalid_header</literal></tag-name>1389<tag-desc>сервер вернул пустой или неверный ответ;</tag-desc>13901391<tag-name><literal>http_500</literal></tag-name>1392<tag-desc>сервер вернул ответ с кодом 500;</tag-desc>13931394<tag-name><literal>http_502</literal></tag-name>1395<tag-desc>сервер вернул ответ с кодом 502;</tag-desc>13961397<tag-name><literal>http_503</literal></tag-name>1398<tag-desc>сервер вернул ответ с кодом 503;</tag-desc>13991400<tag-name><literal>http_504</literal></tag-name>1401<tag-desc>сервер вернул ответ с кодом 504;</tag-desc>14021403<tag-name><literal>http_403</literal></tag-name>1404<tag-desc>сервер вернул ответ с кодом 403;</tag-desc>14051406<tag-name><literal>http_404</literal></tag-name>1407<tag-desc>сервер вернул ответ с кодом 404;</tag-desc>14081409<tag-name><literal>http_429</literal></tag-name>1410<tag-desc>сервер вернул ответ с кодом 429 (1.11.13);</tag-desc>14111412<tag-name id="non_idempotent"><literal>non_idempotent</literal></tag-name>1413<tag-desc>обычно запросы с1414<link url="https://datatracker.ietf.org/doc/html/rfc7231#section-4.2.2">неидемпотентным</link>1415методом1416(<literal>POST</literal>, <literal>LOCK</literal>, <literal>PATCH</literal>)1417не передаются на другой сервер,1418если запрос серверу группы уже был отправлен (1.9.13);1419включение параметра явно разрешает повторять подобные запросы;1420</tag-desc>142114221423<tag-name><literal>off</literal></tag-name>1424<tag-desc>запрещает передачу запроса следующему серверу.</tag-desc>14251426</list>1427</para>14281429<para>1430Необходимо понимать, что передача запроса следующему серверу возможна1431только при условии, что клиенту ещё ничего не передавалось.1432То есть, если ошибка или таймаут возникли в середине передачи ответа1433клиенту, то исправить это уже невозможно.1434</para>14351436<para>1437Директива также определяет, что считается1438<link doc="ngx_http_upstream_module.xml" id="max_fails">неудачной1439попыткой</link> работы с сервером.1440Случаи <literal>error</literal>, <literal>timeout</literal>,1441<literal>denied</literal> и1442<literal>invalid_header</literal>1443всегда считаются неудачными попытками, даже если они не указаны в директиве.1444Случаи <literal>http_500</literal>, <literal>http_502</literal>,1445<literal>http_503</literal>, <literal>http_504</literal>1446и <literal>http_429</literal>1447считаются неудачными попытками, только если они указаны в директиве.1448Случаи <literal>http_403</literal> и <literal>http_404</literal>1449никогда не считаются неудачными попытками.1450</para>14511452<para>1453Передача запроса следующему серверу может быть ограничена по1454<link id="proxy_next_upstream_tries">количеству попыток</link>1455и по <link id="proxy_next_upstream_timeout">времени</link>.1456</para>14571458</directive>145914601461<directive name="proxy_next_upstream_timeout">1462<syntax><value>время</value></syntax>1463<default>0</default>1464<context>http</context>1465<context>server</context>1466<context>location</context>1467<appeared-in>1.7.5</appeared-in>14681469<para>1470Ограничивает время, в течение которого возможна передача запроса1471<link id="proxy_next_upstream">следующему серверу</link>.1472Значение <literal>0</literal> отключает это ограничение.1473</para>14741475</directive>147614771478<directive name="proxy_next_upstream_tries">1479<syntax><value>число</value></syntax>1480<default>0</default>1481<context>http</context>1482<context>server</context>1483<context>location</context>1484<appeared-in>1.7.5</appeared-in>14851486<para>1487Ограничивает число допустимых попыток для передачи запроса1488<link id="proxy_next_upstream">следующему серверу</link>.1489Значение <literal>0</literal> отключает это ограничение.1490</para>14911492</directive>149314941495<directive name="proxy_no_cache">1496<syntax><value>строка</value> ...</syntax>1497<default/>1498<context>http</context>1499<context>server</context>1500<context>location</context>15011502<para>1503Задаёт условия, при которых ответ не будет сохраняться в кэш.1504Если значение хотя бы одного из строковых параметров непустое и не равно “0”,1505то ответ не будет сохранён:1506<example>1507proxy_no_cache $cookie_nocache $arg_nocache$arg_comment;1508proxy_no_cache $http_pragma $http_authorization;1509</example>1510Можно использовать совместно с директивой <link id="proxy_cache_bypass"/>.1511</para>15121513</directive>151415151516<directive name="proxy_pass">1517<syntax><value>URL</value></syntax>1518<default/>1519<context>location</context>1520<context>if в location</context>1521<context>limit_except</context>15221523<para>1524Задаёт протокол и адрес проксируемого сервера, а также необязательный URI,1525на который должен отображаться location.1526В качестве протокола можно указать1527“<literal>http</literal>” или “<literal>https</literal>”.1528Адрес может быть указан в виде доменного имени или IP-адреса,1529и необязательного порта:1530<example>1531proxy_pass http://localhost:8000/uri/;1532</example>1533или в виде пути UNIX-сокета, который указывается после слова1534“<literal>unix</literal>” и заключается в двоеточия:1535<example>1536proxy_pass http://unix:/tmp/backend.socket:/uri/;1537</example>1538</para>15391540<para>1541Если доменному имени соответствует несколько адресов, то все они будут1542использоваться по очереди (round-robin).1543Кроме того, в качестве адреса можно указать1544<link doc="ngx_http_upstream_module.xml">группу серверов</link>.1545</para>15461547<para>1548В значении параметра можно использовать переменные.1549В этом случае, если адрес указан в виде доменного имени,1550имя ищется среди описанных групп серверов1551и если не найдено, то определяется с помощью1552<link doc="ngx_http_core_module.xml" id="resolver"/>’а.1553</para>15541555<para>1556URI запроса передаётся на сервер так:1557<list type="bullet" compact="no">15581559<listitem>1560Если директива <literal>proxy_pass</literal> указана с URI,1561то при передаче запроса серверу часть1562<link doc="ngx_http_core_module.xml" id="location">нормализованного</link>1563URI запроса, соответствующая location, заменяется на URI,1564указанный в директиве:1565<example>1566location /name/ {1567proxy_pass http://127.0.0.1/remote/;1568}1569</example>1570</listitem>15711572<listitem>1573Если директива <literal>proxy_pass</literal> указана без URI,1574то при обработке первоначального запроса на сервер передаётся1575URI запроса в том же виде, в каком его прислал клиент,1576а при обработке изменённого URI—1577нормализованный URI запроса целиком:1578<example>1579location /some/path/ {1580proxy_pass http://127.0.0.1;1581}1582</example>1583<note>1584До версии 1.1.12,1585если <literal>proxy_pass</literal> указана без URI,1586в ряде случаев при изменении URI на сервер мог передаваться1587URI первоначального запроса вместо изменённого URI.1588</note>1589</listitem>1590</list>1591</para>15921593<para>1594В ряде случаев часть URI запроса, подлежащую замене, выделить невозможно:1595<list type="bullet" compact="no">15961597<listitem>1598Если location задан регулярным выражением,1599а также в именованных location’ах.1600<para>1601В этих случаях1602<literal>proxy_pass</literal> следует указывать без URI.1603</para>1604</listitem>16051606<listitem>1607Если внутри проксируемого location с помощью директивы1608<link doc="ngx_http_rewrite_module.xml" id="rewrite"/> изменяется1609URI, и именно с этой конфигурацией будет обрабатываться запрос1610(<literal>break</literal>):1611<example>1612location /name/ {1613rewrite /name/([^/]+) /users?name=$1 break;1614proxy_pass http://127.0.0.1;1615}1616</example>1617<para>1618В этом случае URI, указанный в директиве, игнорируется, и на сервер1619передаётся изменённый URI запроса целиком.1620</para>1621</listitem>16221623<listitem>1624При использовании переменных в <literal>proxy_pass</literal>:1625<example>1626location /name/ {1627proxy_pass http://127.0.0.1$request_uri;1628}1629</example>1630В этом случае если в директиве указан URI,1631он передаётся на сервер как есть,1632заменяя URI первоначального запроса.1633</listitem>1634</list>1635</para>16361637<para>1638Проксирование <link doc="websocket.xml">WebSocket</link> требует особой1639настройки и поддерживается начиная с версии 1.3.13.1640</para>16411642</directive>164316441645<directive name="proxy_pass_header">1646<syntax><value>поле</value></syntax>1647<default/>1648<context>http</context>1649<context>server</context>1650<context>location</context>16511652<para>1653Разрешает передавать от проксируемого сервера клиенту1654<link id="proxy_hide_header">запрещённые для передачи</link> поля заголовка.1655</para>16561657</directive>165816591660<directive name="proxy_pass_request_body">1661<syntax><literal>on</literal> | <literal>off</literal></syntax>1662<default>on</default>1663<context>http</context>1664<context>server</context>1665<context>location</context>16661667<para>1668Позволяет запретить передачу исходного тела запроса1669на проксируемый сервер.1670<example>1671location /x-accel-redirect-here/ {1672proxy_method GET;1673proxy_pass_request_body off;1674proxy_set_header Content-Length "";16751676proxy_pass ...1677}1678</example>1679См. также директивы <link id="proxy_set_header"/> и1680<link id="proxy_pass_request_headers"/>.1681</para>16821683</directive>168416851686<directive name="proxy_pass_request_headers">1687<syntax><literal>on</literal> | <literal>off</literal></syntax>1688<default>on</default>1689<context>http</context>1690<context>server</context>1691<context>location</context>16921693<para>1694Позволяет запретить передачу полей заголовка исходного запроса на1695проксируемый сервер.1696<example>1697location /x-accel-redirect-here/ {1698proxy_method GET;1699proxy_pass_request_headers off;1700proxy_pass_request_body off;17011702proxy_pass ...1703}1704</example>1705См. также директивы <link id="proxy_set_header"/> и1706<link id="proxy_pass_request_body"/>.1707</para>17081709</directive>171017111712<directive name="proxy_pass_trailers">1713<syntax><literal>on</literal> | <literal>off</literal></syntax>1714<default>off</default>1715<context>http</context>1716<context>server</context>1717<context>location</context>1718<appeared-in>1.27.2</appeared-in>17191720<para>1721Разрешает передавать от проксируемого сервера клиенту поля заголовка1722в конце ответа.1723</para>17241725<para>1726<note>1727Использование заголовков в конце ответа включается1728<link url="https://datatracker.ietf.org/doc/html/rfc9110#section-6.5.1">явным образом</link>:1729</note>1730<example>1731location / {1732# proxy_http_version 1.1; # версии до 1.29.71733proxy_set_header Connection "te";1734proxy_set_header TE "trailers";1735proxy_pass_trailers on;17361737proxy_pass ...1738}1739</example>1740</para>17411742<para>1743<note>1744Заголовки в конце ответа, полученные от1745вышестоящего сервера, передаются клиенту как есть, без интерпретации.1746</note>1747</para>17481749</directive>175017511752<directive name="proxy_read_timeout">1753<syntax><value>время</value></syntax>1754<default>60s</default>1755<context>http</context>1756<context>server</context>1757<context>location</context>17581759<para>1760Задаёт таймаут при чтении ответа проксированного сервера.1761Таймаут устанавливается не на всю передачу ответа,1762а только между двумя операциями чтения.1763Если по истечении этого времени проксируемый сервер ничего не передаст,1764соединение закрывается.1765</para>17661767</directive>176817691770<directive name="proxy_redirect">1771<syntax><literal>default</literal></syntax>1772<syntax><literal>off</literal></syntax>1773<syntax><value>перенаправление</value> <value>замена</value></syntax>1774<default>default</default>1775<context>http</context>1776<context>server</context>1777<context>location</context>17781779<para>1780Задаёт текст, который нужно изменить в полях заголовка1781<header>Location</header> и <header>Refresh</header> в ответе1782проксируемого сервера.1783Предположим, проксируемый сервер вернул поле заголовка1784“<literal>Location: http://localhost:8000/two/some/uri/</literal>”.1785Директива1786<example>1787proxy_redirect http://localhost:8000/two/ http://frontend/one/;1788</example>1789перепишет эту строку в виде1790“<literal>Location: http://frontend/one/some/uri/</literal>”.1791</para>17921793<para>1794В заменяемой строке можно не указывать имя сервера:1795<example>1796proxy_redirect http://localhost:8000/two/ /;1797</example>1798тогда будут подставлены основное имя сервера и порт, если он отличен от 80.1799</para>18001801<para>1802Стандартная замена, задаваемая параметром <literal>default</literal>,1803использует параметры директив1804<link doc="ngx_http_core_module.xml" id="location"/> и1805<link id="proxy_pass"/>.1806Поэтому две нижеприведённые конфигурации одинаковы:1807<example>1808location /one/ {1809proxy_pass http://upstream:port/two/;1810proxy_redirect default;1811</example>18121813<example>1814location /one/ {1815proxy_pass http://upstream:port/two/;1816proxy_redirect http://upstream:port/two/ /one/;1817</example>1818Параметр <literal>default</literal> недопустим, если в <link id="proxy_pass"/>1819используются переменные.1820</para>18211822<para>1823В строке <value>замена</value> можно использовать переменные:1824<example>1825proxy_redirect http://localhost:8000/ http://$host:$server_port/;1826</example>1827</para>18281829<para>1830В строке <value>перенаправление</value> тоже можно использовать (1.1.11)1831переменные:1832<example>1833proxy_redirect http://$proxy_host:8000/ /;1834</example>1835</para>18361837<para>1838Директиву также можно задать (1.1.11) при помощи регулярных выражений.1839При этом <value>перенаправление</value> должно начинаться либо с символа1840“<literal>~</literal>”, если при сравнении следует учитывать регистр символов,1841либо с символов “<literal>~*</literal>”, если регистр символов учитывать1842не нужно.1843Регулярное выражение может содержать именованные и позиционные выделения,1844а <value>замена</value> ссылаться на них:1845<example>1846proxy_redirect ~^(http://[^:]+):\d+(/.+)$ $1$2;1847proxy_redirect ~*/user/([^/]+)/(.+)$ http://$1.example.com/$2;1848</example>1849</para>18501851<para>1852На одном уровне может быть указано1853несколько директив <literal>proxy_redirect</literal>:1854<example>1855proxy_redirect default;1856proxy_redirect http://localhost:8000/ /;1857proxy_redirect http://www.example.com/ /;1858</example>1859Если к полям заголовка в ответе проксируемого сервера1860могут быть применены несколько директив,1861будет выбрана первая из них.1862</para>18631864<para>1865Параметр <literal>off</literal> отменяет действие1866унаследованных с предыдущего уровня конфигурации1867директив <literal>proxy_redirect</literal>.1868</para>18691870<para>1871С помощью этой директивы можно также добавлять имя хоста к относительным1872перенаправлениям, выдаваемым проксируемым сервером:1873<example>1874proxy_redirect / /;1875</example>1876</para>18771878</directive>187918801881<directive name="proxy_request_buffering">1882<syntax><literal>on</literal> | <literal>off</literal></syntax>1883<default>on</default>1884<context>http</context>1885<context>server</context>1886<context>location</context>1887<appeared-in>1.7.11</appeared-in>18881889<para>1890Разрешает или запрещает использовать буферизацию тела запроса клиента.1891</para>18921893<para>1894Если буферизация включена, то тело запроса полностью1895<link doc="ngx_http_core_module.xml" id="client_body_buffer_size">читается</link>1896от клиента перед отправкой запроса на проксируемый сервер.1897</para>18981899<para>1900Если буферизация выключена, то тело запроса отправляется1901на проксируемый сервер сразу же по мере его поступления.1902В этом случае запрос не может быть передан1903<link id="proxy_next_upstream">следующему серверу</link>,1904если nginx уже начал отправку тела запроса.1905</para>19061907<para>1908Если для отправки тела исходного запроса используется HTTP/1.11909и передача данных частями (chunked transfer encoding),1910то тело запроса буферизуется независимо от значения директивы,1911если для проксирования также не1912<link id="proxy_http_version">включён</link> HTTP/1.1 или HTTP/2.1913</para>19141915</directive>191619171918<directive name="proxy_request_dynamic">1919<syntax><literal>on</literal> | <literal>off</literal></syntax>1920<default>off</default>1921<context>http</context>1922<context>server</context>1923<context>location</context>1924<appeared-in>1.29.3</appeared-in>19251926<para>1927Разрешает или запрещает создание отдельного экземпляра запроса1928для каждого проксируемого сервера.1929По умолчанию для всех проксируемых серверов используется единый запрос.1930Если разрешено, то для каждого сервера создаётся отдельный экземпляр запроса,1931что позволяет кастомизировать запрос для конкретного сервера.1932Например каждому серверу можно назначить своё значение1933поля <header>Host</header> в заголовке запроса:1934<example>1935proxy_request_dynamic on;1936proxy_set_header Host $upstream_last_server_name;1937</example>1938</para>19391940<para>1941<note>1942Директива доступна как часть1943<commercial_version>коммерческой подписки</commercial_version>.1944</note>1945</para>19461947</directive>194819491950<directive name="proxy_send_lowat">1951<syntax><value>размер</value></syntax>1952<default>0</default>1953<context>http</context>1954<context>server</context>1955<context>location</context>19561957<para>1958При установке директивы в ненулевое значение nginx будет пытаться минимизировать1959число операций отправки на исходящих соединениях с проксируемым сервером либо1960при помощи флага <c-def>NOTE_LOWAT</c-def> метода1961<link doc="../events.xml" id="kqueue"/>,1962либо при помощи параметра сокета <c-def>SO_SNDLOWAT</c-def>,1963с указанным <value>размером</value>.1964</para>19651966<para>1967Эта директива игнорируется на Linux, Solaris и Windows.1968</para>19691970</directive>197119721973<directive name="proxy_send_timeout">1974<syntax><value>время</value></syntax>1975<default>60s</default>1976<context>http</context>1977<context>server</context>1978<context>location</context>19791980<para>1981Задаёт таймаут при передаче запроса проксированному серверу.1982Таймаут устанавливается не на всю передачу запроса,1983а только между двумя операциями записи.1984Если по истечении этого времени проксируемый сервер не примет новых данных,1985соединение закрывается.1986</para>19871988</directive>198919901991<directive name="proxy_set_body">1992<syntax><value>значение</value></syntax>1993<default/>1994<context>http</context>1995<context>server</context>1996<context>location</context>19971998<para>1999Позволяет переопределить тело запроса, передаваемое на проксируемый сервер.2000В качестве значения можно использовать текст, переменные и их комбинации.2001</para>20022003</directive>200420052006<directive name="proxy_set_header">2007<syntax><value>поле</value> <value>значение</value></syntax>2008<default>Host $proxy_host</default>2009<default>Connection close</default>2010<context>http</context>2011<context>server</context>2012<context>location</context>20132014<para>2015Позволяет переопределять или добавлять поля заголовка запроса,2016<link id="proxy_pass_request_headers">передаваемые</link> проксируемому серверу.2017В качестве значения можно использовать текст, переменные и их комбинации.2018Директивы наследуются с предыдущего уровня конфигурации при условии, что2019на данном уровне не описаны свои директивы <literal>proxy_set_header</literal>.2020</para>20212022<para>2023По умолчанию поля заголовка2024<header>Host</header>2025и2026<header>Connection</header>2027исходного запроса не передаются на проксируемый сервер.2028Если для проксирования2029<link id="proxy_http_version">включён</link> HTTP/1.0 или HTTP/1.1,2030эти поля переопределяются:2031<example>2032proxy_set_header Host $proxy_host;2033proxy_set_header Connection close;2034</example>2035Для HTTP/2 по умолчанию передаётся поле псевдо-заголовка2036<header>:authority</header>2037со значением2038<value>$proxy_host</value>,2039при условии что поле заголовка <header>Host</header> не задано явно.2040</para>20412042<para>2043Если включено кэширование, поля заголовка2044<header>If-Modified-Since</header>,2045<header>If-Unmodified-Since</header>,2046<header>If-None-Match</header>,2047<header>If-Match</header>,2048<header>Range</header>2049и2050<header>If-Range</header>2051исходного запроса не передаются на проксируемый сервер.2052</para>20532054<para>2055Неизменённое поле заголовка запроса <header>Host</header> можно передать так:2056<example>2057proxy_set_header Host $http_host;2058</example>2059</para>20602061<para>2062Однако, если это поле отсутствует в заголовке запроса клиента, то ничего2063передаваться не будет.2064В этом случае лучше воспользоваться переменной <var>$host</var>—её2065значение равно имени сервера в поле <header>Host</header>2066заголовка запроса, или же основному имени сервера, если поля нет:2067<example>2068proxy_set_header Host $host;2069</example>2070</para>20712072<para>2073Кроме того, можно передать имя сервера вместе с портом проксируемого сервера:2074<example>2075proxy_set_header Host $host:$proxy_port;2076</example>2077</para>20782079<para>2080Если значение поля заголовка — пустая строка, то поле вообще2081не будет передаваться проксируемому серверу:2082<example>2083proxy_set_header Accept-Encoding "";2084</example>2085</para>20862087</directive>208820892090<directive name="proxy_socket_keepalive">2091<syntax><literal>on</literal> | <literal>off</literal></syntax>2092<default>off</default>2093<context>http</context>2094<context>server</context>2095<context>location</context>2096<appeared-in>1.15.6</appeared-in>20972098<para>2099Конфигурирует поведение “TCP keepalive”2100для исходящих соединений к проксируемому серверу.2101По умолчанию для сокета действуют настройки операционной системы.2102Если указано значение “<literal>on</literal>”, то2103для сокета включается параметр <c-def>SO_KEEPALIVE</c-def>.2104</para>21052106</directive>210721082109<directive name="proxy_ssl_certificate">2110<syntax><value>файл</value></syntax>2111<default/>2112<context>http</context>2113<context>server</context>2114<context>location</context>2115<appeared-in>1.7.8</appeared-in>21162117<para>2118Задаёт <value>файл</value> с сертификатом в формате PEM2119для аутентификации на проксируемом HTTPS-сервере.2120</para>21212122<para id="proxy_ssl_certificate_variables">2123Начиная с версии 1.21.0 в имени файла можно использовать переменные.2124</para>21252126</directive>212721282129<directive name="proxy_ssl_certificate_cache">2130<syntax><literal>off</literal></syntax>2131<syntax>2132<literal>max</literal>=<value>N</value>2133[<literal>inactive</literal>=<value>время</value>]2134[<literal>valid</literal>=<value>время</value>]</syntax>2135<default>off</default>2136<context>http</context>2137<context>server</context>2138<context>location</context>2139<appeared-in>1.27.4</appeared-in>21402141<para>2142Задаёт кэш, в котором могут храниться2143<link id="proxy_ssl_certificate">SSL-сертификаты</link> и2144<link id="proxy_ssl_certificate_key">секретные ключи</link>,2145полученные из <link id="proxy_ssl_certificate_key_variables">переменных</link>.2146</para>21472148<para>2149У директивы есть следующие параметры:2150<list type="tag">21512152<tag-name id="proxy_ssl_certificate_cache_max">2153<literal>max</literal>2154</tag-name>2155<tag-desc>2156задаёт максимальное число элементов в кэше;2157при переполнении кэша удаляются наименее востребованные элементы (LRU);2158</tag-desc>21592160<tag-name id="proxy_ssl_certificate_cache_inactive">2161<literal>inactive</literal>2162</tag-name>2163<tag-desc>2164задаёт время, после которого элемент кэша удаляется,2165если к нему не было обращений в течение этого времени;2166по умолчанию 10 секунд;2167</tag-desc>21682169<tag-name id="proxy_ssl_certificate_cache_valid">2170<literal>valid</literal>2171</tag-name>2172<tag-desc>2173задает время, в течение которого2174элемент кэша считается действительным2175и может быть повторно использован,2176по умолчанию 60 секунд.2177По завершении этого времени сертификат будет обновлён или повторно проверен;2178</tag-desc>21792180<tag-name id="proxy_ssl_certificate_cache_off">2181<literal>off</literal>2182</tag-name>2183<tag-desc>2184запрещает кэш.2185</tag-desc>21862187</list>2188</para>21892190<para>2191Пример:2192<example>2193proxy_ssl_certificate $proxy_ssl_server_name.crt;2194proxy_ssl_certificate_key $proxy_ssl_server_name.key;2195proxy_ssl_certificate_cache max=1000 inactive=20s valid=1m;2196</example>2197</para>21982199</directive>220022012202<directive name="proxy_ssl_certificate_key">2203<syntax><value>файл</value></syntax>2204<default/>2205<context>http</context>2206<context>server</context>2207<context>location</context>2208<appeared-in>1.7.8</appeared-in>22092210<para>2211Задаёт <value>файл</value> с секретным ключом в формате PEM2212для аутентификации на проксируемом HTTPS-сервере.2213</para>22142215<para>2216Вместо <value>файла</value> можно указать значение2217<literal>engine</literal>:<value>имя</value>:<value>id</value> (1.7.9),2218которое загружает ключ с указанным <value>id</value>2219из OpenSSL engine с заданным <value>именем</value>.2220</para>22212222<para>2223Вместо <value>файла</value> можно указать значение2224<literal>store</literal>:<value>схема</value>:<value>id</value> (1.29.0),2225которое используется для загрузки ключа с указанным <value>id</value>2226и зарегистрированной провайдером OpenSSL <value>схемой</value> URI, такой как2227<link url="https://datatracker.ietf.org/doc/html/rfc7512"><literal>pkcs11</literal></link>.2228</para>22292230<para id="proxy_ssl_certificate_key_variables">2231Начиная с версии 1.21.0 в имени файла можно использовать переменные.2232</para>22332234</directive>223522362237<directive name="proxy_ssl_ciphers">2238<syntax><value>шифры</value></syntax>2239<default>DEFAULT</default>2240<context>http</context>2241<context>server</context>2242<context>location</context>2243<appeared-in>1.5.6</appeared-in>22442245<para>2246Описывает разрешённые шифры для запросов к проксируемому HTTPS-серверу.2247Шифры задаются в формате, поддерживаемом библиотекой OpenSSL.2248</para>22492250<para>2251Полный список можно посмотреть с помощью команды2252“<command>openssl ciphers</command>”.2253</para>22542255</directive>225622572258<directive name="proxy_ssl_conf_command">2259<syntax><value>имя</value> <value>значение</value></syntax>2260<default/>2261<context>http</context>2262<context>server</context>2263<context>location</context>2264<appeared-in>1.19.4</appeared-in>22652266<para>2267Задаёт произвольные конфигурационные2268<link url="https://www.openssl.org/docs/man1.1.1/man3/SSL_CONF_cmd.html">команды</link>2269OpenSSL2270при установлении соединения с проксируемым HTTPS-сервером.2271<note>2272Директива поддерживается при использовании OpenSSL 1.0.2 и выше.2273</note>2274</para>22752276<para>2277На одном уровне может быть указано2278несколько директив <literal>proxy_ssl_conf_command</literal>.2279Директивы наследуются с предыдущего уровня конфигурации при условии, что2280на данном уровне не описаны2281свои директивы <literal>proxy_ssl_conf_command</literal>.2282</para>22832284<para>2285<note>2286Следует учитывать, что изменение настроек OpenSSL напрямую2287может привести к неожиданному поведению.2288</note>2289</para>22902291</directive>229222932294<directive name="proxy_ssl_crl">2295<syntax><value>файл</value></syntax>2296<default/>2297<context>http</context>2298<context>server</context>2299<context>location</context>2300<appeared-in>1.7.0</appeared-in>23012302<para>2303Указывает <value>файл</value> с отозванными сертификатами (CRL)2304в формате PEM, используемыми при <link id="proxy_ssl_verify">проверке</link>2305сертификата проксируемого HTTPS-сервера.2306Если используются промежуточные сертификаты,2307их списки CRL должны находиться в этом же файле.2308</para>23092310</directive>231123122313<directive name="proxy_ssl_key_log">2314<syntax>путь</syntax>2315<default/>2316<context>http</context>2317<context>server</context>2318<context>location</context>2319<appeared-in>1.27.2</appeared-in>23202321<para>2322Включает логирование SSL-ключей соединений с проксируемым HTTPS-сервером2323и указывает путь к лог-файлу ключей.2324Ключи записываются в формате2325<link url="https://datatracker.ietf.org/doc/html/draft-ietf-tls-keylogfile">SSLKEYLOGFILE</link>2326совместимом с Wireshark.2327</para>23282329<para>2330<note>2331Директива доступна как часть2332<commercial_version>коммерческой подписки</commercial_version>.2333</note>2334</para>23352336</directive>233723382339<directive name="proxy_ssl_name">2340<syntax><value>имя</value></syntax>2341<default>$proxy_host</default>2342<context>http</context>2343<context>server</context>2344<context>location</context>2345<appeared-in>1.7.0</appeared-in>23462347<para>2348Позволяет переопределить имя сервера, используемое при2349<link id="proxy_ssl_verify">проверке</link>2350сертификата проксируемого HTTPS-сервера, а также для2351<link id="proxy_ssl_server_name">передачи его через SNI</link>2352при установлении соединения с проксируемым HTTPS-сервером.2353</para>23542355<para>2356По умолчанию используется имя хоста из URL’а, заданного2357директивой <link id="proxy_pass"/>.2358</para>23592360</directive>236123622363<directive name="proxy_ssl_password_file">2364<syntax><value>файл</value></syntax>2365<default/>2366<context>http</context>2367<context>server</context>2368<context>location</context>2369<appeared-in>1.7.8</appeared-in>23702371<para>2372Задаёт <value>файл</value> с паролями от2373<link id="proxy_ssl_certificate_key">секретных ключей</link>,2374где каждый пароль указан на отдельной строке.2375Пароли применяются по очереди в момент загрузки ключа.2376</para>23772378</directive>237923802381<directive name="proxy_ssl_protocols">2382<syntax>2383[<literal>SSLv2</literal>]2384[<literal>SSLv3</literal>]2385[<literal>TLSv1</literal>]2386[<literal>TLSv1.1</literal>]2387[<literal>TLSv1.2</literal>]2388[<literal>TLSv1.3</literal>]</syntax>2389<default>TLSv1.2 TLSv1.3</default>2390<context>http</context>2391<context>server</context>2392<context>location</context>2393<appeared-in>1.5.6</appeared-in>23942395<para>2396Разрешает указанные протоколы для запросов к проксируемому HTTPS-серверу.2397</para>23982399<para>2400<note>2401Параметр <literal>TLSv1.3</literal> используется по умолчанию2402начиная с 1.23.4.2403</note>2404</para>24052406</directive>240724082409<directive name="proxy_ssl_server_name">2410<syntax><literal>on</literal> | <literal>off</literal></syntax>2411<default>off</default>2412<context>http</context>2413<context>server</context>2414<context>location</context>2415<appeared-in>1.7.0</appeared-in>24162417<para>2418Разрешает или запрещает передачу имени сервера через2419<link url="http://en.wikipedia.org/wiki/Server_Name_Indication">расширение2420Server Name Indication протокола TLS</link> (SNI, RFC 6066)2421при установлении соединения с проксируемым HTTPS-сервером.2422</para>24232424</directive>242524262427<directive name="proxy_ssl_session_reuse">2428<syntax><literal>on</literal> | <literal>off</literal></syntax>2429<default>on</default>2430<context>http</context>2431<context>server</context>2432<context>location</context>24332434<para>2435Определяет, использовать ли повторно SSL-сессии при2436работе с проксированным сервером.2437Если в логах появляются ошибки2438“<literal>digest check failed</literal>”,2439то можно попробовать выключить2440повторное использование сессий.2441</para>24422443</directive>244424452446<directive name="proxy_ssl_trusted_certificate">2447<syntax><value>файл</value></syntax>2448<default/>2449<context>http</context>2450<context>server</context>2451<context>location</context>2452<appeared-in>1.7.0</appeared-in>24532454<para>2455Задаёт <value>файл</value> с доверенными сертификатами CA в формате PEM,2456используемыми при <link id="proxy_ssl_verify">проверке</link>2457сертификата проксируемого HTTPS-сервера.2458</para>24592460</directive>246124622463<directive name="proxy_ssl_verify">2464<syntax><literal>on</literal> | <literal>off</literal></syntax>2465<default>off</default>2466<context>http</context>2467<context>server</context>2468<context>location</context>2469<appeared-in>1.7.0</appeared-in>24702471<para>2472Разрешает или запрещает проверку сертификата проксируемого HTTPS-сервера.2473</para>24742475</directive>247624772478<directive name="proxy_ssl_verify_depth">2479<syntax><value>число</value></syntax>2480<default>1</default>2481<context>http</context>2482<context>server</context>2483<context>location</context>2484<appeared-in>1.7.0</appeared-in>24852486<para>2487Устанавливает глубину проверки в цепочке сертификатов2488проксируемого HTTPS-сервера.2489</para>24902491</directive>249224932494<directive name="proxy_store">2495<syntax>2496<literal>on</literal> |2497<literal>off</literal> |2498<value>строка</value></syntax>2499<default>off</default>2500<context>http</context>2501<context>server</context>2502<context>location</context>25032504<para>2505Разрешает сохранение на диск файлов.2506Параметр <literal>on</literal> сохраняет файлы в соответствии с путями,2507указанными в директивах2508<link doc="ngx_http_core_module.xml" id="alias"/> или2509<link doc="ngx_http_core_module.xml" id="root"/>.2510Параметр <literal>off</literal> запрещает сохранение файлов.2511Кроме того, имя файла можно задать явно с помощью строки с переменными:2512<example>2513proxy_store /data/www$original_uri;2514</example>2515</para>25162517<para>2518Время изменения файлов выставляется согласно полученному полю2519<header>Last-Modified</header> в заголовке ответа.2520Ответ сначала записывается во временный файл, а потом этот файл2521переименовывается.2522Начиная с версии 0.8.9 временный файл и постоянное место хранения ответа2523могут располагаться на разных файловых системах.2524Однако нужно учитывать,2525что в этом случае вместо дешёвой операции переименовывания в пределах2526одной файловой системы файл копируется с одной файловой системы на другую.2527Поэтому лучше, если сохраняемые файлы будут находиться на той же файловой2528системе, что и каталог с временными файлами, задаваемый директивой2529<link id="proxy_temp_path"/> для данного location.2530</para>25312532<para>2533Директиву можно использовать для создания локальных копий статических2534неизменяемых файлов, например, так:2535<example>2536location /images/ {2537root /data/www;2538error_page 404 = /fetch$uri;2539}25402541location /fetch/ {2542internal;25432544proxy_pass http://backend/;2545proxy_store on;2546proxy_store_access user:rw group:rw all:r;2547proxy_temp_path /data/temp;25482549alias /data/www/;2550}2551</example>2552</para>25532554<para>2555или так:2556<example>2557location /images/ {2558root /data/www;2559error_page 404 = @fetch;2560}25612562location @fetch {2563internal;25642565proxy_pass http://backend;2566proxy_store on;2567proxy_store_access user:rw group:rw all:r;2568proxy_temp_path /data/temp;25692570root /data/www;2571}2572</example>2573</para>25742575</directive>257625772578<directive name="proxy_store_access">2579<syntax><value>пользователи</value>:<value>права</value> ...</syntax>2580<default>user:rw</default>2581<context>http</context>2582<context>server</context>2583<context>location</context>25842585<para>2586Задаёт права доступа для создаваемых файлов и каталогов, например,2587<example>2588proxy_store_access user:rw group:rw all:r;2589</example>2590</para>25912592<para>2593Если заданы какие-либо права для <literal>group</literal> или2594<literal>all</literal>, то права для <literal>user</literal>2595указывать необязательно:2596<example>2597proxy_store_access group:rw all:r;2598</example>2599</para>26002601</directive>260226032604<directive name="proxy_temp_file_write_size">2605<syntax><value>размер</value></syntax>2606<default>8k|16k</default>2607<context>http</context>2608<context>server</context>2609<context>location</context>26102611<para>2612Ограничивает <value>размер</value> данных, сбрасываемых во временный файл2613за один раз, при включённой буферизации ответов проксируемого сервера2614во временные файлы.2615По умолчанию <value>размер</value> ограничен двумя буферами, заданными2616директивами <link id="proxy_buffer_size"/> и <link id="proxy_buffers"/>.2617Максимальный размер временного файла задаётся директивой2618<link id="proxy_max_temp_file_size"/>.2619</para>26202621</directive>262226232624<directive name="proxy_temp_path">2625<syntax>2626<value>путь</value>2627[<value>уровень1</value>2628[<value>уровень2</value>2629[<value>уровень3</value>]]]</syntax>2630<default>proxy_temp</default>2631<context>http</context>2632<context>server</context>2633<context>location</context>26342635<para>2636Задаёт имя каталога для хранения временных файлов с данными,2637полученными от проксируемых серверов.2638В каталоге может использоваться иерархия подкаталогов до трёх уровней.2639Например, при такой конфигурации2640<example>2641proxy_temp_path /spool/nginx/proxy_temp 1 2;2642</example>2643временный файл будет следующего вида:2644<example>2645/spool/nginx/proxy_temp/<emphasis>7</emphasis>/<emphasis>45</emphasis>/00000123<emphasis>457</emphasis>2646</example>2647</para>26482649<para>2650См. также параметр <literal>use_temp_path</literal> директивы2651<link id="proxy_cache_path"/>.2652</para>26532654</directive>26552656</section>265726582659<section id="variables" name="Встроенные переменные">26602661<para>2662В модуле <literal>ngx_http_proxy_module</literal> есть встроенные переменные,2663которые можно использовать для формирования заголовков с помощью директивы2664<link id="proxy_set_header"/>:2665<list type="tag">26662667<tag-name id="var_proxy_host"><var>$proxy_host</var></tag-name>2668<tag-desc>имя и порт проксируемого сервера, как указано в2669директиве <link id="proxy_pass"/>;</tag-desc>26702671<tag-name id="var_proxy_port"><var>$proxy_port</var></tag-name>2672<tag-desc>порт проксируемого сервера, как указано в2673директиве <link id="proxy_pass"/>, или стандартный порт протокола;</tag-desc>26742675<tag-name id="var_proxy_add_x_forwarded_for">2676<var>$proxy_add_x_forwarded_for</var></tag-name>2677<tag-desc>поле заголовка запроса клиента <header>X-Forwarded-For</header>2678и добавленная к нему через запятую переменная <var>$remote_addr</var>.2679Если же поля <header>X-Forwarded-For</header> в заголовке запроса клиента нет,2680то переменная <var>$proxy_add_x_forwarded_for</var>2681равна переменной <var>$remote_addr</var>.</tag-desc>2682</list>2683</para>26842685</section>26862687</module>268826892690