annotate xml/ru/docs/http/websocket.xml @ 2769:16f6fa718be2

Updated TLSv1.3 support notes. Previous notes described some early development snapshot of OpenSSL 1.1.1 with disabled TLSv1.3 by default. It was then enabled in the first alpha. Further, the updated text covers later major releases such as OpenSSL 3.0.
author Sergey Kandaurov <pluknet@nginx.com>
date Thu, 30 Sep 2021 16:29:20 +0300
parents 66a30a380fba
children 4add6ae1296f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
849
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
1 <!--
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
2 Copyright (C) Nginx, Inc.
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
3 -->
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
4
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
5 <!DOCTYPE article SYSTEM "../../../../dtd/article.dtd">
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
6
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
7 <article name="Проксирование WebSocket"
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
8 link="/ru/docs/http/websocket.html"
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
9 lang="ru"
1923
66a30a380fba Fixed links to tools.ietf.org.
Ruslan Ermilov <ru@nginx.com>
parents: 1724
diff changeset
10 rev="4">
849
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
11
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
12
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
13 <section>
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
14
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
15 <para>
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
16 Для превращения соединения между клиентом и сервером из HTTP/1.1 в WebSocket
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
17 используется доступный в HTTP/1.1 механизм
1923
66a30a380fba Fixed links to tools.ietf.org.
Ruslan Ermilov <ru@nginx.com>
parents: 1724
diff changeset
18 <link url="https://tools.ietf.org/html/rfc2616#section-14.42">смены
849
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
19 протокола</link>.
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
20 </para>
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
21
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
22 <para>
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
23 Но есть сложность: поскольку <header>Upgrade</header> является
1923
66a30a380fba Fixed links to tools.ietf.org.
Ruslan Ermilov <ru@nginx.com>
parents: 1724
diff changeset
24 <link url="https://tools.ietf.org/html/rfc2616#section-13.5.1">hop-by-hop</link>
849
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
25 заголовком, то он не передаётся от клиента к проксируемому серверу.
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
26 При прямом проксировании клиенты могут использовать метод
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
27 <literal>CONNECT</literal>, чтобы обойти эту проблему.
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
28 Однако при обратном проксировании такой подход не работает,
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
29 так как клиент ничего о проксирующем сервере не знает,
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
30 и требуется специальная обработка на проксирующем сервере.
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
31 </para>
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
32
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
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
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
35 в nginx предусмотрен особый режим работы,
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
36 который позволяет установить туннель между клиентом и проксируемым
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
37 сервером, если проксируемый сервер вернул ответ с кодом
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
38 <http-status code="101" text="Switching Protocols"/>,
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
39 и клиент попросил сменить протокол с помощью заголовка
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
40 <header>Upgrade</header> в запросе.
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
41 </para>
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
42
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
43 <para>
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
44 Как уже отмечалось выше, hop-by-hop заголовки, включая <header>Upgrade</header>
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
45 и <header>Connection</header>, не передаются от клиента к проксируемому
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
46 серверу, поэтому, для того чтобы проксируемый сервер узнал о
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
47 намерении клиента сменить протокол на WebSocket, эти заголовки следует
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
48 передать явно:
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
49 <programlisting>
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
50 location /chat/ {
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
51 proxy_pass http://backend;
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
52 proxy_http_version 1.1;
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
53 proxy_set_header Upgrade $http_upgrade;
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
54 proxy_set_header Connection "upgrade";
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
55 }
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
56 </programlisting>
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
57 Более сложный пример,
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
58 в котором значение поля <header>Connection</header>
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
59 в заголовке запроса к проксируемому серверу зависит от наличия поля
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
60 <header>Upgrade</header> в заголовке запроса клиента:
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
61 <programlisting>
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
62 http {
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
63 map $http_upgrade $connection_upgrade {
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
64 default upgrade;
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
65 '' close;
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
66 }
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
67
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
68 server {
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
69 ...
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
70
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
71 location /chat/ {
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
72 proxy_pass http://backend;
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
73 proxy_http_version 1.1;
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
74 proxy_set_header Upgrade $http_upgrade;
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
75 proxy_set_header Connection $connection_upgrade;
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
76 }
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
77 }
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
78 </programlisting>
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
79 </para>
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
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
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
91 </section>
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
92
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
93 </article>