Nginx学习之反向代理WebSocket配置实例

写在开始

去年,做过一款竞赛打分的APP。具体需求,同组教师之间可以相互通信,及时通知同组人员,其他组员做了那些操作(当然,这只是针对特定操作)。

实现方案

采用目前比较成熟的WebSocket技术,WebSocket协议为创建客户端和服务器端需要实时双向通讯的webapp提供了一个选择。其为HTML5的一部分,WebSocket相较于原来开发这类app的方法来说,其能使开发更加地简单。大部分现在的浏览器都支持WebSocket,比如Firefox,IE,Chrome,Safari,Opera,并且越来越多的服务器框架现在也同样支持WebSocket。

WebSocket集群

在实际的生产环境中,要求多个WebSocket服务器必须具有高性能和高可用,那么WebSocket协议就需要一个负载均衡层,NGINX从1.3开始支持WebSocket,其可以作为一个反向代理和为WebSocket程序做负载均衡。

Nginx配置

注:看官方文档说 Nginx 在 1.3 以后的版本才支持 websocket 反向代理,所以要想使用支持 websocket 的功能,必须升级到 1.3 以后的版本

NGINX通过允许一个在客户端和后端服务器之间建立的隧道来支持WebSocket。为了NGINX发送来至于客户端Upgrade请求到后端服务器,Upgrade和Connection头部必须被设置明确。

代码实例:

upstream wsbackend {
        server 127.0.0.1:8080;
        server 127.0.0.1:8081;
}

server {
        listen       80;
        server_name  ws.52itstyle.com;
        location / {
            proxy_pass http://wsbackend;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
        }
}

前端配置:

$(function(){
    socket.init();
});
//Nginx反向代理实现websocket
var basePath = "ws://ws.52itstyle.com//acts_competition/";
socket = {
    webSocket : "",
    init : function() {
        if ('WebSocket' in window) {
            webSocket = new WebSocket(basePath+'webSocketServer');
        }
        else if ('MozWebSocket' in window) {
            webSocket = new MozWebSocket(basePath+"webSocketServer");
        }
        else {
            webSocket = new SockJS(basePath+"sockjs/webSocketServer");
        }
        webSocket.onerror = function(event) {
            //alert("websockt连接发生错误,请刷新页面重试!")
        };
        webSocket.onopen = function(event) {

        };
        webSocket.onmessage = function(event) {

                };
    },
    sendData : function(data) {
        webSocket.send(data);
    },
}

最后,重启下Nginx即可。

反向代理服务器在支持WebSocket时面临的挑战

  • WebSocket是端对端的,所以当一个代理服务器从客户端拦截一个Upgrade请求,它需要去发送它自己的Upgrade请求到后端服务器,也包括合适的头。
  • 因为WebSocket是一个长连接,不像HTTP那样是典型的短连接,所以反向代理服务器需要允许连接保持着打开,而不是在它们看起来空闲时就将它们关闭。

小站:http://blog.52itstyle.com/

时间: 2025-01-21 12:29:12

Nginx学习之反向代理WebSocket配置实例的相关文章

Nginx反向代理websocket配置实例_nginx

最近有一个需求,就是需要使用 nginx 反向代理 websocket,经过查找一番资料,目前已经测试通过,本文只做一个记录 复制代码 代码如下: 注: 看官方文档说 Nginx 在 1.3 以后的版本才支持 websocket 反向代理,所以要想使用支持 websocket 的功能,必须升级到 1.3 以后的版本,因此我这边是下载的 Tengine 的最新版本测试的 1.下载 tengine 最近的源码 复制代码 代码如下: wget http://tengine.taobao.org/dow

自动化Nginx服务器的反向代理的配置方法

  这篇文章主要介绍了自动化Nginx服务器的反向代理的配置方法,反向代理是Nginx服务器的招牌功能,需要的朋友可以参考下 如果可以减少过多的外部隔离的API和简化部署的细节 这会是非常好的. 在以前的文章中,我解释了"一些使用反向代理的好处".在我目前的项目里,我们已经构建分布式面向服务的架构,也显式提供了一个HTTP API,我们使用反向代理将请求路由通过API路由给单个组件.我们选择了Nginx Web这个优秀的服务器作为我们的反向代理,它快速.可靠且易于配置.我们通过它将多个

Nginx服务器的反向代理proxy_pass配置方法讲解_nginx

就普通的反向代理来讲 Nginx的配置还是比较简单的,如: location ~ /* { proxy_pass http://127.0.0.1:8008; } 或者可以 location / { proxy_pass http://127.0.0.1:8008; } Apache2的反向代理的配置是: ProxyPass /ysz/ http://localhost:8080/ 然而,如果要配置一个相对复杂的反向代理 Nginx相对Apache2就要麻烦一些了 比如,将url中以/wap/开

Nginx学习之反向代理

配置静态网站 server { listen 80; server_name localhost; location /{ root html; #默认Nginx站点 index index.html index.htm; } location ^~ /itstyle/{ alias /www/itstyle/; #自定义站点,注意都是以斜杠结尾 文件路径自定义不一定是itstyle index index.html index.htm; } error_page 500 502 503 504

Nginx服务器作反向代理实现内部局域网的url转发配置_nginx

情景由于公司内网有多台服务器的http服务要映射到公司外网静态IP,如果用路由的端口映射来做,就只能一台内网服务器的80端口映射到外网80端口,其他服务器的80端口只能映射到外网的非80端口.非80端口的映射在访问的时候要域名加上端口,比较麻烦.并且公司入口路由最多只能做20个端口映射.肯定以后不够用. 然后k兄就提议可以在内网搭建个nginx反向代理服务器,将nginx反向代理服务器的80映射到外网IP的80,这样指向到公司外网IP的域名的HTTP请求就会发送到nginx反向代理服务器,利用n

apache或者nginx一个域名反向代理多个应用系统

问题描述 apache或者nginx一个域名反向代理多个应用系统 一个域名三个服务http://www.abc.com/test1/ 192.168.0.8:121http://www.abc.com/test2/ 192.168.0.8:122http://www.abc.com/test3/ 192.168.0.8:123怎么配置啊? 解决方案 http{ ... server { location /test1/ { proxy_pass http://192.168.0.8:121 pr

Nginx反向代理以及配置优化

  下面配置包含了,nginx配置的一个比较全面的反向代理的例子: user www www worker_processes 8; events { use epoll; worker_connections 10240; } pid /opt/work/log/nginx.pid; error_log /dev/null error; http { include /opt/nginx/conf/mime.types; default_type text/html; log_format p

Nginx服务器作反向代理时的缓存配置要点解析_nginx

这里给出示例,并详解. http { [...] [...] proxy_cache_path /data/nginx/cache/one levels=1:2 keys_zone=one:10m max_size=10g; proxy_cache_key "$host$request_uri"; server { server_name www.jb51.net jb51.net; root /home/www.jb51.net/web; index index.php index.

Nginx为Tomcat服务器作反向代理的配置教程_nginx

web上的server都叫web server,但是大家分工也有不同的. nginx常用做静态内容服务和代理服务器(不是你FQ那个代理),直面外来请求转发给后面的应用服务(tomcat,django什么的),tomcat更多用来做做一个应用容器,让java web app跑在里面的东西,对应同级别的有jboss,jetty等东西. 但是事无绝对,nginx也可以通过模块开发来提供应用功能,tomcat也可以直接提供http服务,通常用在内网和不需要流控等小型服务的场景. apache用的越来越少