专栏首页最肯忘却nginx代理Websocket
原创

nginx代理Websocket

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

ws的http请求信息

下面是具体的协议内容

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的配置:

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成功

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • CVM数据备份(快照+镜像)

    我们在提交工单咨询腾讯云工程师进行服务器问题处理时,总会让我们备份数据,但有些人对镜像或者快照的数据备份步骤不是很清楚,此文档会对相关步骤进行详细说明:

    古人诗
  • Docker简单入门

    以下所有学习均使用腾讯云官方镜像Centos7.8,安装后无任何额外安装。***.com域名解析为我服务器的ip,后续不进行解释。

    古人诗
  • 控制台VNC登录方式

    近期由于腾讯更新了VNC登录方式的位置,隐藏的已经没有以前那么升了,如果您的服务器遭遇了灾难性的问题导致无法远程,您可通过VNC机型登录您的服务器进行紧急修复。

    古人诗
  • nginx自定义header问题记录

    针对访问后台人数过多,导致源站压力巨大的问题,研发自定义了一个header信息,用来设置缓存,并判断是否命中header。针对这个问题,在测试环境进行测试时,发...

    dogfei
  • Ubuntu下安装nginx及使用

    首先介绍以下nginx。下图来自百科介绍:详细介绍地址:https://baike.baidu.com/item/nginx/3817705?fr=aladdi...

    用户2417870
  • uni-app实战之社区交友APP(1)项目介绍和环境搭建

    本文主要介绍项目的概况和环境搭建: 本项目是基于uni-app开发的社区交友APP;环境搭建以HbuilderX为主,创建项目即可测试运行;同时为了兼容多种平...

    cutercorley
  • JS基础测试: 下列选项中哪一个是强制转换?

    1.当参数 radix 的值为 0,或没有设置该参数时,parseInt() 会根据 string 来判断数字的基数。

    舒克
  • 高可用高性能分布式文件系统FastDFS进阶keepalived+nginx对多tracker进行高可用热备

      在上一篇 分布式文件系统FastDFS如何做到高可用 中已经介绍了FastDFS的原理和怎么搭建一个简单的高可用的分布式文件系统及怎么访问。   高可用是实...

    欢醉
  • 重磅!2020年全国高考延期一个月举行,考试时间为7月7日至7月8日

    ? 本文转载自:中国教育报 关于2020年全国高考时间安排的公告 经党中央、国务院同意,2020年全国普通高等学校招生统一考试(以下简称“高考”)延期一个月...

    鹅老师
  • chromium最近几个版本的改动

    Chrome 57 Beta: 1,css grid layout基本完成 2,Media Session API 3,视频全屏的时候锁住屏幕 4,setT...

    龙泉寺扫地僧

扫码关注云+社区

领取腾讯云代金券