前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >nginx代理Websocket

nginx代理Websocket

原创
作者头像
古人诗
修改2020-03-18 17:58:21
1.4K0
修改2020-03-18 17:58:21
举报
文章被收录于专栏:最肯忘却最肯忘却

有需求使用nginx反向代理websockt,因为webSocket协议是基于http协议的,因此可以使用nginx反向代理webSocket.

ws的http请求信息
ws的http请求信息

下面是具体的协议内容

代码语言:javascript
复制
Request URL: ws://x.x.x.x:8800/
Request Method: GET
Status Code: 101 Switching Protocols

request headers:
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cache-Control: no-cache
Connection: Upgrade
Host: x.x.x.x:8800
Origin: http://www.websocket-test.com
Pragma: no-cache
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
Sec-WebSocket-Key: M7CVPssrE5QD3UKq7pgeyA==
Sec-WebSocket-Version: 13
Upgrade: websocket
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36

对比可以发现关键的header是Connection更换为Upgrade

这里使用的nginx是centos7默认yum安装的,运行成功后可以直接修改默认的conf文件,路径是:/etc/nginx/nginx.conf

在配置文件最末添加具体代理websocket的配置:

代码语言:javascript
复制
upstream x.x.x.x_8800 {        
        server  x.x.x.x:8800;   //这里配置的是被代理的websocket的ip及端口
}

server {
        listen  8880;
        server_name  193.112.175.134;  //这里配置是代理服务器的ip和端口
        location / {
        proxy_pass      http://x.x.x.x:8800;  //这里配置的是被代理的websocket的ip及端口
        proxy_http_version 1.1; //代理时使用的 http版本
        //下列配置是重点内容
        proxy_set_header Upgrade $http_upgrade;//把代理时http请求头的Upgrade 设置为原来http请求的请求头,wss协议的请求头为websocket
        proxy_set_header Connection "Upgrade";//http请求头的Connection设置为Upgrade
        proxy_set_header X-Real-IP $remote_addr;//代理设置原http请求的ip,填写$remote_addr 即可
        proxy_set_header        Host            $host;//这里设置的是host,ws没做限制的话默认$host即可
        proxy_set_header        X-Forwarded-For $remote_addr;//这里没看懂,应该是用来识别请求ip的
        }
}

重启nginx后,测试ws成功

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档