Mercurial > hg > nginx-site
annotate xml/ru/docs/http/websocket.xml @ 2846:fdf1464e1977
Moved banner to the external file to make partial rollout possible.
An idea is to have several banners and show them with different probability
specified by split directive in the nginx.conf
author | Sergey Budnevitch <sb@waeme.net> |
---|---|
date | Tue, 10 May 2022 18:07:27 +0400 |
parents | 4add6ae1296f |
children |
rev | line source |
---|---|
849 | 1 <!-- |
2 Copyright (C) Nginx, Inc. | |
3 --> | |
4 | |
5 <!DOCTYPE article SYSTEM "../../../../dtd/article.dtd"> | |
6 | |
7 <article name="Проксирование WebSocket" | |
8 link="/ru/docs/http/websocket.html" | |
9 lang="ru" | |
1923
66a30a380fba
Fixed links to tools.ietf.org.
Ruslan Ermilov <ru@nginx.com>
parents:
1724
diff
changeset
|
10 rev="4"> |
849 | 11 |
12 | |
13 <section> | |
14 | |
15 <para> | |
16 Для превращения соединения между клиентом и сервером из HTTP/1.1 в WebSocket | |
17 используется доступный в HTTP/1.1 механизм | |
2831
4add6ae1296f
Updated links to datatracker.ietf.org.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1923
diff
changeset
|
18 <link url="https://datatracker.ietf.org/doc/html/rfc2616#section-14.42">смены |
849 | 19 протокола</link>. |
20 </para> | |
21 | |
22 <para> | |
23 Но есть сложность: поскольку <header>Upgrade</header> является | |
2831
4add6ae1296f
Updated links to datatracker.ietf.org.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1923
diff
changeset
|
24 <link url="https://datatracker.ietf.org/doc/html/rfc2616#section-13.5.1">hop-by-hop</link> |
849 | 25 заголовком, то он не передаётся от клиента к проксируемому серверу. |
26 При прямом проксировании клиенты могут использовать метод | |
27 <literal>CONNECT</literal>, чтобы обойти эту проблему. | |
28 Однако при обратном проксировании такой подход не работает, | |
29 так как клиент ничего о проксирующем сервере не знает, | |
30 и требуется специальная обработка на проксирующем сервере. | |
31 </para> | |
32 | |
33 <para> | |
1724
ce3e89d13fa0
Removed unneeded comma in "Since ..." Russian constructs.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1536
diff
changeset
|
34 Начиная с версии 1.3.13 |
849 | 35 в nginx предусмотрен особый режим работы, |
36 который позволяет установить туннель между клиентом и проксируемым | |
37 сервером, если проксируемый сервер вернул ответ с кодом | |
38 <http-status code="101" text="Switching Protocols"/>, | |
39 и клиент попросил сменить протокол с помощью заголовка | |
40 <header>Upgrade</header> в запросе. | |
41 </para> | |
42 | |
43 <para> | |
44 Как уже отмечалось выше, hop-by-hop заголовки, включая <header>Upgrade</header> | |
45 и <header>Connection</header>, не передаются от клиента к проксируемому | |
46 серверу, поэтому, для того чтобы проксируемый сервер узнал о | |
47 намерении клиента сменить протокол на WebSocket, эти заголовки следует | |
48 передать явно: | |
49 <programlisting> | |
50 location /chat/ { | |
51 proxy_pass http://backend; | |
52 proxy_http_version 1.1; | |
53 proxy_set_header Upgrade $http_upgrade; | |
54 proxy_set_header Connection "upgrade"; | |
55 } | |
56 </programlisting> | |
57 Более сложный пример, | |
58 в котором значение поля <header>Connection</header> | |
59 в заголовке запроса к проксируемому серверу зависит от наличия поля | |
60 <header>Upgrade</header> в заголовке запроса клиента: | |
61 <programlisting> | |
62 http { | |
63 map $http_upgrade $connection_upgrade { | |
64 default upgrade; | |
65 '' close; | |
66 } | |
67 | |
68 server { | |
69 ... | |
70 | |
71 location /chat/ { | |
72 proxy_pass http://backend; | |
73 proxy_http_version 1.1; | |
74 proxy_set_header Upgrade $http_upgrade; | |
75 proxy_set_header Connection $connection_upgrade; | |
76 } | |
77 } | |
78 </programlisting> | |
79 </para> | |
80 | |
1525
e47758a54759
Updated the "WebSockets Proxying" article with proxy_read_timeout.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
849
diff
changeset
|
81 <para> |
e47758a54759
Updated the "WebSockets Proxying" article with proxy_read_timeout.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
849
diff
changeset
|
82 По умолчанию соединение будет закрыто, |
1536
d1d49bbb3df0
Removed proxy_send_timeout and its example from "WebSockets Proxying" article.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
1525
diff
changeset
|
83 если с проксируемого сервера данные не передавались в течение 60 секунд. |
d1d49bbb3df0
Removed proxy_send_timeout and its example from "WebSockets Proxying" article.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
1525
diff
changeset
|
84 Этот таймаут можно увеличить при помощи директивы |
d1d49bbb3df0
Removed proxy_send_timeout and its example from "WebSockets Proxying" article.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
1525
diff
changeset
|
85 <link doc="ngx_http_proxy_module.xml" id="proxy_read_timeout"/>. |
d1d49bbb3df0
Removed proxy_send_timeout and its example from "WebSockets Proxying" article.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
1525
diff
changeset
|
86 Кроме того, на проксируемом сервере можно настроить |
d1d49bbb3df0
Removed proxy_send_timeout and its example from "WebSockets Proxying" article.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
1525
diff
changeset
|
87 периодическую отправку WebSocket ping-фреймов для сброса таймаута |
d1d49bbb3df0
Removed proxy_send_timeout and its example from "WebSockets Proxying" article.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
1525
diff
changeset
|
88 и проверки работоспособности соединения. |
1525
e47758a54759
Updated the "WebSockets Proxying" article with proxy_read_timeout.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
849
diff
changeset
|
89 </para> |
e47758a54759
Updated the "WebSockets Proxying" article with proxy_read_timeout.
Yaroslav Zhuravlev <yar@nginx.com>
parents:
849
diff
changeset
|
90 |
849 | 91 </section> |
92 | |
93 </article> |