设为首页 收藏本站

运维网

查看: 7168|回复: 2

[经验分享] nginx 代理websocket ws wss

[复制链接]

累计签到:1 天
连续签到:1 天
发表于 2015-1-30 09:50:56 | 显示全部楼层 |阅读模式
Websocket协议是为了解决web即时应用中服务器与客户端浏览器全双工通信的问题而设计的,是完全意义上的Web应用端的双向通信技术,可以取代之前使用半双工HTTP协议而模拟全双工通信,同时克服了带宽和访问速度等的诸多问题。协议定义为ws和wss协议,分别为普通请求和基于SSL的安全传输,占用端口与http协议系统,ws为80端口,wss为443端口,这样可以支持HTTP代理。
    WebSocket协议是一种双向通信协议,它建立在TCP之上,同http一样通过TCP来传输数据,但是它和http最大的不同有两点:1.WebSocket是一种双向通信协议,在建立连接后,WebSocket服务器和Browser/UA都能主动的向对方发送或接收数据,就像Socket一样,不同的是WebSocket是一种建立在Web基础上的一种简单模拟Socket的协议;2.WebSocket需要通过握手连接,类似于TCP它也需要客户端和服务器端进行握手连接,连接成功后才能相互通信。
1.3.13 nginx从1.3.13版本以后开始支持websocket代理
具体配置如下



1
2
3
4
5
6
7
8
9
10
11
12
13
14
http {
    map $http_upgrade $connection_upgrade {
        default upgrade;
        ''      close;
    }
    server {
        ...
        location /chat/ {
            proxy_pass http://backend;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection $connection_upgrade;
        }
    }



参考 http://nginx.org/en/docs/http/websocket.html

   之前的nginx版本可以通过nginx_tcp_proxy_module第三方模块通过tcp代理实现
    (模块地址https://github.com/yaoweibin/nginx_tcp_proxy_module)
安装方法:


        $ wget 'http://nginx.org/download/nginx-1.2.1.tar.gz'        $ tar -xzvf nginx-1.2.1.tar.gz        $ cd nginx-1.2.1/        $ patch -p1 < /path/to/nginx_tcp_proxy_module/tcp.patch        $ ./configure --add-module=/path/to/nginx_tcp_proxy_module        $ make        $ make install配置例子:用本地的7070、7080分别代理ws和wss协议(wss需要证书)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
tcp {
    upstream websockets {
        ## webbit websocket server in background
        server 127.0.0.1:5501;
        ## server 127.0.0.1:5502; ## add another server if you like!
        check interval=3000 rise=2 fall=5 timeout=1000;
    }   
    server {
        server_name _;
        listen 7070;
        timeout 43200000;
        websocket_connect_timeout 43200000;
        proxy_connect_timeout 43200000;
        so_keepalive on;
        tcp_nodelay on;
        websocket_pass websockets;
        websocket_buffer 1k;
    }
    server {
        server_name _;
        listen 7080;
        ssl on;
        ssl_certificate      /path/to/cert.pem;
        ssl_certificate_key  /path/to/key.key;
        timeout 43200000;
        websocket_connect_timeout 43200000;
        proxy_connect_timeout 43200000;
        so_keepalive on;
        tcp_nodelay on;
        websocket_pass websockets;
        websocket_buffer 1k;
    }
}



注意上面的内容不要写在http里面,是和http并列级别的。


运维网声明 1、欢迎大家加入本站运维交流群:群①:263444886群②:197202523群③:485755530群④:201730672群⑤:202807635运维网交流群⑥:281548029
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、其他单位或个人使用、转载或引用本文时必须注明原文的出处
4、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
5、运维网 - 服务您的运维操作管理专家!
6、联系人Email:[email protected] 网址:www.iyunv.com

点击关注更多内容

累计签到:4 天
连续签到:1 天
发表于 2017-9-27 15:43:43 | 显示全部楼层
您这段代码是需要写在nginx.conf主配置文件中吗,我测试了下,https网站 调用ws,替换为wss,还是不行呢

运维网声明 1、欢迎大家加入本站运维交流群:群①:263444886群②:197202523群③:485755530群④:201730672群⑤:202807635运维网交流群⑥:281548029
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、其他单位或个人使用、转载或引用本文时必须注明原文的出处
4、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
5、运维网 - 服务您的运维操作管理专家!
6、联系人Email:[email protected] 网址:www.iyunv.com

您需要登录后才可以回帖 登录 | 立即注册  

本版积分规则  允许回帖邮件提醒楼主

关注运维网官方微信X

关注运维网官方微信

扫描二维码关注运维网官方微信,最新一手资源尽在官方微信!快快关注我们吧...

扫描微信二维码查看详情

客服 E-mail:[email protected]

本站由安畅云和青云提供云计算服务

运维网--中国最专业的运维工程师交流社区

京ICP备14039699号-1 Copyright © 2012-2017

使用手机软件扫描微信二维码

关注我们可获取更多热点资讯

Good good study day day up !


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


合作伙伴: 青云cloud 51idc

快速回复 返回顶部 返回列表