Основываясь на том, что я мог прочитать на сайте nginx https://www.nginx.com/blog/websocket-nginx/
Приведенный ими пример закроет все соединения с серверной частью. Это не совсем то, что мы хотим при настройке прокси, заставляя повторно открывать соединение с серверной частью на каждом новом клиенте.
http {
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
upstream websocket {
server 192.168.100.10:8010;
}
server {
listen 8020;
location / {
proxy_pass http://websocket;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $host;
}
}
}
Но нужно ли закрывать соединение после обновления до веб-сокета?
не можем ли мы изменить карту, чтобы она поддерживала «keepalive» соединение с серверной частью? (для всех запросов, отличных от веб-сокетов)
map $http_upgrade $connection_upgrade {
default upgrade;
# '' close;
'' '';
}
Будучи единственным пользователем в тестовой среде, похоже, не возникло никаких проблем, но будет ли то же самое в производственной среде?
это map
не приводит к закрытию соединений с веб-сокетами.
На самом деле он проверяет, Upgrade:
заголовок запроса содержит любое значение. Если да, то возвращается upgrade
, который затем передается в восходящем направлении как заголовок Connection: upgrade
.
Он только возвращается close
когда Upgrade:
заголовок запроса отсутствует. Этого не должно происходить при нормальной работе, но если это произойдет, вы все равно не сможете надежно (или вообще) установить соединение через веб-сокет с браузером.