Path: blob/main/xml/ru/docs/stream/ngx_stream_proxy_module.xml
1 views
<?xml version="1.0"?>12<!--3Copyright (C) Nginx, Inc.4-->56<!DOCTYPE module SYSTEM "../../../../dtd/module.dtd">78<module name="Модуль ngx_stream_proxy_module"9link="/ru/docs/stream/ngx_stream_proxy_module.html"10lang="ru"11rev="38">1213<section id="summary">1415<para>16Модуль <literal>ngx_stream_proxy_module</literal> (1.9.0) позволяет проксировать17потоки данных по TCP, UDP (1.9.13) и UNIX-сокетам.18</para>1920</section>212223<section id="example" name="Пример конфигурации">2425<para>26<example>27server {28listen 127.0.0.1:12345;29proxy_pass 127.0.0.1:8080;30}3132server {33listen 12345;34proxy_connect_timeout 1s;35proxy_timeout 1m;36proxy_pass example.com:12345;37}3839server {40listen 53 udp reuseport;41proxy_timeout 20s;42proxy_pass dns.example.com:53;43}4445server {46listen [::1]:12345;47proxy_pass unix:/tmp/stream.socket;48}49</example>50</para>5152</section>535455<section id="directives" name="Директивы">5657<directive name="proxy_bind">58<syntax>59<value>address</value>60[<literal>transparent</literal>] |61<literal>off</literal></syntax>62<default/>63<context>stream</context>64<context>server</context>65<appeared-in>1.9.2</appeared-in>6667<para>68Задаёт локальный IP-<value>адрес</value>, который будет использоваться в69исходящих соединениях с проксируемым сервером.70В значении параметра допустимо использование переменных (1.11.2).71Специальное значение <literal>off</literal> отменяет действие72унаследованной с предыдущего уровня конфигурации73директивы <literal>proxy_bind</literal>, позволяя системе74самостоятельно выбирать локальный IP-адрес.75</para>7677<para id="proxy_bind_transparent">78Параметр <literal>transparent</literal> (1.11.0) позволяет79задать нелокальный IP-aдрес, который будет использоваться в80исходящих соединениях с проксируемым сервером,81например, реальный IP-адрес клиента:82<example>83proxy_bind $remote_addr transparent;84</example>85Для работы параметра86обычно требуется87запустить рабочие процессы nginx с привилегиями88<link doc="../ngx_core_module.xml" id="user">суперпользователя</link>.89В Linux этого не требуется (1.13.8), так как если90указан параметр <literal>transparent</literal>, то рабочие процессы91наследуют capability <literal>CAP_NET_RAW</literal> из главного процесса.92Также необходимо настроить таблицу маршрутизации ядра93для перехвата сетевого трафика с проксируемого сервера.94</para>9596</directive>979899<directive name="proxy_bind_dynamic">100<syntax><literal>on</literal> | <literal>off</literal></syntax>101<default>off</default>102<context>stream</context>103<context>server</context>104<appeared-in>1.29.3</appeared-in>105106<para>107Если включено, операция <link id="proxy_bind">bind</link> осуществляется108при каждой попытке соединения.109</para>110111<para>112<note>113Директива доступна как часть114<commercial_version>коммерческой подписки</commercial_version>.115</note>116</para>117118</directive>119120121<directive name="proxy_buffer_size">122<syntax><value>размер</value></syntax>123<default>16k</default>124<context>stream</context>125<context>server</context>126<appeared-in>1.9.4</appeared-in>127128<para>129Задаёт <value>размер</value> буфера, в который будут читаться данные,130получаемые от проксируемого сервера.131Также задаёт <value>размер</value> буфера, в который будут читаться данные,132получаемые от клиента.133</para>134135</directive>136137138<directive name="proxy_connect_timeout">139<syntax><value>время</value></syntax>140<default>60s</default>141<context>stream</context>142<context>server</context>143144<para>145Задаёт таймаут для установления соединения с проксированным сервером.146</para>147148</directive>149150151<directive name="proxy_download_rate">152<syntax><value>скорость</value></syntax>153<default>0</default>154<context>stream</context>155<context>server</context>156<appeared-in>1.9.3</appeared-in>157158<para>159Ограничивает скорость чтения данных от проксируемого сервера.160<value>Скорость</value> задаётся в байтах в секунду.161Значение 0 отключает ограничение скорости.162Ограничение устанавливается на соединение,163поэтому, если nginx одновременно164откроет два соединения к проксируемому серверу,165суммарная скорость будет вдвое выше заданного ограничения.166</para>167168<para>169В значении параметра можно использовать переменные (1.17.0).170Это может быть полезно в случаях, когда скорость нужно ограничивать171в зависимости от какого-либо условия:172<example>173map $slow $rate {1741 4k;1752 8k;176}177178proxy_download_rate $rate;179</example>180</para>181182</directive>183184185<directive name="proxy_half_close">186<syntax><literal>on</literal> | <literal>off</literal></syntax>187<default>off</default>188<context>stream</context>189<context>server</context>190<appeared-in>1.21.4</appeared-in>191192<para>193Разрешает или запрещает независимое закрытие194каждой из сторон проксируемого соединения TCP (“TCP half-close”).195Если разрешено, то проксирование по TCP будет продолжаться,196пока обе стороны не закроют соединение.197</para>198199</directive>200201202<directive name="proxy_next_upstream">203<syntax><literal>on</literal> | <literal>off</literal></syntax>204<default>on</default>205<context>stream</context>206<context>server</context>207208<para>209При невозможности установить соединение с проксируемым сервером определяет,210будет ли клиентское соединение передано следующему серверу.211</para>212213<para>214Передача соединения следующему серверу может быть ограничена по215<link id="proxy_next_upstream_tries">количеству попыток</link>216и по <link id="proxy_next_upstream_timeout">времени</link>.217</para>218219</directive>220221222<directive name="proxy_next_upstream_timeout">223<syntax><value>время</value></syntax>224<default>0</default>225<context>stream</context>226<context>server</context>227228<para>229Ограничивает время, в течение которого возможна передача соединения230<link id="proxy_next_upstream">следующему серверу</link>.231Значение <literal>0</literal> отключает это ограничение.232</para>233234</directive>235236237<directive name="proxy_next_upstream_tries">238<syntax><value>число</value></syntax>239<default>0</default>240<context>stream</context>241<context>server</context>242243<para>244Ограничивает число допустимых попыток для передачи соединения245<link id="proxy_next_upstream">следующему серверу</link>.246Значение <literal>0</literal> отключает это ограничение.247</para>248249</directive>250251252<directive name="proxy_pass">253<syntax><value>адрес</value></syntax>254<default/>255<context>server</context>256257<para>258Задаёт адрес проксируемого сервера.259Адрес может быть указан в виде доменного имени или IP-адреса,260и порта:261<example>262proxy_pass localhost:12345;263</example>264или в виде пути UNIX-сокета:265<example>266proxy_pass unix:/tmp/stream.socket;267</example>268</para>269270<para>271Если доменному имени соответствует несколько адресов, то все они будут272использоваться по очереди (round-robin).273Кроме того, в качестве адреса можно указать274<link doc="ngx_stream_upstream_module.xml">группу серверов</link>.275</para>276277<para>278Адрес можно также задать с помощью переменных (1.11.3):279<example>280proxy_pass $upstream;281</example>282В этом случае имя сервера ищется среди описанных283<link doc="ngx_stream_upstream_module.xml">групп серверов</link>284и если не найдено, то определяется с помощью285<link doc="ngx_stream_core_module.xml" id="resolver"/>’а.286</para>287288</directive>289290291<directive name="proxy_protocol">292<syntax><literal>on</literal> | <literal>off</literal></syntax>293<default>off</default>294<context>stream</context>295<context>server</context>296<appeared-in>1.9.2</appeared-in>297298<para>299Включает300<link url="http://www.haproxy.org/download/1.8/doc/proxy-protocol.txt">протокол301PROXY</link> для соединений с проксируемым сервером.302</para>303304</directive>305306307<directive name="proxy_requests">308<syntax><value>число</value></syntax>309<default>0</default>310<context>stream</context>311<context>server</context>312<appeared-in>1.15.7</appeared-in>313314<para>315Задаёт число датаграмм, полученных от клиента, по достижении которого316удаляется привязка между клиентом и существующей UDP-сессией.317После получения указанного количества датаграмм следующая датаграмма,318полученная от того же клиента, начинает новую сессию.319Cессия завершится после отправки всех принятых датаграмм320на проксируемый сервер и321получения указанного количества <link id="proxy_responses">ответов</link>322или после <link id="proxy_timeout">таймаута</link>.323</para>324325</directive>326327328<directive name="proxy_responses">329<syntax><value>число</value></syntax>330<default/>331<context>stream</context>332<context>server</context>333<appeared-in>1.9.13</appeared-in>334335<para>336Задаёт количество датаграмм, ожидаемых от проксируемого сервера337в ответ на датаграмму клиента338в случае, если используется протокол339<link doc="ngx_stream_core_module.xml" id="udp">UDP</link>.340Задаваемое число cлужит подсказкой для завершения сессии.341По умолчанию количество датаграмм не ограничено.342</para>343344<para>345Если указано нулевое значение, то ответ не ожидается.346Однако если ответ получен и сессия ещё не завершилась, то ответ будет обработан.347</para>348349</directive>350351352<directive name="proxy_session_drop">353<syntax><literal>on</literal> | <literal>off</literal></syntax>354<default>off</default>355<context>stream</context>356<context>server</context>357<appeared-in>1.15.8</appeared-in>358359<para>360Позволяет завершить все сессии к проксируемому серверу,361если он был удалён из группы или помечен как постоянно недоступный.362Это может произойти вследствие повторного363<link doc="ngx_stream_core_module.xml" id="resolver">преобразования имён</link>364в адреса, а также при помощи команды API365<link doc="../http/ngx_http_api_module.xml" id="deleteStreamUpstreamServer"><literal>DELETE</literal></link>.366Сервер может быть помечен как постоянно недоступный в случае неуспешной367<link doc="ngx_stream_upstream_hc_module.xml" id="health_check">проверки работоспособности</link>,368а также при помощи команды API369<link doc="../http/ngx_http_api_module.xml" id="patchStreamUpstreamServer"><literal>PATCH</literal></link>.370Сессия завершается при обработке очередного371события чтения или записи на стороне клиента или проксируемого сервера.372</para>373374<para>375<note>376Эта директива доступна как часть377<commercial_version>коммерческой подписки</commercial_version>.378</note>379</para>380381</directive>382383384<directive name="proxy_socket_keepalive">385<syntax><literal>on</literal> | <literal>off</literal></syntax>386<default>off</default>387<context>stream</context>388<context>server</context>389<appeared-in>1.15.6</appeared-in>390391<para>392Конфигурирует поведение “TCP keepalive”393для исходящих соединений к проксируемому серверу.394По умолчанию для сокета действуют настройки операционной системы.395Если указано значение “<literal>on</literal>”, то396для сокета включается параметр <c-def>SO_KEEPALIVE</c-def>.397</para>398399</directive>400401402<directive name="proxy_ssl">403<syntax><literal>on</literal> | <literal>off</literal></syntax>404<default>off</default>405<context>stream</context>406<context>server</context>407408<para>409Включает протоколы SSL/TLS для соединений с проксируемым сервером.410</para>411412</directive>413414415<directive name="proxy_ssl_alpn">416<syntax><value>протокол</value> ...</syntax>417<default/>418<context>stream</context>419<context>server</context>420<appeared-in>1.31.0</appeared-in>421422<para>423Задаёт список протоколов, которые передаются в расширении424<link url="https://datatracker.ietf.org/doc/html/rfc7301">ALPN</link>425при установлении соединения с проксируемым сервером.426Например:427<example>428proxy_ssl_alpn h2 http/1.1;429</example>430</para>431432<para>433В значении параметра можно использовать переменные:434<example>435proxy_ssl_alpn $ssl_alpn_protocol;436</example>437</para>438439</directive>440441442<directive name="proxy_ssl_certificate">443<syntax><value>файл</value></syntax>444<default/>445<context>stream</context>446<context>server</context>447448<para>449Задаёт <value>файл</value> с сертификатом в формате PEM450для аутентификации на проксируемом сервере.451</para>452453<para id="proxy_ssl_certificate_variables">454Начиная с версии 1.21.0 в имени файла можно использовать переменные.455</para>456457</directive>458459460<directive name="proxy_ssl_certificate_cache">461<syntax><literal>off</literal></syntax>462<syntax>463<literal>max</literal>=<value>N</value>464[<literal>inactive</literal>=<value>время</value>]465[<literal>valid</literal>=<value>время</value>]</syntax>466<default>off</default>467<context>stream</context>468<context>server</context>469<appeared-in>1.27.4</appeared-in>470471<para>472Задаёт кэш, в котором могут храниться473<link id="proxy_ssl_certificate">SSL-сертификаты</link> и474<link id="proxy_ssl_certificate_key">секретные ключи</link>,475полученные из <link id="proxy_ssl_certificate_key_variables">переменных</link>.476</para>477478<para>479У директивы есть следующие параметры:480<list type="tag">481482<tag-name id="proxy_ssl_certificate_cache_max">483<literal>max</literal>484</tag-name>485<tag-desc>486задаёт максимальное число элементов в кэше;487при переполнении кэша удаляются наименее востребованные элементы (LRU);488</tag-desc>489490<tag-name id="proxy_ssl_certificate_cache_inactive">491<literal>inactive</literal>492</tag-name>493<tag-desc>494задаёт время, после которого элемент кэша удаляется,495если к нему не было обращений в течение этого времени;496по умолчанию 10 секунд;497</tag-desc>498499<tag-name id="proxy_ssl_certificate_cache_valid">500<literal>valid</literal>501</tag-name>502<tag-desc>503задает время, в течение которого504элемент кэша считается действительным505и может быть повторно использован,506по умолчанию 60 секунд.507По завершении этого времени сертификат будет обновлён или повторно проверен;508</tag-desc>509510<tag-name id="proxy_ssl_certificate_cache_off">511<literal>off</literal>512</tag-name>513<tag-desc>514запрещает кэш.515</tag-desc>516517</list>518</para>519520<para>521Пример:522<example>523proxy_ssl_certificate $proxy_ssl_server_name.crt;524proxy_ssl_certificate_key $proxy_ssl_server_name.key;525proxy_ssl_certificate_cache max=1000 inactive=20s valid=1m;526</example>527</para>528529</directive>530531532<directive name="proxy_ssl_certificate_key">533<syntax><value>файл</value></syntax>534<default/>535<context>stream</context>536<context>server</context>537538<para>539Задаёт <value>файл</value> с секретным ключом в формате PEM540для аутентификации на проксируемом сервере.541</para>542543<para>544Вместо <value>файла</value> можно указать значение545<literal>store</literal>:<value>схема</value>:<value>id</value> (1.29.0),546которое используется для загрузки ключа с указанным <value>id</value>547и зарегистрированной провайдером OpenSSL <value>схемой</value> URI, такой как548<link url="https://datatracker.ietf.org/doc/html/rfc7512"><literal>pkcs11</literal></link>.549</para>550551<para id="proxy_ssl_certificate_key_variables">552Начиная с версии 1.21.0 в имени файла можно использовать переменные.553</para>554555</directive>556557558<directive name="proxy_ssl_ciphers">559<syntax><value>шифры</value></syntax>560<default>DEFAULT</default>561<context>stream</context>562<context>server</context>563564<para>565Описывает разрешённые шифры для соединений с проксируемым сервером.566Шифры задаются в формате, поддерживаемом библиотекой OpenSSL.567</para>568569<para>570Полный список можно посмотреть с помощью команды571“<command>openssl ciphers</command>”.572</para>573574</directive>575576577<directive name="proxy_ssl_conf_command">578<syntax><value>имя</value> <value>значение</value></syntax>579<default/>580<context>stream</context>581<context>server</context>582<appeared-in>1.19.4</appeared-in>583584<para>585Задаёт произвольные конфигурационные586<link url="https://www.openssl.org/docs/man1.1.1/man3/SSL_CONF_cmd.html">команды</link>587OpenSSL588при установлении соединения с проксируемым сервером.589<note>590Директива поддерживается при использовании OpenSSL 1.0.2 и выше.591</note>592</para>593594<para>595На одном уровне может быть указано596несколько директив <literal>proxy_ssl_conf_command</literal>.597Директивы наследуются с предыдущего уровня конфигурации при условии, что598на данном уровне не описаны599свои директивы <literal>proxy_ssl_conf_command</literal>.600</para>601602<para>603<note>604Следует учитывать, что изменение настроек OpenSSL напрямую605может привести к неожиданному поведению.606</note>607</para>608609</directive>610611612<directive name="proxy_ssl_crl">613<syntax><value>файл</value></syntax>614<default/>615<context>stream</context>616<context>server</context>617618<para>619Указывает <value>файл</value> с отозванными сертификатами (CRL)620в формате PEM, используемыми при <link id="proxy_ssl_verify">проверке</link>621сертификата проксируемого сервера.622Если используются промежуточные сертификаты,623их списки CRL должны находиться в этом же файле.624</para>625626</directive>627628629<directive name="proxy_ssl_key_log">630<syntax>путь</syntax>631<default/>632<context>stream</context>633<context>server</context>634<appeared-in>1.27.2</appeared-in>635636<para>637Включает логирование SSL-ключей соединений с проксируемым сервером638и указывает путь к лог-файлу ключей.639Ключи записываются в формате640<link url="https://datatracker.ietf.org/doc/html/draft-ietf-tls-keylogfile">SSLKEYLOGFILE</link>641совместимом с Wireshark.642</para>643644<para>645<note>646Директива доступна как часть647<commercial_version>коммерческой подписки</commercial_version>.648</note>649</para>650651</directive>652653654<directive name="proxy_ssl_name">655<syntax><value>имя</value></syntax>656<default>хост из proxy_pass</default>657<context>stream</context>658<context>server</context>659660<para>661Позволяет переопределить имя сервера, используемое при662<link id="proxy_ssl_verify">проверке</link>663сертификата проксируемого сервера, а также для664<link id="proxy_ssl_server_name">передачи его через SNI</link>665при установлении соединения с проксируемым сервером.666Имя сервера можно также задать с помощью переменных (1.11.3).667</para>668669<para>670По умолчанию используется имя хоста из адреса, заданного671директивой <link id="proxy_pass"/>.672</para>673674</directive>675676677<directive name="proxy_ssl_password_file">678<syntax><value>файл</value></syntax>679<default/>680<context>stream</context>681<context>server</context>682683<para>684Задаёт <value>файл</value> с паролями от685<link id="proxy_ssl_certificate_key">секретных ключей</link>,686где каждый пароль указан на отдельной строке.687Пароли применяются по очереди в момент загрузки ключа.688</para>689690</directive>691692693<directive name="proxy_ssl_protocols">694<syntax>695[<literal>SSLv2</literal>]696[<literal>SSLv3</literal>]697[<literal>TLSv1</literal>]698[<literal>TLSv1.1</literal>]699[<literal>TLSv1.2</literal>]700[<literal>TLSv1.3</literal>]</syntax>701<default>TLSv1.2 TLSv1.3</default>702<context>stream</context>703<context>server</context>704705<para>706Разрешает указанные протоколы для соединений с проксируемым сервером.707</para>708709<para>710<note>711Параметр <literal>TLSv1.3</literal> используется по умолчанию712начиная с 1.23.4.713</note>714</para>715716</directive>717718719<directive name="proxy_ssl_server_name">720<syntax><literal>on</literal> | <literal>off</literal></syntax>721<default>off</default>722<context>stream</context>723<context>server</context>724725<para>726Разрешает или запрещает передачу имени сервера через727<link url="http://en.wikipedia.org/wiki/Server_Name_Indication">расширение728Server Name Indication протокола TLS</link> (SNI, RFC 6066)729при установлении соединения с проксируемым сервером.730</para>731732</directive>733734735<directive name="proxy_ssl_session_reuse">736<syntax><literal>on</literal> | <literal>off</literal></syntax>737<default>on</default>738<context>stream</context>739<context>server</context>740741<para>742Определяет, использовать ли повторно SSL-сессии при743работе с проксируемым сервером.744Если в логах появляются ошибки745“<literal>digest check failed</literal>”,746то можно попробовать выключить747повторное использование сессий.748</para>749750</directive>751752753<directive name="proxy_ssl_trusted_certificate">754<syntax><value>файл</value></syntax>755<default/>756<context>stream</context>757<context>server</context>758759<para>760Задаёт <value>файл</value> с доверенными сертификатами CA в формате PEM,761используемыми при <link id="proxy_ssl_verify">проверке</link>762сертификата проксируемого сервера.763</para>764765</directive>766767768<directive name="proxy_ssl_verify">769<syntax><literal>on</literal> | <literal>off</literal></syntax>770<default>off</default>771<context>stream</context>772<context>server</context>773774<para>775Разрешает или запрещает проверку сертификата проксируемого сервера.776</para>777778</directive>779780781<directive name="proxy_ssl_verify_depth">782<syntax><value>число</value></syntax>783<default>1</default>784<context>stream</context>785<context>server</context>786787<para>788Устанавливает глубину проверки в цепочке сертификатов проксируемого сервера.789</para>790791</directive>792793794<directive name="proxy_timeout">795<syntax><value>время</value></syntax>796<default>10m</default>797<context>stream</context>798<context>server</context>799800<para>801Задаёт <value>таймаут</value> между двумя идущими подряд802операциями чтения или записи803на клиентском соединении или соединении с проксируемым сервером.804Если по истечении этого времени данные не передавались,805соединение закрывается.806</para>807808</directive>809810811<directive name="proxy_upload_rate">812<syntax><value>скорость</value></syntax>813<default>0</default>814<context>stream</context>815<context>server</context>816<appeared-in>1.9.3</appeared-in>817818<para>819Ограничивает скорость чтения данных от клиента.820<value>Скорость</value> задаётся в байтах в секунду.821Значение 0 отключает ограничение скорости.822Ограничение устанавливается на соединение,823поэтому, если клиент одновременно824откроет два соединения,825суммарная скорость будет вдвое выше заданного ограничения.826</para>827828<para>829В значении параметра можно использовать переменные (1.17.0).830Это может быть полезно в случаях, когда скорость нужно ограничивать831в зависимости от какого-либо условия:832<example>833map $slow $rate {8341 4k;8352 8k;836}837838proxy_upload_rate $rate;839</example>840</para>841842</directive>843844</section>845846</module>847848849