方式1.动态判断是否需要升级websocket协议
编辑nginx.conf,在http区域内一定要添加下面配置:
http {
map $http_upgrade $connection_upgrade {
default keep–alive; #默认为keep–alive 可以支持 一般http请求
‘websocket‘ upgrade; #如果为websocket 则为 upgrade 可升级的。
}
}
该作用主要是根据客户端请求中$http_upgrade 的值,来构造改变$connection_upgrade的值,即根据变量$http_upgrade的值创建新的变量$connection_upgrade,
创建的规则就是{}里面的东西。如果 $http_upgrade为websocket的话,那么$connection_upgrade的值为upgrade支持升级协议。否则为keep-alive
server {
server_name test.server;
listen 8083;
listen [::]:8083;
proxy_pass http://$httpUpstreamName_8083;
#Nginx代理webSocket经常中断(超时)的解决方法
proxy_read_timeout 60s; #如果没效,可以考虑这个时间配置长一点
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
}
测试ws连接转发是否正常:ws://test.server:8083/
方式2.直接写死升级websocket
server {
server_name test.server;
listen 80;
listen [::]:80;
listen 8083;
listen [::]:8083;
listen 8088;
listen [::]:8088;
location / { #只能通过$serviceName配置 $httpUpstreamName_xxx可能不存在
if ($server_port = “80”) { #sys default require
proxy_pass http://$serviceName:80;
}
if ($server_port = “8080”) { #sys default require
proxy_pass http://$serviceName:8080;
}
if ($server_port = “8088”) { #custom
proxy_pass http://$serviceName:8088;
}
proxy_pass http://$serviceName:8083;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection “upgrade”;
}
}
测试ws连接转发是否正常:ws://test.server:8083/
拓展阅读:
在nginx中,每个server块应该具有唯一的server_name来避免冲突,不同server块中server_name不允许重复。
set命令用于设置变量,set $XX=XX,在server块中set设置的变量,仅当前server块中有效。
在 HTTP 协议中,keep-alive、upgrade 和 close 是三种不同的连接管理方式。它们之间的区别如下:
keep-alive: 这是 HTTP 的默认连接管理方式。当使用 keep-alive 时,允许多个请求和响应重复使用相同的 TCP 连接。这样可以减少建立和关闭连接的开销,提高性能。同一连接上的多个请求将被连续发送和接收,直到达到连接的最大空闲时间或收到显式的关闭连接指令。
upgrade: 这是一种特殊的连接升级方式,通常用于支持协议升级,例如从 HTTP 到 WebSocket。当客户端发送一个带有 “Upgrade” 头部的请求时,服务器可以将连接升级到另一个具有自定义功能的协议。在升级的过程中,服务器和客户端之间通常会协商协议的切换和其他必要的握手。
close: 当服务器或客户端希望终止连接时,可以发送一个带有 “Connection: close” 头部的请求或响应。这会指示对方关闭连接。在这种情况下,无论之前是否启用了 keep-alive,连接都会被关闭,无法复用。
原文地址:https://blog.csdn.net/qq_42152032/article/details/132533774
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_15601.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!