Nginx实战之反向代理WebSocket的配置实例
实现方案
采用目前比较成熟的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那样是典型的短连接,所以反向代理服务器需要允许连接保持着打开,而不是在它们看起来空闲时就将它们关闭。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。
上一篇: nginx 基本入门教程
下一篇: Oracle 递归查询
推荐阅读
-
在Nginx服务器中配置mod_proxy反向代理的方法
-
使用Nginx反向代理与proxy_cache缓存搭建CDN服务器的配置方法
-
自动化Nginx服务器的反向代理的配置方法
-
在Nginx服务器上配置Google反向代理的基本方法
-
Nginx服务器作反向代理时的缓存配置要点解析
-
Nginx配置实例-反向代理实现浏览器请求Nginx跳转到服务器某页面
-
Nginx服务器作反向代理实现内部局域网的url转发配置
-
Nginx服务器的SSL证书配置以及对SSL的反向代理配置
-
Nginx服务器的反向代理proxy_pass配置方法讲解
-
nginx proxy_pass反向代理配置中url后加不加/的区别介绍