Nginx的socket转发端口如何配置

发布时间 - 2023-05-24 00:00:00    点击率:

nginx 转发 socket 端口常见场景:在线学习应用,在常规功能之外,增加一个聊天室功能,后端选择 swoole 提供服务提供者,同时不想前端直接 ip:port 方式链接到服务,需要使用 nginx 进行转发。

常规情况,我们可以在用户页面,直接建立 socket 链接,但这样的操作会暴露端口,带来一定的安全隐患,使用 nginx 进行转发,可以隐藏端口。额外的问题就是一些 header 参数也需要在转发过程中带给 socket 服务提供者,其他只需要 nginx 处理一下从常规协议转换到 websocket 就可以。

其中,"upgrade" 是 逐跳(hop-by-hop) 头,无法从客户端转发到代理服务器,通过转发代理,客户端可以使用 connect 方法来规避此问题。但是,这不适用于反向代理,因为客户端不知道任何代理服务器,并且需要在代理服务器上进行特殊处理。同时逐跳头包含 "upgrade" 和 "connection" 都无法传递,则需要在转换为 websocket 的时候带上这两个参数:例如:

location /chat/ {
  proxy_pass http://backend;
  proxy_http_version 1.1;
  proxy_set_header upgrade $http_upgrade;
  proxy_set_header connection "upgrade";
}

进阶:让转发到代理服务器的 "connection" 头字段的值,取决于客户端请求头的 "upgrade" 字段值。例如:

http {
  map $http_upgrade $connection_upgrade {
    default upgrade;
    ''   close;
  }

  server {
    ...

    location /chat/ {
      proxy_pass http://backend;
      proxy_http_version 1.1;
      proxy_set_header upgrade $http_upgrade;
      proxy_set_header connection $connection_upgrade;
    }
  }

注意:示例中的 http://backend 为一组负载均衡的服务器,只有单台服务器的,可以写成 proxy_pass http://127.0.0.1:9501; 这样的。此外,默认情况下,在 60 秒内未传送任何数据的链接将被关闭,时间可以使用 proxy_read_timeout 指令来延长。或者代理服务器可以配置定时发送 ping 帧来重置超时及检查链接是否可用。


# nginx  # swoole  # http  # websocket  # 负载均衡  # 代理服务器  # 客户端  # 要在  # 可以使用  # 进阶  # 适用于  # 我们可以  # 这两个  # 将被  # 只需要 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251811 】 【 AI营销90571


相关推荐: 企业网站制作这些问题要关注  Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?  lovemo网页版地址 lovemo官网手机登录  如何快速登录WAP自助建站平台?  Laravel用户密码怎么加密_Laravel Hash门面使用教程  javascript事件捕获机制【深入分析IE和DOM中的事件模型】  中山网站制作网页,中山新生登记系统登记流程?  Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】  QQ浏览器网页版登录入口 个人中心在线进入  如何在企业微信快速生成手机电脑官网?  中山网站推广排名,中山信息港登录入口?  如何利用DOS批处理实现定时关机操作详解  Laravel API资源类怎么用_Laravel API Resource数据转换  成都网站制作公司哪家好,四川省职工服务网是做什么用?  Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】  郑州企业网站制作公司,郑州招聘网站有哪些?  JavaScript Ajax实现异步通信  如何在腾讯云服务器快速搭建个人网站?  实现点击下箭头变上箭头来回切换的两种方法【推荐】  rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted  网站制作免费,什么网站能看正片电影?  如何用低价快速搭建高质量网站?  JS去除重复并统计数量的实现方法  PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)  Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程  如何在阿里云香港服务器快速搭建网站?  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  如何快速查询网址的建站时间与历史轨迹?  HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】  javascript中的数组方法有哪些_如何利用数组方法简化数据处理  Laravel DB事务怎么使用_Laravel数据库事务回滚操作  如何在腾讯云服务器上快速搭建个人网站?  如何用好域名打造高点击率的自主建站?  iOS验证手机号的正则表达式  Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】  如何快速生成高效建站系统源代码?  Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】  Python图片处理进阶教程_Pillow滤镜与图像增强  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  如何在VPS电脑上快速搭建网站?  javascript基于原型链的继承及call和apply函数用法分析  如何快速上传建站程序避免常见错误?  Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优  香港服务器租用每月最低只需15元?  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  使用豆包 AI 辅助进行简单网页 HTML 结构设计  Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】  Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门  怎么用AI帮你为初创公司进行市场定位分析?