最近使用 node.js 搭建 WebSocket 服务,在本地测试 connection 都是正常,于是部署到 Linux 服务上,需要用 Nginx 来反向代理 WebSocket 服务。浏览器控制台报错:WebSocket connection to 'wss://tiven.cn/ws/xxx' failed:,经过一般折腾,终于成功了这个报错。

介绍

WebSocket 协议与 HTTP 协议不同,但 WebSocket 握手与 HTTP 兼容,使用 HTTP 升级工具将连接从 HTTP 升级到 WebSocket。这允许 WebSocket 应用程序更容易地适应现有的基础架构。例如,WebSocket 应用程序可以使用标准 HTTP 端口80和443,从而允许使用现有的防火墙规则。

WebSocket 应用程序可以在客户端和服务器之间保持长时间运行的连接,从而有助于开发实时应用程序。 Nginx 反向代理用于将连接从 HTTP 升级到 WebSocket 的 HTTP 升级机制使用 UpgradeConnection 。反向代理服务器在支持 WebSocket 时面临一些挑战。一个是 WebSocket 是一个逐跳协议,因此当代理服务器拦截客户端的升级请求时,需要向后端服务器发送自己的升级请求,包括相应的头文件。此外,由于 WebSocket 连接长期存在,与 HTTP 使用的典型短期连接相反,反向代理需要允许这些连接保持打开状态,而不是关闭它们,因为它们似乎处于空闲状态。

允许在客户机和后端服务器之间建立隧道,Nginx 支持 WebSocket。对于 Nginx 将升级请求从客户端发送到后台服务器,必须明确设置 UpgradeConnection 标题。

总的来说,就是使用 Nginx 反向代理 WebSocket 服务时需要设置 UpgradeConnectionheader

nginx 配置

  1. 出现报错时的配置

    location /ws {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_pass http://127.0.0.1:9000/ws;
    }

  2. 反向代理成功的配置

    location /ws {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_pass http://127.0.0.1:9000/ws;

    # 关键配置 start
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    # 关键配置 end
    

    }

完美解决报错问题(WebSocket connection to "xxx/xxx" failed)。


Nginx 相关推荐

  • Nginx学习与实战 · 配置HTTP2
  • Nginx学习与实战 · 解决SPA单页面应用CDN缓存问题
  • Nginx学习与实战 · 解决net::ERR_CONTENT_LENGTH_MISMATCH 206问题
  • Nginx warn:conflicting server name ‘127.0.0.1’ on 0.0.0.0:8010, ignored
  • Nginx反向代理WebSocket服务连接报错:WebSocket connection to ‘wss://xxx/xxx’ failed

欢迎访问:天问博客

最后

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

小编已加密:aHR0cHM6Ly9kb2NzLnFxLmNvbS9kb2MvRFVrVm9aSGxQZUVsTlkwUnc==出于安全原因,我们把网站通过base64编码了,大家可以通过base64解码把网址获取下来。

Nginx反向代理WebSocket服务连接报错:WebSocket connection to “wssxxxxxx“ failed相关推荐

  1. Nginx反向代理Redis服务

    Nginx反向代理Redis服务 Nginx代理Redis 第一步:redis 配置及启动 vim redis.conf port 6379 # bind 127.0.0.1 daemonize ye ...

  2. Tomcat系列之服务器的基本配置及Nginx反向代理tomcat服务

    大纲 一.Tomcat 基本配置 1.为Tomcat提供SysV脚本 2.catalina 脚本讲解 3.telnet 登录管理Tomcat 4.配置Tomcat虚拟主机 5.Tomcat图形管理接口 ...

  3. nginx 反向代理 apache 服务

    反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时 ...

  4. Nginx反向代理+Go服务实践

    前言 在后端开发期间,会为前端或者平台上提供API服务接口,这时.我们看完今天的文章可以详细了解到Nginx反向代理到后端服务上的过程. Nginx: 是一个高性能的HTTP和反向代理web服务器,同 ...

  5. 用nginx反向代理功能将WS转为加密websocket (wss)

    原来写的服务器端程序支持websocket非加密协议,即仅支持 ws://ip/file 形式的访问,现在网站的主协议变成了https了,再通过ws://协议来访问原服务器,浏览器阻止了.查找原因就是 ...

  6. nginx反向代理实现指定接口访问指定机器

    location表达式类型 location = 表示精确匹配 location ^~ 表示uri以指定字符或字符串开头 location ~ 表示区分大小写的正则匹配 location ~* 表示不 ...

  7. 【完整教程】nginx反向代理wss,实现不修改服务器端websocket代码加密通讯请求

    最近在用go语言的leaf框架开发H5游戏的服务器端,用websocket的方式进行服务器与客户端之间的通讯.然后之前都是本地websocket开发,要部署到facebook平台的时候,平台要求与第三 ...

  8. 分布式与微服务系列(三)、SpringBoot+Zookeeper集群+Nginx反向代理+Dubbo分布式托管(提供者、消费者)

    SpringBoot+Zookeeper集群+Nginx反向代理+Dubbo分布式托管(提供者.消费者) 一.软件架构和微服务需求 1.1.微服务需求 1.2.框架选择 1.3.集群分布(下面为此图实 ...

  9. 微服务架构(5):nginx反向代理cors解决跨域

    微服务架构(5):nginx反向代理&&cors解决跨域 学习目标 1.使用域名访问本地项目 1.1.统一环境 1.2.域名解析 1.3.解决域名解析问题 1.4.nginx解决端口问 ...

最新文章

  1. java线程同步以及对象锁和类锁解析(多线程synchronized关键字)
  2. C语言函数集(十五)
  3. SAP 作业类型主数据
  4. java重入锁_java并发编程:可重入锁是什么?
  5. ffplay.c学习-1-框架及数据结构
  6. 肖鹏:微博数据库那些事儿(图灵访谈)
  7. 彻底学会使用epoll(一)——ET模式实现分析
  8. 123. 买卖股票的zui佳时机 III(JavaScript)
  9. java验证码技术_java验证码前台技术
  10. 开发日记:接口开发设计
  11. python 训练好的模型怎么保存_MNIST数据集训练完如何保存成模型文件?
  12. android:图片裁剪
  13. tf入门-池化函数 tf.nn.max_pool 的介绍
  14. spring源码-第三个后置处理器
  15. 手把手教你二维数组打印
  16. 美学原理-杨宁课堂笔记
  17. 一文看懂神经网络工作原理
  18. IOS实现3DTouch功能
  19. Network (哈工大网课笔记)
  20. 六顶思考帽(edward de bono)

热门文章

  1. VUE项目部署Tomcat页面刷新404问题解决方法
  2. 如何在vmware15上安装linux镜像
  3. C语言判断字符串是否为回文字符串
  4. Redis 链接时好时坏[ error ] [2]Redis::pconnect(): connect() failed: Connection timed out
  5. 2013福建高职单招计算机类专业,2013年福建高职单招-计算机类专业-知识试题.docx...
  6. Tomcat调优教程(转载) 来自周立大佬文章
  7. ARMv8-A编程指导之电源管理(1)
  8. 项目1在线交流平台-4. 使用radis高性能储存方案-3.redis使用场景-点赞功能
  9. 自然语言处理从入门到应用——词向量的评价方法
  10. 数智融合,油化创新-英诺森出席中国石油石化企业信息技术交流大会