annotate xml/ru/docs/http/websocket.xml @ 1724:ce3e89d13fa0

Removed unneeded comma in "Since ..." Russian constructs.
author Maxim Dounin <mdounin@mdounin.ru>
date Tue, 07 Jun 2016 19:00:33 +0300
parents d1d49bbb3df0
children 66a30a380fba
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"
1536
d1d49bbb3df0 Removed proxy_send_timeout and its example from "WebSockets Proxying" article.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 1525
diff changeset
10 rev="3">
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 механизм
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
18 <link url="http://tools.ietf.org/html/rfc2616#section-14.42">смены
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> является
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
24 <link url="http://tools.ietf.org/html/rfc2616#section-13.5.1">hop-by-hop</link>
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>