ΠΡΠΎΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ WebSocket
ΠΠ»Ρ ΠΏΡΠ΅Π²ΡΠ°ΡΠ΅Π½ΠΈΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ ΠΈΠ· HTTP/1.1 Π² WebSocket ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄ΠΎΡΡΡΠΏΠ½ΡΠΉ Π² HTTP/1.1 ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΡΠΌΠ΅Π½Ρ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π°.
ΠΠΎ Π΅ΡΡΡ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ: ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ βUpgradeβ ΡΠ²Π»ΡΠ΅ΡΡΡ
hop-by-hop
Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠΌ, ΡΠΎ ΠΎΠ½ Π½Π΅ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ ΠΎΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΊ ΠΏΡΠΎΠΊΡΠΈΡΡΠ΅ΠΌΠΎΠΌΡ ΡΠ΅ΡΠ²Π΅ΡΡ.
ΠΡΠΈ ΠΏΡΡΠΌΠΎΠΌ ΠΏΡΠΎΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΡ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄
CONNECT, ΡΡΠΎΠ±Ρ ΠΎΠ±ΠΎΠΉΡΠΈ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ.
ΠΠ΄Π½Π°ΠΊΠΎ ΠΏΡΠΈ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΌ ΠΏΡΠΎΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΡΠ°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ,
ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΊΠ»ΠΈΠ΅Π½Ρ Π½ΠΈΡΠ΅Π³ΠΎ ΠΎ ΠΏΡΠΎΠΊΡΠΈΡΡΡΡΠ΅ΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ΅ Π½Π΅ Π·Π½Π°Π΅Ρ,
ΠΈ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½Π°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΠΏΡΠΎΠΊΡΠΈΡΡΡΡΠ΅ΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ΅.
ΠΠ°ΡΠΈΠ½Π°Ρ Ρ Π²Π΅ΡΡΠΈΠΈ 1.3.13 Π² nginx ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½ ΠΎΡΠΎΠ±ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ ΡΠ°Π±ΠΎΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΡΠ½Π½Π΅Π»Ρ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ ΠΈ ΠΏΡΠΎΠΊΡΠΈΡΡΠ΅ΠΌΡΠΌ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ, Π΅ΡΠ»ΠΈ ΠΏΡΠΎΠΊΡΠΈΡΡΠ΅ΠΌΡΠΉ ΡΠ΅ΡΠ²Π΅Ρ Π²Π΅ΡΠ½ΡΠ» ΠΎΡΠ²Π΅Ρ Ρ ΠΊΠΎΠ΄ΠΎΠΌ 101 (Switching Protocols), ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΏΠΎΠΏΡΠΎΡΠΈΠ» ΡΠΌΠ΅Π½ΠΈΡΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° βUpgradeβ Π² Π·Π°ΠΏΡΠΎΡΠ΅.
ΠΠ°ΠΊ ΡΠΆΠ΅ ΠΎΡΠΌΠ΅ΡΠ°Π»ΠΎΡΡ Π²ΡΡΠ΅, hop-by-hop Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ, Π²ΠΊΠ»ΡΡΠ°Ρ βUpgradeβ ΠΈ βConnectionβ, Π½Π΅ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ ΠΎΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΊ ΠΏΡΠΎΠΊΡΠΈΡΡΠ΅ΠΌΠΎΠΌΡ ΡΠ΅ΡΠ²Π΅ΡΡ, ΠΏΠΎΡΡΠΎΠΌΡ, Π΄Π»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠΊΡΠΈΡΡΠ΅ΠΌΡΠΉ ΡΠ΅ΡΠ²Π΅Ρ ΡΠ·Π½Π°Π» ΠΎ Π½Π°ΠΌΠ΅ΡΠ΅Π½ΠΈΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΡΠΌΠ΅Π½ΠΈΡΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» Π½Π° WebSocket, ΡΡΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΠ²Π½ΠΎ:
location /chat/ {
proxy_pass http://backend;
# proxy_http_version 1.1; # Π΄ΠΎ Π²Π΅ΡΡΠΈΠΈ 1.29.7
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
ΠΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»Ρ βConnectionβ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ Π·Π°ΠΏΡΠΎΡΠ° ΠΊ ΠΏΡΠΎΠΊΡΠΈΡΡΠ΅ΠΌΠΎΠΌΡ ΡΠ΅ΡΠ²Π΅ΡΡ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ Π½Π°Π»ΠΈΡΠΈΡ ΠΏΠΎΠ»Ρ βUpgradeβ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ Π·Π°ΠΏΡΠΎΡΠ° ΠΊΠ»ΠΈΠ΅Π½ΡΠ°:
http {
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
...
location /chat/ {
proxy_pass http://backend;
# proxy_http_version 1.1; # Π΄ΠΎ Π²Π΅ΡΡΠΈΠΈ 1.29.7
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
}
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ Π·Π°ΠΊΡΡΡΠΎ, Π΅ΡΠ»ΠΈ Ρ ΠΏΡΠΎΠΊΡΠΈΡΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ° Π΄Π°Π½Π½ΡΠ΅ Π½Π΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π»ΠΈΡΡ Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ 60 ΡΠ΅ΠΊΡΠ½Π΄. ΠΡΠΎΡ ΡΠ°ΠΉΠΌΠ°ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²Π΅Π»ΠΈΡΠΈΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ proxy_read_timeout. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π½Π° ΠΏΡΠΎΠΊΡΠΈΡΡΠ΅ΠΌΠΎΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΡΡ ΠΎΡΠΏΡΠ°Π²ΠΊΡ WebSocket ping-ΡΡΠ΅ΠΉΠΌΠΎΠ² Π΄Π»Ρ ΡΠ±ΡΠΎΡΠ° ΡΠ°ΠΉΠΌΠ°ΡΡΠ° ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ.