comparison xml/ru/docs/http/ngx_http_upstream_module.xml @ 3043:9eadb98ec770

Free nginx: removed commercial version documentation.
author Maxim Dounin <mdounin@mdounin.ru>
date Wed, 14 Feb 2024 20:05:49 +0300
parents 27008cb3fb27
children 0bbf14c9fd66
comparison
equal deleted inserted replaced
3042:19e4897acb84 3043:9eadb98ec770
8 <!DOCTYPE module SYSTEM "../../../../dtd/module.dtd"> 8 <!DOCTYPE module SYSTEM "../../../../dtd/module.dtd">
9 9
10 <module name="Модуль ngx_http_upstream_module" 10 <module name="Модуль ngx_http_upstream_module"
11 link="/ru/docs/http/ngx_http_upstream_module.html" 11 link="/ru/docs/http/ngx_http_upstream_module.html"
12 lang="ru" 12 lang="ru"
13 rev="88"> 13 rev="89">
14 14
15 <section id="summary"> 15 <section id="summary">
16 16
17 <para> 17 <para>
18 Модуль <literal>ngx_http_upstream_module</literal> 18 Модуль <literal>ngx_http_upstream_module</literal>
43 } 43 }
44 44
45 server { 45 server {
46 location / { 46 location / {
47 proxy_pass http://<emphasis>backend</emphasis>; 47 proxy_pass http://<emphasis>backend</emphasis>;
48 }
49 }
50 </example>
51 </para>
52
53 <para>
54 Динамически настраиваемая группа
55 с периодическими
56 <link doc="ngx_http_upstream_hc_module.xml">проверками работоспособности</link>
57 доступна как часть
58 <commercial_version>коммерческой подписки</commercial_version>:
59 <example>
60 resolver 10.0.0.1;
61
62 upstream <emphasis>dynamic</emphasis> {
63 zone upstream_dynamic 64k;
64
65 server backend1.example.com weight=5;
66 server backend2.example.com:8080 fail_timeout=5s slow_start=30s;
67 server 192.0.2.1 max_fails=3;
68 server backend3.example.com resolve;
69 server backend4.example.com service=http resolve;
70
71 server backup1.example.com:8080 backup;
72 server backup2.example.com:8080 backup;
73 }
74
75 server {
76 location / {
77 proxy_pass http://<emphasis>dynamic</emphasis>;
78 health_check;
79 } 48 }
80 } 49 }
81 </example> 50 </example>
82 </para> 51 </para>
83 52
169 нескольких 138 нескольких
170 <link doc="../ngx_core_module.xml" id="worker_processes">рабочих процессах</link> 139 <link doc="../ngx_core_module.xml" id="worker_processes">рабочих процессах</link>
171 и <link id="zone">зоне разделяемой памяти</link>, 140 и <link id="zone">зоне разделяемой памяти</link>,
172 суммарное число активных и неактивных соединений с проксируемым сервером 141 суммарное число активных и неактивных соединений с проксируемым сервером
173 может превышать значение <literal>max_conns</literal>. 142 может превышать значение <literal>max_conns</literal>.
174 </note>
175 <note>
176 Начиная с версии 1.5.9 и до версии 1.11.5
177 этот параметр был доступен как часть
178 <commercial_version>коммерческой подписки</commercial_version>.
179 </note> 143 </note>
180 </tag-desc> 144 </tag-desc>
181 145
182 <tag-name id="max_fails"> 146 <tag-name id="max_fails">
183 <literal>max_fails</literal>=<value>число</value> 147 <literal>max_fails</literal>=<value>число</value>
240 204
241 </list> 205 </list>
242 </para> 206 </para>
243 207
244 <para> 208 <para>
245 Кроме того, 209 <note>
246 следующие параметры доступны как часть 210 Если в группе только один сервер,
247 <commercial_version>коммерческой подписки</commercial_version>: 211 параметры <literal>max_fails</literal> и <literal>fail_timeout</literal>
248 <list type="tag">
249
250 <tag-name id="resolve">
251 <literal>resolve</literal>
252 </tag-name>
253 <tag-desc>
254 отслеживает изменения IP-адресов, соответствующих доменному имени сервера,
255 и автоматически изменяет конфигурацию группы
256 без необходимости перезапуска nginx (1.5.12).
257 Группа должна находиться в <link id="zone">зоне разделяемой памяти</link>.
258 <para>
259 Для работы этого параметра
260 директива <literal>resolver</literal>
261 должна быть задана в блоке
262 <link doc="ngx_http_core_module.xml" id="resolver">http</link>
263 или в соответствующем блоке <link id="resolver">upstream</link>.
264 </para>
265 </tag-desc>
266
267 <tag-name id="route">
268 <literal>route</literal>=<value>строка</value>
269 </tag-name>
270 <tag-desc>
271 задаёт имя маршрута к серверу.
272 </tag-desc>
273
274 <tag-name id="service">
275 <literal>service</literal>=<value>имя</value>
276 </tag-name>
277 <tag-desc>
278 включает преобразование
279 <link url="https://datatracker.ietf.org/doc/html/rfc2782">SRV</link>-записей
280 DNS и задаёт <value>имя</value> сервиса (1.9.13).
281 Для работы параметра необходимо указать
282 параметр <link id="resolve"/> для сервера
283 и не указывать порт сервера.
284 <para>
285 Если имя сервиса не содержит точку (“<literal>.</literal>”), то
286 имя составляется в соответствии с
287 <link url="https://datatracker.ietf.org/doc/html/rfc2782">RFC</link>
288 и в префикс службы добавляется протокол TCP.
289 Например, для получения
290 SRV-записи <literal>_http._tcp.backend.example.com</literal>
291 необходимо указать директиву:
292 <example>
293 server backend.example.com service=http resolve;
294 </example>
295 Если имя сервиса содержит одну и более точек, то имя составляется
296 при помощи соединения префикса службы и имени сервера.
297 Например, для получения SRV-записей
298 <literal>_http._tcp.backend.example.com</literal>
299 и <literal>server1.backend.example.com</literal>
300 необходимо указать директивы:
301 <example>
302 server backend.example.com service=_http._tcp resolve;
303 server example.com service=server1.backend resolve;
304 </example>
305 </para>
306
307 <para>
308 SRV-записи с наивысшим приоритетом
309 (записи с одинаковым наименьшим значением приоритета)
310 преобразуются в основные серверы,
311 остальные SRV-записи преобразуются в запасные серверы.
312 Если в конфигурации сервера указан параметр <link id="backup"/>,
313 высокоприоритетные SRV-записи преобразуются в запасные серверы,
314 остальные SRV-записи игнорируются.
315 </para>
316 </tag-desc>
317
318 <tag-name id="slow_start">
319 <literal>slow_start</literal>=<value>время</value>
320 </tag-name>
321 <tag-desc>
322 задаёт <value>время</value>, в течение которого вес сервера
323 восстановится от нуля до своего номинального значения в ситуации, когда
324 неработоспособный (unhealthy) сервер вновь становится работоспособным
325 (<link doc="ngx_http_upstream_hc_module.xml" id="health_check">healthy</link>)
326 или когда сервер становится доступным по прошествии времени,
327 в течение которого он считался <link id="fail_timeout">недоступным</link>.
328 Значение по умолчанию равно нулю и означает, что медленный старт выключен.
329 <note>
330 Параметр нельзя использовать совместно с
331 методами балансировки нагрузки
332 <link id="hash"/>, <link id="ip_hash"/> и <link id="random"/>.
333 </note>
334 </tag-desc>
335
336 <tag-name id="drain">
337 <literal>drain</literal>
338 </tag-name>
339 <tag-desc>
340 переводит сервер в режим “draining” (1.13.6).
341 В этом режиме на сервер будут проксироваться только
342 <link id="sticky">привязанные</link> к нему запросы.
343 <note>
344 До версии 1.13.6
345 параметр мог быть изменён только при помощи
346 модуля <link doc="ngx_http_api_module.xml">API</link>.
347 </note>
348 </tag-desc>
349
350 </list>
351 </para>
352
353 <para>
354 <note>
355 Если в группе только один сервер, параметры <literal>max_fails</literal>,
356 <literal>fail_timeout</literal> и <literal>slow_start</literal>
357 игнорируются и такой сервер никогда не будет считаться недоступным. 212 игнорируются и такой сервер никогда не будет считаться недоступным.
358 </note> 213 </note>
359 </para> 214 </para>
360 215
361 </directive> 216 </directive>
371 Задаёт <value>имя</value> и <value>размер</value> зоны разделяемой памяти, 226 Задаёт <value>имя</value> и <value>размер</value> зоны разделяемой памяти,
372 в которой хранятся конфигурация группы и её рабочее состояние, 227 в которой хранятся конфигурация группы и её рабочее состояние,
373 разделяемые между рабочими процессами. 228 разделяемые между рабочими процессами.
374 В одной и той же зоне могут быть сразу несколько групп. 229 В одной и той же зоне могут быть сразу несколько групп.
375 В этом случае достаточно указать <value>размер</value> только один раз. 230 В этом случае достаточно указать <value>размер</value> только один раз.
376 </para>
377
378 <para>
379 Дополнительно, как часть
380 <commercial_version>коммерческой подписки</commercial_version>,
381 в таких группах для изменения состава группы
382 или настроек отдельных серверов
383 нет необходимости перезапускать nginx.
384 Конфигурация доступна через
385 модуль <link doc="ngx_http_api_module.xml">API</link> (1.13.3).
386 <note>
387 До версии 1.13.3
388 конфигурация была доступна только через специальный location,
389 в котором указана директива
390 <link doc="ngx_http_upstream_conf_module.xml" id="upstream_conf"/>.
391 </note>
392 </para>
393
394 </directive>
395
396
397 <directive name="state">
398 <syntax><value>файл</value></syntax>
399 <default/>
400 <context>upstream</context>
401 <appeared-in>1.9.7</appeared-in>
402
403 <para>
404 Задаёт <value>файл</value>, в котором хранится состояние
405 динамически настраиваемой группы.
406 </para>
407
408 <para>
409 Примеры:
410 <example>
411 state /var/lib/nginx/state/servers.conf; # путь для Linux
412 state /var/db/nginx/state/servers.conf; # путь для FreeBSD
413 </example>
414 </para>
415
416 <para>
417 В данный момент состояние ограничено списком серверов с их параметрами.
418 Файл читается при парсинге конфигурации и обновляется каждый раз при
419 <link doc="ngx_http_api_module.xml" id="http_upstreams_http_upstream_name_servers_">изменении</link>
420 конфигурации группы.
421 Изменение содержимого файла напрямую не рекомендуется.
422 Директиву нельзя использовать
423 совместно с директивой <link id="server"/>.
424 </para>
425
426 <para>
427 <note>
428 Изменения, совершённые в момент
429 <link doc="../control.xml" id="reconfiguration">перезагрузки конфигурации</link>
430 или <link doc="../control.xml" id="upgrade">обновления бинарного файла</link>,
431 могут быть потеряны.
432 </note>
433 </para>
434
435 <para>
436 <note>
437 Эта директива доступна как часть
438 <commercial_version>коммерческой подписки</commercial_version>.
439 </note>
440 </para> 231 </para>
441 232
442 </directive> 233 </directive>
443 234
444 235
702 </para> 493 </para>
703 494
704 </directive> 495 </directive>
705 496
706 497
707 <directive name="ntlm">
708 <syntax/>
709 <default/>
710 <context>upstream</context>
711 <appeared-in>1.9.2</appeared-in>
712
713 <para>
714 Позволяет проксировать запросы с
715 <link url="https://en.wikipedia.org/wiki/Integrated_Windows_Authentication">проверкой
716 подлинности NTLM</link>.
717 Соединение с сервером группы привязывается к клиентскому соединению
718 как только клиент отправляет запрос, в заголовке которого есть поле
719 <header>Authorization</header> со значением,
720 начинающимся с “<literal>Negotiate</literal>” или “<literal>NTLM</literal>”.
721 Последующие запросы клиента будут проксироваться через это же соединение
722 с сервером группы,
723 сохраняя контекст аутентификации.
724 </para>
725
726 <para>
727 Для работы проверки подлинности NTLM
728 необходимо разрешить постоянные соединения с серверами группы.
729 Директиву <link doc="ngx_http_proxy_module.xml" id="proxy_http_version"/>
730 следует установить в “<literal>1.1</literal>”,
731 а поле заголовка <header>Connection</header> — очистить:
732 <example>
733 upstream http_backend {
734 server 127.0.0.1:8080;
735
736 ntlm;
737 }
738
739 server {
740 ...
741
742 location /http/ {
743 proxy_pass http://http_backend;
744 proxy_http_version 1.1;
745 proxy_set_header Connection "";
746 ...
747 }
748 }
749 </example>
750 </para>
751
752 <para>
753 <note>
754 При использовании методов балансировки нагрузки, отличных
755 от стандартного round-robin, следует активировать их до
756 директивы <literal>ntlm</literal>.
757 </note>
758 </para>
759
760 <para>
761 <note>
762 Эта директива доступна как часть
763 <commercial_version>коммерческой подписки</commercial_version>.
764 </note>
765 </para>
766
767 </directive>
768
769
770 <directive name="least_conn"> 498 <directive name="least_conn">
771 <syntax/> 499 <syntax/>
772 <default/> 500 <default/>
773 <context>upstream</context> 501 <context>upstream</context>
774 <appeared-in>1.3.1</appeared-in> 502 <appeared-in>1.3.1</appeared-in>
778 Задаёт для группы метод балансировки нагрузки, при котором запрос 506 Задаёт для группы метод балансировки нагрузки, при котором запрос
779 передаётся серверу с наименьшим числом активных соединений, 507 передаётся серверу с наименьшим числом активных соединений,
780 с учётом весов серверов. 508 с учётом весов серверов.
781 Если подходит сразу несколько серверов, они выбираются циклически 509 Если подходит сразу несколько серверов, они выбираются циклически
782 (в режиме round-robin) с учётом их весов. 510 (в режиме round-robin) с учётом их весов.
783 </para>
784
785 </directive>
786
787
788 <directive name="least_time">
789 <syntax>
790 <literal>header</literal> |
791 <literal>last_byte</literal>
792 [<literal>inflight</literal>]</syntax>
793 <default/>
794 <context>upstream</context>
795 <appeared-in>1.7.10</appeared-in>
796
797 <para>
798 Задаёт для группы метод балансировки нагрузки, при котором запрос
799 передаётся серверу с наименьшими средним временем ответа и
800 числом активных соединений с учётом весов серверов.
801 Если подходит сразу несколько серверов, то они выбираются циклически
802 (в режиме round-robin) с учётом их весов.
803 </para>
804
805 <para>
806 Если указан параметр <literal>header</literal>,
807 то учитывается время получения
808 <link id="var_upstream_header_time">заголовка ответа</link>.
809 Если указан параметр <literal>last_byte</literal>, то учитывается
810 время получения <link id="var_upstream_response_time">всего ответа</link>.
811 Если указан параметр <literal>inflight</literal> (1.11.6),
812 то также учитываются незавершённые запросы.
813 <note>
814 До версии 1.11.6 незавершённые запросы учитывались по умолчанию.
815 </note>
816 </para>
817
818 <para>
819 <note>
820 Эта директива доступна как часть
821 <commercial_version>коммерческой подписки</commercial_version>.
822 </note>
823 </para>
824
825 </directive>
826
827
828 <directive name="queue">
829 <syntax>
830 <value>число</value>
831 [<literal>timeout</literal>=<value>время</value>]</syntax>
832 <default/>
833 <context>upstream</context>
834 <appeared-in>1.5.12</appeared-in>
835
836 <para>
837 Если при обработке запроса невозможно сразу выбрать сервер группы, то
838 запрос будет помещён в очередь.
839 Директива задаёт максимальное <value>число</value> запросов,
840 которые могут одновременно находиться в очереди.
841 Если очередь переполнена
842 или за время, задаваемое параметром <literal>timeout</literal>,
843 так и не удастся выбрать сервер для передачи ему запроса,
844 клиенту будет возвращена ошибка
845 <http-status code="502" text="Bad Gateway"/>.
846 </para>
847
848 <para>
849 По умолчанию параметр <literal>timeout</literal> равен 60 секундам.
850 </para>
851
852 <para>
853 <note>
854 При использовании методов балансировки нагрузки, отличных
855 от стандартного round-robin, следует активировать их до
856 директивы <literal>queue</literal>.
857 </note>
858
859 <note>
860 Эта директива доступна как часть
861 <commercial_version>коммерческой подписки</commercial_version>.
862 </note>
863 </para> 511 </para>
864 512
865 </directive> 513 </directive>
866 514
867 515
884 сервера, из которых выбирает сервер, 532 сервера, из которых выбирает сервер,
885 используя указанный <literal>метод</literal>. 533 используя указанный <literal>метод</literal>.
886 Методом по умолчанию является <literal>least_conn</literal>, 534 Методом по умолчанию является <literal>least_conn</literal>,
887 при котором запрос передаётся на сервер 535 при котором запрос передаётся на сервер
888 с наименьшим количеством активных соединений. 536 с наименьшим количеством активных соединений.
889 </para>
890
891 <para id="random_least_time">
892 Если указан метод <literal>least_time</literal>, то запрос передаётся серверу
893 с наименьшими средним временем ответа и числом активных соединений.
894 Если указан <literal>least_time=header</literal>, то учитывается
895 время получения <link id="var_upstream_header_time">заголовка ответа</link>.
896 Если указан <literal>least_time=last_byte</literal>, то учитывается
897 время получения <link id="var_upstream_response_time">всего ответа</link>.
898 <note>
899 Метод <literal>least_time</literal> доступен как часть
900 <commercial_version>коммерческой подписки</commercial_version>.
901 </note>
902 </para>
903
904 </directive>
905
906
907 <directive name="resolver">
908 <syntax>
909 <value>адрес</value> ...
910 [<literal>valid</literal>=<value>время</value>]
911 [<literal>ipv4</literal>=<literal>on</literal>|<literal>off</literal>]
912 [<literal>ipv6</literal>=<literal>on</literal>|<literal>off</literal>]
913 [<literal>status_zone</literal>=<value>зона</value>]</syntax>
914 <default/>
915 <context>upstream</context>
916 <appeared-in>1.17.5</appeared-in>
917
918 <para>
919 Задаёт серверы DNS, используемые для преобразования имён вышестоящих серверов
920 в адреса, например:
921 <example>
922 resolver 127.0.0.1 [::1]:5353;
923 </example>
924 Адрес может быть указан в виде доменного имени или IP-адреса,
925 и необязательного порта.
926 Если порт не указан, используется порт 53.
927 Серверы DNS опрашиваются циклически.
928 </para>
929
930 <para id="resolver_ipv6">
931 По умолчанию nginx будет искать как IPv4-, так и IPv6-адреса
932 при преобразовании имён в адреса.
933 Если поиск IPv4- или IPv6-адресов нежелателен,
934 можно указать параметр <literal>ipv4=off</literal> (1.23.1) или
935 <literal>ipv6=off</literal>.
936 </para>
937
938 <para id="resolver_valid">
939 По умолчанию nginx кэширует ответы, используя значение TTL из ответа.
940 Необязательный параметр <literal>valid</literal> позволяет это
941 переопределить:
942 <example>
943 resolver 127.0.0.1 [::1]:5353 valid=30s;
944 </example>
945 <note>
946 Для предотвращения DNS-спуфинга рекомендуется
947 использовать DNS-серверы в защищённой доверенной локальной сети.
948 </note>
949 </para>
950
951 <para id="resolver_status_zone">
952 Необязательный параметр <literal>status_zone</literal>
953 включает
954 <link doc="ngx_http_api_module.xml" id="resolvers_">сбор информации</link>
955 о запросах и ответах сервера DNS
956 в указанной <value>зоне</value>.
957 </para>
958
959 <para>
960 <note>
961 Эта директива доступна как часть
962 <commercial_version>коммерческой подписки</commercial_version>.
963 </note>
964 </para>
965
966 </directive>
967
968
969 <directive name="resolver_timeout">
970 <syntax><value>время</value></syntax>
971 <default>30s</default>
972 <context>upstream</context>
973 <appeared-in>1.17.5</appeared-in>
974
975 <para>
976 Задаёт таймаут для преобразования имени в адрес, например:
977 <example>
978 resolver_timeout 5s;
979 </example>
980 </para>
981
982 <para>
983 <note>
984 Эта директива доступна как часть
985 <commercial_version>коммерческой подписки</commercial_version>.
986 </note>
987 </para>
988
989 </directive>
990
991
992 <directive name="sticky">
993 <syntax>
994 <literal>cookie</literal> <value>имя</value>
995 [<literal>expires=</literal><value>время</value>]
996 [<literal>domain=</literal><value>домен</value>]
997 [<literal>httponly</literal>]
998 [<literal>samesite=</literal><literal>strict</literal>|<literal>lax</literal>|<literal>none</literal>|<value>$переменная</value>]
999 [<literal>secure</literal>]
1000 [<literal>path=</literal><value>путь</value>]</syntax>
1001 <syntax>
1002 <literal>route</literal> <value>$переменная</value> ...</syntax>
1003 <syntax>
1004 <literal>learn</literal>
1005 <literal>create=</literal><value>$переменная</value>
1006 <literal>lookup=</literal><value>$переменная</value>
1007 <literal>zone=</literal><value>имя</value>:<value>размер</value>
1008 [<literal>timeout=</literal><value>время</value>]
1009 [<literal>header</literal>]
1010 [<literal>sync</literal>]</syntax>
1011 <default/>
1012 <context>upstream</context>
1013 <appeared-in>1.5.7</appeared-in>
1014
1015 <para>
1016 Включает режим привязки сеансов, в котором запросы клиента
1017 будут передаваться на один и тот же сервер группы.
1018 Доступны три метода:
1019 <list type="tag">
1020 <tag-name id="sticky_cookie"><literal>cookie</literal></tag-name>
1021 <tag-desc>
1022
1023 <para>
1024 При использовании метода <literal>cookie</literal> информация о
1025 назначенном сервере передаётся в HTTP-куке:
1026 <example>
1027 upstream backend {
1028 server backend1.example.com;
1029 server backend2.example.com;
1030
1031 sticky cookie srv_id expires=1h domain=.example.com path=/;
1032 }
1033 </example>
1034 </para>
1035
1036 <para>
1037 Запрос от клиента, ещё не привязанного к определённому серверу,
1038 передаётся на сервер, выбранный согласно настроенному методу балансировки.
1039 Дальнейшие запросы от этого клиента передаются на тот же сервер.
1040 Если назначенный сервер не может обработать запрос, выбирается новый
1041 сервер как если бы клиент не имел привязки к серверу.
1042
1043 <note>
1044 Так как любой метод балансировки пытается равномерно распределить нагрузку,
1045 учитывая уже привязанные запросы,
1046 сервер с наибольшим количеством привязанных запросов
1047 имеет меньшую вероятность получить новые, не привязанные запросы.
1048 </note>
1049 </para>
1050
1051 <para>
1052 Первый параметр задаёт имя куки, которую необходимо установить или проверить.
1053 Значением куки является MD5-хэш IP-адреса и порта
1054 (или пути UNIX-сокета) в шестнадцатеричном виде.
1055 Однако если указан параметр “<literal>route</literal>”
1056 директивы <link id="server"/>, то значением куки будет
1057 значение параметра “<literal>route</literal>”:
1058 <example>
1059 upstream backend {
1060 server backend1.example.com route=<emphasis>a</emphasis>;
1061 server backend2.example.com route=<emphasis>b</emphasis>;
1062
1063 sticky cookie srv_id expires=1h domain=.example.com path=/;
1064 }
1065 </example>
1066 В этом случае значение куки “<literal>srv_id</literal>” будет
1067 или <value>a</value>, или <value>b</value>.
1068 </para>
1069
1070 <para>
1071 Дополнительные параметры могут быть следующими:
1072 <list type="tag">
1073
1074 <tag-name><literal>expires=</literal><value>время</value></tag-name>
1075 <tag-desc>
1076 Задаёт <value>время</value>, в течение которого браузеру необходимо хранить куку.
1077 Специальное значение <literal>max</literal> устанавливает срок хранения куки до
1078 31 декабря 2037 года 23:55:55 GMT.
1079 Если параметр не указан, то время действия куки ограничивается сессией браузера.
1080 </tag-desc>
1081
1082 <tag-name><literal>domain=</literal><value>домен</value></tag-name>
1083 <tag-desc>
1084 Задаёт <value>домен</value>, для которого устанавливается кука.
1085 В значении параметра можно использовать переменные (1.11.5).
1086 </tag-desc>
1087
1088 <tag-name><literal>httponly</literal></tag-name>
1089 <tag-desc>
1090 Добавляет атрибут <literal>HttpOnly</literal> к куке (1.7.11).
1091 </tag-desc>
1092
1093 <tag-name id="sticky_samesite"><literal>samesite=</literal><literal>strict</literal> |
1094 <literal>lax</literal> | <literal>none</literal> | <literal>$переменная</literal></tag-name>
1095 <tag-desc>
1096 Добавляет атрибут <literal>SameSite</literal> (1.19.4) к куке
1097 с одним из следующих значений:
1098 <literal>Strict</literal>,
1099 <literal>Lax</literal>,
1100 <literal>None</literal> или
1101 при помощи переменных (1.23.3).
1102 В последнем случае если переменная имеет пустое значение,
1103 то атрибут <literal>SameSite</literal> не будет добавлен к куке,
1104 если значение переменной равно
1105 <literal>Strict</literal>,
1106 <literal>Lax</literal> или
1107 <literal>None</literal>,
1108 то атрибуту будет назначено соответствующее значение,
1109 иначе атрибуту будет назначено значение <literal>Strict</literal>.
1110 </tag-desc>
1111
1112 <tag-name><literal>secure</literal></tag-name>
1113 <tag-desc>
1114 Добавляет атрибут <literal>Secure</literal> к куке (1.7.11).
1115 </tag-desc>
1116
1117 <tag-name><literal>path=</literal><value>путь</value></tag-name>
1118 <tag-desc>
1119 Задаёт <value>путь</value>, для которого устанавливается кука.
1120 </tag-desc>
1121
1122 </list>
1123 Если пропущен тот или иной параметр, то соответствующего поля в куке не будет.
1124 </para>
1125 </tag-desc>
1126
1127 <tag-name id="sticky_route"><literal>route</literal></tag-name>
1128 <tag-desc>
1129
1130 <para>
1131 При использовании метода <literal>route</literal> проксируемый сервер назначает
1132 клиенту маршрут по получении первого запроса.
1133 Все последующие запросы от этого клиента будут содержать информацию о
1134 маршруте в куке или URI.
1135 Эта информация сравнивается с параметром “<literal>route</literal>” директивы
1136 <link id="server"/> для идентификации сервера, на который
1137 следует проксировать запрос.
1138 Если параметр “<literal>route</literal>” не задан, то именем маршрута
1139 будет являться MD5-хэш IP-адреса и порта
1140 (или пути UNIX-сокета) в шестнадцатеричном виде.
1141 Если назначенный сервер не может обработать запрос, выбирается новый сервер
1142 согласно настроенному методу балансировки как если бы в запросе не было
1143 информации о маршруте.
1144 </para>
1145
1146 <para>
1147 Параметры метода <literal>route</literal> задают переменные, которые
1148 могут содержать информацию о маршруте.
1149 Первая непустая переменная используется для поиска соответствующего сервера.
1150 </para>
1151
1152 <para>
1153 Пример:
1154 <example>
1155 map $cookie_jsessionid $route_cookie {
1156 ~.+\.(?P&lt;route>\w+)$ $route;
1157 }
1158
1159 map $request_uri $route_uri {
1160 ~jsessionid=.+\.(?P&lt;route>\w+)$ $route;
1161 }
1162
1163 upstream backend {
1164 server backend1.example.com route=a;
1165 server backend2.example.com route=b;
1166
1167 sticky route $route_cookie $route_uri;
1168 }
1169 </example>
1170 В этом примере маршрут берётся из куки “<literal>JSESSIONID</literal>”,
1171 если она присутствует в запросе.
1172 В противном случае используется маршрут из URI.
1173 </para>
1174
1175 </tag-desc>
1176
1177 <tag-name id="sticky_learn"><literal>learn</literal></tag-name>
1178 <tag-desc>
1179 <para>
1180 При использовании метода <literal>learn</literal> (1.7.1) nginx
1181 анализирует ответы от вышестоящего сервера и запоминает
1182 начатые им сессии, которые обычно передаются в HTTP-куке.
1183 <example>
1184 upstream backend {
1185 server backend1.example.com:8080;
1186 server backend2.example.com:8081;
1187
1188 sticky learn
1189 create=$upstream_cookie_examplecookie
1190 lookup=$cookie_examplecookie
1191 zone=client_sessions:1m;
1192 }
1193 </example>
1194
1195 В примере выше сервер группы создаёт сессию путём установки
1196 куки “<literal>EXAMPLECOOKIE</literal>” в своём ответе.
1197 Последующие запросы с этой кукой будут передаваться на этот же сервер.
1198 Если сервер не может обработать запрос, выбирается новый
1199 сервер как если бы клиент не имел привязки к серверу.
1200 </para>
1201
1202 <para>
1203 Параметры <literal>create</literal> и <literal>lookup</literal>
1204 задают переменные, в которых соответственно указывается способ
1205 создания новых и поиска существующих сессий.
1206 Оба параметра могут быть указаны больше одного раза
1207 (в этом случае используется первая непустая переменная).
1208 </para>
1209
1210 <para>
1211 Сессии хранятся в зоне разделяемой памяти, <value>имя</value> и
1212 <value>размер</value> которой задаются параметром <literal>zone</literal>.
1213 Зоны размером в 1 мегабайт достаточно для хранения около 4 тысяч сессий
1214 на 64-битной платформе.
1215 Сессии, к которым не было обращений в течение времени, заданного параметром
1216 <literal>timeout</literal>, удаляются из зоны.
1217 По умолчанию <literal>timeout</literal> равен 10 минутам.
1218 </para>
1219
1220 <para id="sticky_learn_header">
1221 Параметр <literal>header</literal> (1.13.1) позволяет создавать сессию
1222 сразу после получения заголовков ответа от сервера группы.
1223 </para>
1224
1225 <para id="sticky_learn_sync">
1226 Параметр <literal>sync</literal> (1.13.8) разрешает
1227 <link doc="../stream/ngx_stream_zone_sync_module.xml" id="zone_sync">синхронизацию</link>
1228 данной зоны разделяемой памяти.
1229 </para>
1230
1231 </tag-desc>
1232 </list>
1233 </para>
1234
1235 <para>
1236 <note>
1237 Эта директива доступна как часть
1238 <commercial_version>коммерческой подписки</commercial_version>.
1239 </note>
1240 </para>
1241
1242 </directive>
1243
1244
1245 <directive name="sticky_cookie_insert">
1246 <syntax><value>имя</value>
1247 [<literal>expires=</literal><value>время</value>]
1248 [<literal>domain=</literal><value>домен</value>]
1249 [<literal>path=</literal><value>путь</value>]</syntax>
1250 <default/>
1251 <context>upstream</context>
1252
1253 <para>
1254 Эта директива устарела начиная с версии 1.5.7.
1255 Вместо неё следует использовать аналогичную директиву
1256 <link id="sticky"/> с изменённым синтаксисом:
1257 <note>
1258 <literal>sticky cookie</literal> <value>имя</value>
1259 [<literal>expires=</literal><value>время</value>]
1260 [<literal>domain=</literal><value>домен</value>]
1261 [<literal>path=</literal><value>путь</value>];
1262 </note>
1263 </para> 537 </para>
1264 538
1265 </directive> 539 </directive>
1266 540
1267 </section> 541 </section>
1358 “<link doc="ngx_http_core_module.xml" id="var_http_">$http_</link>”. 632 “<link doc="ngx_http_core_module.xml" id="var_http_">$http_</link>”.
1359 Необходимо иметь в виду, что поля заголовка запоминаются только из ответа 633 Необходимо иметь в виду, что поля заголовка запоминаются только из ответа
1360 последнего сервера. 634 последнего сервера.
1361 </tag-desc> 635 </tag-desc>
1362 636
1363 <tag-name id="var_upstream_last_server_name"><var>$upstream_last_server_name</var></tag-name>
1364 <tag-desc>
1365 хранит имя последнего выбранного сервера группы (1.25.3);
1366 позволяет передать его
1367 <link doc="ngx_http_proxy_module.xml" id="proxy_ssl_server_name">через SNI</link>:
1368 <example>
1369 proxy_ssl_server_name on;
1370 proxy_ssl_name $upstream_last_server_name;
1371 </example>
1372
1373 <para>
1374 <note>
1375 Эта переменная доступна как часть
1376 <commercial_version>коммерческой подписки</commercial_version>.
1377 </note>
1378 </para>
1379
1380 </tag-desc>
1381
1382 <tag-name id="var_upstream_queue_time"><var>$upstream_queue_time</var></tag-name> 637 <tag-name id="var_upstream_queue_time"><var>$upstream_queue_time</var></tag-name>
1383 <tag-desc> 638 <tag-desc>
1384 хранит время, проведённое запросом в <link id="queue">очереди</link> 639 хранит время, проведённое запросом в <link id="queue">очереди</link>
1385 (1.13.9); 640 (1.13.9);
1386 время хранится в секундах с точностью до миллисекунд. 641 время хранится в секундах с точностью до миллисекунд.