Redian新闻
>
配置 Nginx 反向代理 WebSocket

配置 Nginx 反向代理 WebSocket

公众号新闻

链接:https://www.cnblogs.com/connect/p/nginx-proxy-websocket.html

什么是Nginx

Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好。

什么是WebSocket

WebSocket协议是创建客户端和服务器端需要实时双向通讯的webapp提供了一个选择。其为HTML5的一部分,WebSocket相较于原来开发这类app的方法来说,其能使开发更加地简单。

WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工(full-duplex)通信——允许服务器主动发送信息给客户端。

在实现websocket连线过程中,需要通过浏览器发出websocket连线请求,然后服务器发出回应,这个过程通常称为“握手” 。在 WebSocket API,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。在此WebSocket 协议中,为我们实现即时服务带来了两大好处:

  1. Header。互相沟通的Header是很小的-大概只有 2 Bytes。

  2. Server Push。服务器的推送,服务器不再被动的接收到浏览器的请求之后才返回数据,而是在有新数据时就主动推送给浏览器。

什么是noVNC

noVNC提供一种在网页上通过html5的Canvas,访问机器上vncserver提供的vnc服务,需要做tcp到websocket的转化,才能在html5中显示出来。网页就是一个客户端,类似win下面的vncviewer,只是此时填的不是裸露的vnc服务的ip+port,而是由noVNC提供的websockets的代理,在noVNC代理服务器上要配置每个vnc服务,noVNC提供一个标识,去反向代理所配置的vnc服务。

WebSocket代理

要将客户端和服务器之间的连接从HTTP / 1.1转换为WebSocket,使用HTTP / 1.1中提供的协议切换机制。

然而有一个微妙之处:由于“Upgrade”是一个 逐跳的头,它不会从客户端传递到代理服务器。使用正向代理,客户可以使用该CONNECT 方法来规避这个问题。但是,这不适用于反向代理,因为客户端不知道任何代理服务器,并且需要在代理服务器上进行特殊处理。

从版本1.3.13开始,nginx实现了特殊的操作模式,如果代理服务器返回了代码101(交换协议)的响应,客户端和代理服务器之间建立隧道,客户端通过请求中的“Upgrade”请求头。

如上所述,包括“Upgrade”和“Connection”的逐跳标题不会从客户端传递到代理服务器,因此为了让代理服务器知道客户端将协议切换到WebSocket的意图,这些标题必须明确地通过:

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

server {
listen 80; #修改监听的端口
server_name _;
location / {
proxy_pass #修改为需要被反向代理的WebSocket的IP和端口号
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
}

默认情况下,如果代理服务器在60秒内没有传输任何数据,连接将被关闭。这个超时可以通过proxy_read_timeout指令来增加 。或者,代理服务器可以配置为周期性地发送WebSocket ping帧来重置超时并检查连接是否仍然存在。

实例--以代理noVNC为例

实验环境

  1. 已经安装好noVNC的CentOS7虚拟机[安装说明](叫它vnc-server),IP地址(NAT模式)为192.168.204.10

  2. 最小化安装的CentOS7虚拟机(叫它proxy-server),IP地址(NAT模式)为192.168.204.133,IP地址(仅主机模式)为192.168.50.128

  3. Windows7虚拟机(叫它client),IP地址(仅主机模式)为192.168.50.129

  4. 首先vnc-serverclient的网络是隔离的,现在让proxy-server反向代理vnc-servernoVNC服务,达到的效果是client访问proxy-server就可以访问到vnc-servernoNVC服务

配置proxy-server

proxy-server上关闭防火墙

setenforce 0
systemctl stop firewalld
systemctl disable firewalld

proxy-server上安装nginx

yum install -y epel*
yum install -y nginx
systemctl start nginx
systemctl enable nginx

proxy-server上编辑Nginx的配置文件

vim /etc/nginx/nginx.conf

http区块添加如下内容

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

server {
listen 8080; #修改监听的端口
server_name _;
location / {
proxy_pass http://192.168.204.10:6080/; #修改为需要被反向代理的WebSocket的IP和端口号
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
}

重启nginx服务

systemctl restart nginx

client上测试

Windows7网卡配置

通过火狐浏览器访问proxy-server仅主机网卡的web服务http://192.168.50.128:8080/vnc.html
可以看到,通过nginx已经成功代理了WebSocket

END

官方站点:www.linuxprobe.com

Linux命令大全:www.linuxcool.com

刘遄老师QQ:5604215

Linux技术交流群:2636170

(新群,火热加群中……)

想要学习Linux系统的读者可以点击"阅读原文"按钮来了解书籍《Linux就该这么学》,同时也非常适合专业的运维人员阅读,成为辅助您工作的高价值工具书!


微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
逛完国内Costco,准备反向代购回大温...Chinese Soccer Has a New Hero: Singapore’s Veteran Goalkeeper如何使用DOCKER部署一个GO WEB应用程序拥抱全球化,格创东智聘德国工程科学院院士Prof. Dr. Eicke R. Weber任外籍专家顾问Shanghai Study Unlocks Key to Better Pancreatic Cancer Treatment30 Years of Chinese Pro Soccer: Can Clubs Make a Comeback?万字详解,带你彻底掌握 WebSocket 用法Cloudflare 正式开源Nginx替代品:PingoraISSTA 2024 | 北大提出CoderUJB,面向代码大模型的可执行多任务代码评估基准揭示真实能力与局限Harsher Recess Rules Turn School Toilets Into Social Hubs香港人买爆深圳,“反向代购”团队月入20万曲线救国昨晚跟着CG练SEC又又又起诉Consensys了?这次还带上了Lido和Rocket Pool?go语言中的socket和http英伟达Blackwell平台网络配置分析迟来的读书心得spring是“春天”,chicken是“鸡”,那spring chicken什么意思?精选PM岗位丨NetApp、BlackRock、Apple等公司开放岗位!逛完国内Costco,准备反向代购回北美...Docker三剑客之Docker SwarmSofi Checking & Savings 银行账户【$550 开户奖励】Claude 3.5 Sonnet 在 Amazon Bedrock 正式上线!逛完国内Costco,我准备反向代购回芝加哥了...死磕nginx系列-nginx日志配置欣闻上海人口负增长(人民日报1995年4月5日)云原生消息流系统Apache RocketMQ在腾讯云的大规模生产实践Rocket Internet:以复刻商业模式闻名的投资孵化公司Linux —— curl 命令使用代理、以及代理种类介绍k8s WebTerminal 开发实战(文末送Docker书籍)云原生消息流系统 Apache RocketMQ 在腾讯云的大规模生产实践docker-compose部署Prometheus+Alertmanager并配置企业微信告警深入解析Nginx Location匹配规则:顺序详解与最佳实践少年犯China’s Colleges Are Locked in a Heated Debate … About Curtains
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。