0


nginx 配置支持websocket转发

方式1.动态判断是否需要升级websocket协议

编辑nginx.conf,在http区域内一定要添加下面配置:

http {

#自定义变量 $connection_upgrade

map $http_upgrade $connection_upgrade {

    default          keep-alive;  #默认为keep-alive 可以支持 一般http请求

    'websocket'      upgrade;     #如果为websocket 则为 upgrade 可升级的。

}

}

map指令的作用:

该作用主要是根据客户端请求中$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;

location / { //默认匹配

        proxy_pass http://$httpUpstreamName_8083;

        #Nginx代理webSocket经常中断(超时)的解决方法

        proxy_connect_timeout 4s;                

        proxy_read_timeout 60s;                  #如果没效,可以考虑这个时间配置长一点

        proxy_send_timeout 12s;                

        #升级http1.1到 websocket协议

        proxy_http_version 1.1;

        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_http_version 1.1;

    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,连接都会被关闭,无法复用。

标签: nginx websocket 运维

本文转载自: https://blog.csdn.net/qq_42152032/article/details/132533774
版权归原作者 李庆政370 所有, 如有侵权,请联系我们删除。

“nginx 配置支持websocket转发”的评论:

还没有评论