annotate xml/en/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 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,
1923
66a30a380fba Fixed links to tools.ietf.org.
Ruslan Ermilov <ru@nginx.com>
parents: 1536
diff changeset
17 the <link url="https://tools.ietf.org/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
1923
66a30a380fba Fixed links to tools.ietf.org.
Ruslan Ermilov <ru@nginx.com>
parents: 1536
diff changeset
23 <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
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>