nginx配置支持ws反代
前言
最近线上项目有个小问题,在F12查看问题的时候发现了另外一个问题,就是今天的主题,ws连接报错了,总是报400错误,下面记录下如何解决
环境
因为项目部署在公司内网,用frp
穿透出去用域名访问的,域名又ssl证书,一开始项目用ws
协议,报错也是看起来就是需要换成wss
协议才行
问题
换了周发现问题还在,但是报错不一样了,没有那么多错误了,不过请求还是400,用postman在公司内网连接ws协议发现没有问题,那就说明要么是frp的问题,要么就是域名所在nginx反代的问题
经过查询frp,发现frp是支持的,以前项目有过这个问题,所以frp不存在不能转发ws协议的问题,所以问题一定处在域名所在nginx,查看nginx的配置后发现确实有问题
解决
如果要让反代支持ws,整体配置如下
1 | server { |
重点是以下几行
1 | proxy_http_version 1.1; |
- **proxy_http_version 1.1;**:
- 这一行配置指定了在反向代理请求时使用的 HTTP 协议版本。在这里,将协议版本设置为 1.1。
- WebSocket 协议需要使用 HTTP/1.1 或更高版本,因此必须将协议版本设置为 1.1。
- **proxy_set_header Upgrade $http_upgrade;**:
- 这一行配置用于设置 HTTP 头部,指示 Nginx 将客户端的请求升级为 WebSocket 连接。
$http_upgrade
是一个 Nginx 变量,它包含客户端请求的Upgrade
头部内容。通常,这个头部包含值 “websocket”,以指示客户端希望升级到 WebSocket 连接。- 这个配置确保 Nginx 将请求升级为 WebSocket 连接。
- **proxy_set_header Connection “upgrade”;**:
- 这一行配置用于设置 HTTP 头部,指示 Nginx 使用 “upgrade” 连接类型。这是 WebSocket 连接所需的连接类型。
- 当客户端请求升级到 WebSocket 连接时,Nginx 会使用 “upgrade” 连接类型,以确保连接可以升级为双向 WebSocket 连接