Mercurial > hg > nginx-site
annotate xml/ru/docs/http/websocket.xml @ 2955:2c4d7151b9a9
nginx community slack promo.
author | Maxim Konovalov <maxim@nginx.com> |
---|---|
date | Fri, 28 Apr 2023 09:25:05 -0700 |
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> |