13397158231   jevian_ma@worldflying.cn

使用nginx解决一台服务器中ws协议与wss协议共存问题

2017-07-09 13:29:06

        众所周知,nginx是一个高性能的web静态服务器,同时具有很强大的反向代理以及fastcgi功能,因此现在在web端最常用的配置方式就是ngixn处理静态元素,然后使用apache+php模块,tomcat,php-fpm等工具处理动态代码。

        通常apache+php模块,tomcat直接使用反向代理的方式,而php-fpm则使用fastcgi的通信方式。但是在web通信中,还有一种使用非常流行的通信方式,那就是websocket通信,他是基于web的长链接技术,由于这个技术的出现,保证了客户端可以被动的接收来自服务器的消息。

        考虑到数据安全问题,现在越来越多的网站开始使用https协议,一种将数据通过ssl加密后传输的一种技术。websocket协议也有其对应的ssl加密技术,其协议标识为wss(普通的为ws)。但是由于ws与https这两个协议配置都需要服务器的支持。由于我以前一直在使用nginx,对于在nginx下配置ssl非常熟练,但是这次的案子需要我配置wss协议。一下子我人都傻了。

        下面来说说我是这么解决给wss协议配置ssl的吧。

        其实说起来也没什么,而且还有点卑鄙,由于我一开始想直接在websocket服务器软件上配置ssl,但是通过实验得知,websocket服务器配置了wss,就不具备ws功能了,而目前我的另一个案子又需要使用不加密的ws通信方式,所以直接在websocket下配置的方式没有走通,后来我想到以前有通过nginx配置https协议,反向代理apache的http协议,因此我想,是否可以通过配置nginx,反向代理wss协议到ws上去呢?按照这个思路我查询了相关资料,最后居然被我给找到方法来了。

server {
        listen 15301;
        listen [::]:15301;

        server_name www.worldflying.cn;

        ssl on;
        ssl_certificate /var/www/worldflying/www.worldflying.cn.pem;
        ssl_certificate_key /var/www/worldflying/www.worldflying.cn.key;

        location / {
                proxy_pass http://127.0.0.1:15300;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
        }
}

        上面的配置就是我之前的那个案子的配置,意思是wss协议的端口是15301,ws协议的端口是15300,当有客户通过正确的域名与15301这个端口来连接wss协议时,就会在服务器内部反向代理到15300这个普通的ws端口去,由于在服务器内部反向代理,自然也就不存在安全问题。这样我就成功的实现了websocket服务器中,ws协议与wss协议共存的问题了。

优秀产品推荐:可编程网络IO控制器

上一篇:互联网+新风口,还不快来开发app

下一篇:wordpress直接操作数据库的方法

联系我们

  • 地址:武汉市东湖高新开发区光谷总部国际1栋2412室
  • QQ:932773931
  • 电话:027-59761089-806
  • 手机:13397158231
  • 邮箱:jevian_ma@worldflying.cn

关注公众号

扫码添加微信

沃航(武汉)科技有限公司版权所有

备案号:鄂ICP备16014230号-1

本网站由提供CDN加速/云存储服务