码迷,mamicode.com
首页 > Web开发 > 详细

配置Nginx反向代理HTML Console--Nginx集成Vcenter 6.X HTML Console系列之 3--(共4)

时间:2019-02-24 15:03:19      阅读:914      评论:0      收藏:0      [点我收藏+]

标签:esxi   后端服务   nginx   规范   创建   safari   应该   反向代理服务   color   

大多数代理服务器都支持websocket转发,这里我们选择Nginx作为代理服务器。

1、正式开始前,先介绍一下Websocket Proxying

WebSocket 协议提供了一种创建支持客户端和服务端实时双向通信Web应用程序的方法。作为HTML5规范的一部分,WebSockets简化了开发Web实时通信程序的难度。目前主流的浏览器都支持WebSockets,包括火狐、IE、Chrome、Safari以及Opera等,而且,越来越多的服务器应用框架也开始支持WebSockets。

要在企业产品中使用WebSockets,为满足高性能和高可用性,需要多个WebSocket服务器。负载均衡层需要支持WebSocket协议。Nginx从1.3版起就开始支持WebSocket协议,而且可以担当WebSocket应用程序的反向代理以及实现负载均衡。

WebSocket协议和HTTP协议不同,但是WebSocket协议的握手和HTTP是兼容的,它使用HTTP的Upgrade协议头将连接从HTTP连接升级到WebSocket连接。这个特性使得WebSocket应用程序可以很容易地应用到现有的基础设施。例如,WebSocket应用可以使用标准的80和443 HTTP端口,因此可以通过现有的防火墙设施。

WebSockets应用程序会在客户端和服务器之间建立一个长连接,使得开发实时应用很容易。HTTP的Upgrade协议头机制用于将连接从HTTP连接升级到WebSocket连接,Upgrade机制使用了Upgrade协议头和Connection协议头。反向代理服务器在支持WebSocket协议方面面临着一些挑战。挑战之一是WebSocket是一个逐段转发(hop-by-hop)协议,因此当代理服务器拦截到来自客户端的Upgrade请求时,代理服务器需要将自己的Upgrade请求发送给后端服务器,包括适合的请求头。而且,由于WebSocket连接是长连接,与传统的HTTP端连接截然不同,故反向代理服务器还需要允许这些连接处于打开(Open)状态,而不能因为其空闲就关闭了连接。

Nginx通过在客户端和后端服务器之间建立隧道来支持WebSockets通信。为了让Nginx可以将来自客户端的Upgrade请求发送到后端服务器,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";
}

 

2、本次案例代理的整个过程是如下:

浏览器 -----wss协议----> exsi主机

变为

浏览器-------ws|wss协议-----> nginx -------ws|wss协议----->exsi主机

2.1下面示例是:ESXi对外使用80端口,即ws,proxy后也是80端口

 server {
 listen 80;
 server_name 服务ip; 
 location / { 
    proxy_pass              http://$ESXi_IP;
    proxy_http_version      1.1;
    proxy_set_header        Upgrade $http_upgrade;
    proxy_set_header        Connection "Upgrade";

}
}

2.2下面示例是:ESXi对外使用443端口,即wss,proxy后是81端口

 

 server {
 listen 81;
 server_name 服务ip; 
 location / { 
    proxy_pass              https://$ESXi_IP;
    proxy_http_version      1.1;
    proxy_set_header        Upgrade $http_upgrade;
    proxy_set_header        Connection "Upgrade";

}
} 

 

2.3下面示例是:ESXi对外使用443端口,即wss,proxy后是82端口,同时变为了ssl加密

 此时需要为Nginx配置正式和私钥,并声明是ssl加密,具体参见标红部分

  ssl_certificate /etc/ssl/certs/9-rui.crt;
  ssl_certificate_key /etc/ssl/private/9-rui.key;

 server {

 listen 82 ssl;
 server_name 服务ip; 
 location / { 
    proxy_pass              https://$ESXi_IP;
    proxy_http_version      1.1;
    proxy_set_header        Upgrade $http_upgrade;
    proxy_set_header        Connection "Upgrade";

}
} 

 

注意:

以上配置,使用浏览器是可以用的,但是真正测试时,应该使用ws客户端进行测试,以避免404等未知错误,因为ws是无法通过浏览器直接测试的

具体参见:

英文版:NGINX as a WebSocket Proxy

中文版:Nginx担当WebSockets代理

这只是单台主机的配置,针对大量主机,该怎么配置Nginx呢,参见下一篇

 

其他参考:

Configure Nginx to reverse proxy VMRC traffic

WebSocket的原理,以及和Http的关系

配置Nginx反向代理HTML Console--Nginx集成Vcenter 6.X HTML Console系列之 3--(共4)

标签:esxi   后端服务   nginx   规范   创建   safari   应该   反向代理服务   color   

原文地址:https://www.cnblogs.com/lizhaoxian/p/10426179.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!