By accessing the website and accepting the Cookie Policy, you agree to use the cookies provided by the Site in accordance with to analyze traffic, remember your preferences, and optimize your experience.
WebSocket使用Nginx反向代理解决Wss服务问题
2020-09-25 16:12:42    554    0    0
emengweb

WebSocket 可以减小客户端与服务器端建立连接的次数,减小系统资源开销,只需要一次 HTTP 握手,整个通讯过程是建立在一次连接/状态中,也就避免了 HTTP 的非状态性,服务端会一直与客户端保持连接,直到你关闭请求,同时由原本的客户端主动询问,转换为服务器有信息的时候推送

大多数用它还来做实时通信的功能,我们可以使用 Swoole 的 WebSocket\Server 来作为服务端

客户端的话,支持就很多了,比如 Chrome/Firefox/高版本 IE/Safari 等浏览器内置了 JS 语言的 WebSocket 客户端、微信小程序开发框架内置的 WebSocket 客户端、异步的 PHP 程序中可以使用 Swoole\Http\Client 作为 WebSocket 客户端等等

ws 和 wss 是什么?有什么区别

Websocket 使用 ws 或 wss 的统一资源标志符,类似于 HTTP 或 HTTPS,其中 wss 表示在 TLS 之上的 Websocket ,相当于 HTTPS 了

默认情况下,Websocket 的 ws 协议使用 80 端口,wss 协议默认使用 443 端口

这篇文章我们来看一下如何使用 Nginx 反向代理来解决 WebSocket 的 wss 服务问题,即客户端通过 Wss 协议连接 Nginx 然后 Nginx 通过 Ws 协议和 Server 通讯

也就是说 Nginx 负责通讯加解密,Nginx 到 Server 是明文的,Swoole 不用开启 ssl,而且还能隐藏服务器端口和负载均衡

配置 Nginx

server {
    #下面这个部分和正常配置 https 没有什么区别
    listen 443;
    server_name 域名;

    ssl on;

    #申请域名对应的证书
    ssl_certificate 你的证书.crt;
    ssl_certificate_key 你的密匙.key;

    ssl_session_timeout 5m;
    ssl_session_cache shared:SSL:10m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2 SSLv2 SSLv3;
    ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
    ssl_prefer_server_ciphers on;
    ssl_verify_client off;

    #反向代理 需要把后续.php 相关的和重写 index.php 的部分删除
    location / {
        proxy_redirect off;
        proxy_pass http://127.0.0.1:9501; #转发到你本地的 9501 端口 对应 ws 的端口
        proxy_set_header Host $host;
        proxy_set_header X-Real_IP $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr:$remote_port;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection upgrade;
    }
}

重载 Nginx 服务,如果没有错误,打开测试工具,服务地址输入 wss://域名

无需添加端口号,点击开启连接,提示 OPENED,恭喜你 Wss 服务就可以了

上一篇: [必需] Arm 版本 Manjaro 源配置

下一篇: Nginx反向代理之端口转发TCP/UDP

554 人读过
文档导航