annotate xml/en/docs/http/websocket.xml @ 3011:55d49eb065ac

Fixed example in the js_periodic directive.
author Yaroslav Zhuravlev <yar@nginx.com>
date Thu, 14 Sep 2023 16:38:00 +0100
parents 4add6ae1296f
children
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 proxying"
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
8 link="/en/docs/http/websocket.html"
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
9 lang="en"
1923
66a30a380fba Fixed links to tools.ietf.org.
Ruslan Ermilov <ru@nginx.com>
parents: 1536
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 To turn a connection between a client and server from HTTP/1.1 into WebSocket,
2831
4add6ae1296f Updated links to datatracker.ietf.org.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1923
diff changeset
17 the <link url="https://datatracker.ietf.org/doc/html/rfc2616#section-14.42">protocol
849
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
18 switch</link> mechanism available in HTTP/1.1 is used.
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
19 </para>
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
20
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
21 <para>
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
22 There is one subtlety however: since the <header>Upgrade</header> is a
2831
4add6ae1296f Updated links to datatracker.ietf.org.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1923
diff changeset
23 <link url="https://datatracker.ietf.org/doc/html/rfc2616#section-13.5.1">hop-by-hop</link>
849
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
24 header, it is not passed from a client to proxied server.
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
25 With forward proxying, clients may use the <literal>CONNECT</literal>
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
26 method to circumvent this issue.
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
27 This does not work with reverse proxying however,
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
28 since clients are not aware of any proxy servers,
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
29 and special processing on a proxy server is required.
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
30 </para>
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
31
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
32 <para>
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
33 Since version 1.3.13,
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
34 nginx implements special mode of operation
966
95c3c3bbf1ce Text review.
Egor Nikitin <yegor.nikitin@gmail.com>
parents: 849
diff changeset
35 that allows setting up a tunnel between a client and proxied
849
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
36 server if the proxied server returned a response with the code
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
37 <http-status code="101" text="Switching Protocols"/>,
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
38 and the client asked for a protocol switch via the <header>Upgrade</header>
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
39 header in a request.
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
40 </para>
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
41
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
42 <para>
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
43 As noted above, hop-by-hop headers including <header>Upgrade</header>
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
44 and <header>Connection</header> are not passed from a client to proxied
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
45 server, therefore in order for the proxied server to know about the client’s
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
46 intention to switch a protocol to WebSocket, these headers have to be
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
47 passed explicitly:
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
48 <programlisting>
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
49 location /chat/ {
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
50 proxy_pass http://backend;
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
51 proxy_http_version 1.1;
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
52 proxy_set_header Upgrade $http_upgrade;
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
53 proxy_set_header Connection "upgrade";
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
54 }
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
55 </programlisting>
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
56 A more sophisticated example
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
57 in which a value of the <header>Connection</header> header field
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
58 in a request to the proxied server depends on the presence of
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
59 the <header>Upgrade</header> field in the client request header:
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
60 <programlisting>
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
61 http {
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
62 map $http_upgrade $connection_upgrade {
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
63 default upgrade;
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
64 '' close;
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
65 }
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 server {
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
68 ...
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 location /chat/ {
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
71 proxy_pass http://backend;
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
72 proxy_http_version 1.1;
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
73 proxy_set_header Upgrade $http_upgrade;
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
74 proxy_set_header Connection $connection_upgrade;
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
75 }
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 </programlisting>
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
78 </para>
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
79
1525
e47758a54759 Updated the "WebSockets Proxying" article with proxy_read_timeout.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 966
diff changeset
80 <para>
e47758a54759 Updated the "WebSockets Proxying" article with proxy_read_timeout.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 966
diff changeset
81 By default, the connection will be closed
1536
d1d49bbb3df0 Removed proxy_send_timeout and its example from "WebSockets Proxying" article.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 1525
diff changeset
82 if the proxied server does not transmit any data within 60 seconds.
d1d49bbb3df0 Removed proxy_send_timeout and its example from "WebSockets Proxying" article.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 1525
diff changeset
83 This timeout can be increased with the
d1d49bbb3df0 Removed proxy_send_timeout and its example from "WebSockets Proxying" article.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 1525
diff changeset
84 <link doc="ngx_http_proxy_module.xml" id="proxy_read_timeout"/> directive.
d1d49bbb3df0 Removed proxy_send_timeout and its example from "WebSockets Proxying" article.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 1525
diff changeset
85 Alternatively, the proxied server can be configured
d1d49bbb3df0 Removed proxy_send_timeout and its example from "WebSockets Proxying" article.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 1525
diff changeset
86 to periodically send WebSocket ping frames to reset the timeout
d1d49bbb3df0 Removed proxy_send_timeout and its example from "WebSockets Proxying" article.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 1525
diff changeset
87 and check if the connection is still alive.
1525
e47758a54759 Updated the "WebSockets Proxying" article with proxy_read_timeout.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 966
diff changeset
88 </para>
e47758a54759 Updated the "WebSockets Proxying" article with proxy_read_timeout.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 966
diff changeset
89
849
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
90 </section>
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
91
0ed4c093c026 WebSocket proxying howto.
Homutov Vladimir <vl@nginx.com>
parents:
diff changeset
92 </article>