什么是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

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

配置Nginx反向代理WebSocket,以代理noVNC为例的更多相关文章

  1. CentOS 7 学习(二) 配置Nginx反向代理

    CentOS 7 学习(二) 配置Nginx反向代理 Nginx可以通过php-fpm来运行PHP程序,也可以转向apache,让apache调用php程序来运行. 不过对于Nginx来说,其反向代理 ...

  2. 为docker私有registry配置nginx反向代理

    公司的Docker私有registry已经搭建好了,用官方的registry image很容易就搭建好了.现在就是要用nginx的反向代理把它放出来,以便在外网可以访问. 我的上一篇blog 讲了如何 ...

  3. 使用SSL配置Nginx反向代理的简单指南

    反向代理是一个服务器,它接收通过Web发出的请求,即http和https,然后将它们发送到后端服务器(或服务器).后端服务器可以是单个或一组应用服务器,如Tomcat,wildfly或Jenkins等 ...

  4. 配置LANMP环境(7)-- 配置nginx反向代理,与配置apache虚拟主机

    一.配置nginx反向代理 1.修改配置文件 vim /etc/nginx/nginx.conf 在35行http下添加一下内容: include /data/nginx/vhosts/*.conf; ...

  5. Linux CentOS7部署ASP.NET Core应用程序,并配置Nginx反向代理服务器

    前言: 本篇文章主要讲解的是如何在Linux CentOS7操作系统搭建.NET Core运行环境并发布ASP.NET Core应用程序,以及配置Nginx反向代理服务器.因为公司的项目一直都是托管在 ...

  6. 配置nginx反向代理服务器,解决浏览器跨域调用接口的限制问题

    配置nginx反向代理服务器,解决浏览器跨域调用接口的限制问题 - 大venn的博客 - CSDN博客https://blog.csdn.net/u011135260/article/details/ ...

  7. 配置 Nginx 反向代理 WebSocket

    用Nginx给网站做反向代理和负载均衡是广泛使用的一种Web服务器部署技术.不仅能够保证后端服务器的隐蔽性,还可以提高网站部署灵活性. 今天我们来讲一下,如何用Nginx给WebSocket服务器实现 ...

  8. 如何在 CentOS 7 用 cPanel 配置 Nginx 反向代理

    导读 Nginx 是最快和最强大的 Web 服务器之一,以其高性能和低资源占用率而闻名.它既可以被安装为一个独立的 Web 服务器,也可以安装成反向代理 Web 服务器.在这篇文章,我将讨论在安装了 ...

  9. [亲测]ASP.NET Core 2.0怎么发布/部署到Ubuntu Linux服务器并配置Nginx反向代理实现域名访问

    前言 ASP.NET Core 2.0 怎么发布到Ubuntu服务器?又如何在服务器上配置使用ASP.NET Core网站绑定到指定的域名,让外网用户可以访问呢? 步骤 第1步:准备工作 一台Liun ...

随机推荐

  1. python第二天 列表、元组

    今天学习了列表.元组相关的知识:与C中的数组列表相似,元组为只读列表: 以及切片相关操作: #!usr/bin/env python #-*-coding:utf-8-*- # Author calm ...

  2. MySQL 复制夯住一例排查以及原理探讨

    目录 目录 一 引子 二 故障分析 三 故障解决 四 原理探讨 五 小结 文/温国兵 一 引子 研发反应,有台从库和主库不同步.由于业务读操作是针对从库的,数据不同步必定会带来数据的不一致,业务获取的 ...

  3. [MapReduce_add_5] MapReduce 实现标签的生成与聚合

    0. 说明 MapReduce 实现标签的生成与聚合 介绍 && 流程图 && 程序编写 1. 介绍 [1.1 原始有效数据] 86913510 {"revi ...

  4. sql2008和sql2012混合安装后打开SQL Server 配置管理器查看出现“远程过程调用失败”0x800706be

    sql2008和sql2012混合安装后打开SQL Server 配置管理器SQL Server服务出现“远程过程调用失败”0x800706be 网上很多人都说这个解决方案,通过卸载“Microsof ...

  5. godaddy.com 都转到 www.dnspod.cn

    我们在godaddy上注册了域名,但因为godaddy对域名解析的诸多限制和缓慢. 所以必需把域名服务器更改为dnspod上,然后再在dnspod上做A记录,CNAME等设置都很方便.

  6. 2.1Python数据处理篇之---内建有关数学的函数

    目录 目录 前言 (一)数学相关得内建函数 (二)具体演示 1.求绝对值 2.创建一个复数 3.求商和余数 4.求x得y次幂 5.生成一个序列 6.四舍五入 7.对一个集合求和 8.求最大值 9.求最 ...

  7. POI生成Web版Word文件

    POI生成Web版Word文件 1       通过URL的输入流实现 2       直接把Html文本写入到Word文件 所谓的使用POI生成Web版Word文件是指利用POI将Html代码插入到 ...

  8. SQL 加载

    首先新建表 第一张表 order_info 第二张表 user_info 登录mysql mysql -u root -p 在开始加载数据之前配置编码 查看默认编码 show variables li ...

  9. Zabbix安装 Grafana安装

    每天学习一点点 编程PDF电子书免费下载: http://www.shitanlife.com/code 前提: 先需要安装好 lamp环境. 官方文档: https://www.zabbix.com ...

  10. go标准库的学习-sync互斥

    https://studygolang.com/pkgdoc 导入方法: import "sync" sync包提供了基本的同步基元,如互斥锁.除了Once和WaitGroup类型 ...