带有代理的 WSS 使用端口 443 浏览器客户端连接到端口 6001 上的 websocket 服务器

Posted

技术标签:

【中文标题】带有代理的 WSS 使用端口 443 浏览器客户端连接到端口 6001 上的 websocket 服务器【英文标题】:WSS with proxy using port 443 browser client connect to websocket server on port 6001 【发布时间】:2021-10-18 11:08:11 【问题描述】:

我在浏览器客户端使用“laravel websocket if beyondcode”在端口 6001 上为 WebSocket 服务。但是当我将浏览器客户端请求从使用端口 80/443 更改时,它没有连接到 WebSocket 服务器。

浏览器客户端请求网址:

wss://test.example.com:443/app/ABCDEFG?protocol=7&client=js&version=7.0.3&flash=false

标签中添加的代码

SSLProxyEngine on
ProxyPreserveHost On
ProxyPass /app wss://test.example.com:6001/$1
ProxyPassReverse /app wss://test.example.com:6001/$1
ProxyRequests off

谁能帮我解决这个问题?

【问题讨论】:

【参考方案1】:

这是在我的 centos 中工作的最终工作代码。

标签关闭之前添加以下代码

<IfModule mod_proxy.c>
    ProxyRequests Off
    SSLProxyEngine On

    # Ensure WebSocket protocol is forwarded correctly
    RewriteEngine on
    RewriteCond %HTTP:UPGRADE ^Websocket$ [NC]
    RewriteCond %HTTP:CONNECTION Upgrade$ [NC]
    RewriteRule /app/(.*) wss://%HTTP:HOST:6001/app/$1 [P]
</IfModule>

下面是我的推杆设置

window.pusher = new Pusher(process.env.MIX_PUSHER_APP_KEY, 
    cluster: process.env.MIX_PUSHER_APP_CLUSTER,
    encrypted: false,
    wsHost: window.location.hostname,
    // commented this because it should be use default port 80/443
    //wsPort: process.env.MIX_LARAVEL_WEBSOCKETS_PORT,
    //wssPort:process.env.MIX_LARAVEL_WEBSOCKETS_PORT,
    enabledTransports: ['ws', 'wss'],
    forceTLS: true,
);

【讨论】:

以上是关于带有代理的 WSS 使用端口 443 浏览器客户端连接到端口 6001 上的 websocket 服务器的主要内容,如果未能解决你的问题,请参考以下文章

微信小程序 WebSocket 使用非 443 端口连接

(5)WebSocket 与 HTTP

c# 怎么连接wss

从 ws:// 切换到 wss:// 需要注意啥

带代理的节点 GCM - 端口 443 已禁用

Websockets 代理并与 IIS Web 服务器同时使用端口 443