开源标准版系统长链接反向代理详解

一、nginx反向代理

location /notice {
    proxy_pass http://127.0.0.1:50001/;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header X-real-ip $remote_addr;
    proxy_set_header X-Forwarded-For $remote_addr;
}
location /msg {
    proxy_pass http://127.0.0.1:50002/;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header X-real-ip $remote_addr;
    proxy_set_header X-Forwarded-For $remote_addr;
}

Copy

这个 nginx 配置是为了反向代理 CRMEB 标准版的长连接服务。

location /notice 对应的是公告长连接,proxy_pass 反向代理到 50001 端口。
location /msg 对应的是聊天长连接,proxy_pass 反向代理到 50002 端口。

Copy

关键的是下面的几行配置,这些配置的作用是:

#设置代理使用 HTTP/1.1 协议,以支持 WebSocket 长连接。
proxy_http_version 1.1;

#将请求头中的 Upgrade 字段传递给后端服务器,通知后端需要升级到 WebSocket 协议。
proxy_set_header Upgrade $http_upgrade;

#将连接方式改为 "upgrade",通知需要升级到 WebSocket。
proxy_set_header Connection "upgrade";

Copy

后面的两行配置是设置代理时需要增加的 headers,用来传递真实 IP。

#增加的 headers,传递真实 IP。
proxy_set_header X-real-ip $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;

Copy

所以总结一下,这些配置的作用就是让 nginx 支持对 WebSocket 的反向代理,实现长连接服务的反向代理。

这组 nginx 配置的实际作用是:

    1. 实现公告和聊天的长连接服务的反向代理。
    2. 通过 location 分别代理到不同端口,实现公告和聊天长连接的分离。
    3. 支持WebSocket协议,可以代理WebSocket长连接。
    4. 传递真实用户 IP,方便服务器获取。

将长连接服务部署在内网,通过 nginx 反向代理到公网。好处是:

    1. 可以实现内外网分离,服务器安全性更高。
    2. 可以随时调整长连接服务的部署,而不影响公网访问。
    3. 可以实现公告和聊天的分离部署,系统拆分更清晰。
    4. nginx 可以承载更多的长连接,有更好的性能。
    5. 有利于按域名进行访问控制。

所以实际上是利用 nginx 提供反向代理和负载均衡的功能,实现 CRMEB 长连接服务的反向代理,使得系统部署更加灵活安全。

二、apache反向代理

ProxyPass /notice ws://127.0.0.1:50001/
ProxyPass /msg ws://127.0.0.1:50002/
ProxyPassReverse /notice ws://127.0.0.1:50001/
ProxyPassReverse /msg ws://127.0.0.1:50002/

Copy

其实默认的apache的方向代理应该是下方的配置

# 公告长连接反向代理以及#聊天长连接反向代理
ProxyPass /notice ws://127.0.0.1:50001/
ProxyPass /msg ws://127.0.0.1:50002/
ProxyPassReverse /notice ws://127.0.0.1:50001/
ProxyPassReverse /msg ws://127.0.0.1:50002/

# 设置http version为1.1以支持websocket
ProxyProtocol http/1.1

# 将 Upgrade 和 Connection 请求头传递给后端
ProxyPassReverse "/notice" "upgrade"
ProxyPassReverse "/msg" "upgrade"

# 传递真实IP
ProxyPreserveHost On
RequestHeader set X-Real-IP %{REMOTE_ADDR}s
RequestHeader set X-Forwarded-For %{REMOTE_ADDR}s

Copy

但是Apache 从 2.4.11 版本开始,默认支持 HTTP/1.1 和 WebSocket 协议的反向代理。

也就是说,现在的 Apache 默认就可以代理 WebSocket 连接,不需要显式设置 Protocol 为 HTTP/1.1。

另外,Apache 在代理 WebSocket 时,会自动将 Upgrade 和 Connection 请求头传递给后端服务器。

所以您只需要指定目标服务器地址,而不需要设置协议版本和传递 Upgrade 头,Apache 会自动处理这些细节。

这也体现了 Apache 在反向代理能力上的进步与优化。

你仅仅添加 ProxyPass 和 ProxyPassReverse 就能工作,是因为:

    1. Apache 默认支持 WebSocket 反代,无需指定协议版本
    2. Apache 会自动传递 Upgrade 请求头
    3. 其他头信息在简单反代场景下可不传递

对于Apache来说,80端口和443端口的配置是可以不同的,是否都需要增加反向代理配置,主要取决于实际场景:

    1. 如果你只在80端口提供网站访问,那么只在80端口的VirtualHost中配置反向代理即可。
    2. 如果你在80端口提供普通网站访问,在443端口提供加密HTTPS访问,那么要分别在两个VirtualHost中根据需要配置反向代理。
    3. 如果你在80端口直接跳转到443端口,那么只需要在443端口的VirtualHost中配置反向代理即可。
    4. 如果你在80和443端口都提供网站服务,则需在两个VirtualHost中都配置反向代理,保证HTTP和HTTPS下功能一致。

以上就是对开源标准版的长链接反向代理的详细解读,谢谢大家关注CRMEB

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/902019.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

高等数学-宋浩版2.0-映射

映射:X,Y为非空集合,存在法则F,对X(原像)中每个元素X,按法则F,在Y中有唯一元素与之对应,F为x到Y(镜像)的映射。f:X->Y X原像,Y像,x定义域,Df,Rf &#x…

php后端学习,Java转php

遇到前后端跨域 php解决跨域问题可以加上下面的代码: header(“Access-Control-Allow-Origin:*”); 并且查看自己的数据库信息是否连接成功。 从Java转php 个人感受php跟偏向前端, 写后端逻辑时没有像java又springboot工具方便。 但是和前端联调很方便…

BUUCTF之web篇

第一题 [极客大挑战 2019]EasySQL 打开靶机后可以看到这是一个登陆的页面 我们可以尝试两种方式登录 弱口令爆破(burpsuite) 通过SQL注入里的万能密码来跳过账户和密码验证的过程 这里就需要万能密码aor true # 在这里单引号的作用是结束用户名或者密码…

Python基于TensorFlow实现简单循环神经网络回归模型(SimpleRNN回归算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后关注获取。 1.项目背景 Simple RNN是一种基础的循环神经网络,它能够处理序列数据,例如文本、时间序…

React写关键字高亮的三个方案

1.js正则replaceAlldangerouslySetInnerHTML{{ __html: xxx }}危险属性 步骤最简单,但是是危险属性,不推荐使用,项目中实在没有头绪,可以使用它应急 通过useMemo计算得到新的状态值,赋值给dangerouslySetInnerHTML属性的__html 关键代码: const [state1, setState1] useSt…

【网络原理】网络地址转换----NAT技术详解

💐个人主页:初晴~ 📚相关专栏:计算机网络那些事 我们在 IP协议 一文中介绍过,由于IPv4协议中 IP地址只有32位,导致最多只能表示 42亿9千万个IP地址。但我们需要通过IP地址来标识网络上的每一个设备&#x…

java核心技术点都有哪些

1. 面向对象编程(OOP) 核心概念:类、对象、继承、封装、多态。 比喻:面向对象编程就像是在搭建一个积木城堡。类(Class)是城堡的设计图纸,它定义了城堡的结构和功能;对象&#xff08…

传输层TCP

报头 1.报头和有效载荷如何分离将,有效载荷向上交付? tcp有个标准报头长度为20,那是不是以为我们可以像udp一样分离依靠报头大小去分离,我们仔细去看我们报头中还有个选项没包含到。 我们还有个首部长度,四位可以表…

测试代理IP的有效性和可用性

使用代理IP的有效性和可用性直接关系到用户的工作效率,尤其是在进行数据抓取、网络爬虫和保护个人隐私等场景中。 一、测试代理IP的必要性 代理IP的可用性测试是确保代理服务正常运行的重要步骤。测试代理IP的必要性主要体现在以下几个方面: 提升工作…

【Docker命令】日常使用的Docker命令

Docker常用命令 1、基础命令2、容器管理3、镜像管理推送镜像 4、网络管理5、数据管理 1、基础命令 - docker run:运行一个容器,--name 指定容器的名称,-i 获取标准输入输出,-t显示在终端,-d放到后台运行,--rm容器停止…

STM32传感器模块编程实践(十) 2.4G NRF24L01通信模块简介及驱动源码

文章目录 一.概要二.NRF24L01模块介绍三.NRF24L01模块主要特性四.国产射频芯片SI24R1介绍五.模块接线说明六.参考原理图七.通讯协议介绍八.STM32单片机与NRF24L01模块实现远无线通讯实验1.硬件准备2.软件工程3.软件主要代码4.实验效果 九.源代码工程下载十.小结 一.概要 NRF24…

InnoDB 存储引擎<二>页结构和行结构

目录 ⻚结构 ⾏结构 ⻚结构 ⻚在MySQL运⾏的过程中起到了⾮常重要的作⽤,为了能发挥更好的性能,可以结合⾃⼰系统的 业务场景和数据⼤⼩,对⻚相关的系统变量进⾏调整,⻚的⼤⼩就是⼀个⾮常重要的调整项 1.⻚的⼤⼩可以设置吗&…

RHCSA笔记一

常见的操作系统 UNIX 、 Linux 类、 Windows 类 搭建Linux学习环境 如何安装linux操作系统: 安装独立的 Linux 系统,不再安装其他操作系统。 安装 Windows 与 Linux 并存的多操作系统,启动时通过菜单选择要启动的操作系统。 在虚拟机中安…

十一、数据库配置

一、Navicat配置 这个软件需要破解 密码是:123456; 新建连接》新建数据库 创建一个表 保存出现名字设置 双击打开 把id设置为自动递增 这里就相当于每一次向数据库添加一个语句,会自动增长id一次 二、数据库的增删改查 1、Vs 建一个控…

探索华为云DataArts Insight:数据智能的新引擎

在快速发展的数字化时代,数据已经成为企业最宝贵的资产。如何有效地管理和利用这些数据,以实现商业价值,是每个企业需要面对的重要挑战。华为云DataArts Insight平台应运而生,作为一款强大的数据智能解决方案,它帮助企…

Kotlin-Annotations详解

在Kotlin中,注解(Annotations)是用于为代码提供元数据的一种机制。这些元数据可以被编译器、IDE(集成开发环境)或其他工具使用,以生成代码、执行编译时检查或提供运行时信息。 注解通常被用于类、方法、属…

算法的学习笔记—左旋转字符串(牛客JZ58)

😀前言 在程序设计中,字符串处理问题屡见不鲜,其中“字符串左旋”是一种常见操作,今天我们一起来探讨一个经典的左旋转字符串题目,以及一种优雅的解决方案——三步翻转法。 🏠个人主页:尘觉主页…

anaconda jupyter notebook themes install jupyter notebook样式更改,取消页面头部,全屏展示!

现在已经有很多相关的文章了,我只说简单的解决步骤: 我用的是anaconda的 jupyter notebook,这个要更改主题,方法有: 一,最简单:用 jupyter notebook自带的setting>Theme>自己选&#xff1…

模型 是否树(逻辑树之三)

系列文章 分享 模型,了解更多👉 模型_思维模型目录。决策分支,是与否的逻辑路径。 1 是否树的应用 1.1 个人IP打造中的是否树应用案例:社交媒体营销策略 在个人品牌建设中,是否树可以帮助个人识别关键的决策点&#…

纯GO语言开发RTSP流媒体服务器-RTSP推流直播、本地保存录像、录像回放、http-flv及hls协议分发

温馨提示:我们分享的文章是给需要的人,不需要的人请绕过,不知道为什么总有一些人总觉得我们发的文章是给他看的,我们不逼任何人用或了解,不要一来就攻击我们,我们不惹事但也不怕事!也希望大家和…