首页 > 解决方案 > 通过 SSL 在子域上服务 Nodejs Socketio:WebSocket 握手期间出错:意外的响应代码:302

问题描述

<VirtualHost ip:443>
    ServerAdmin webmaster@localhost
    ServerName webrtc.example.com
    ServerAlias webrtc.example.com
    DocumentRoot /var/www/webrtc.example.com

    SSLEngine on        
    SSLProxyEngine on
    SSLCertificateFile /etc/letsencrypt/live/webrtc.example.com/cert.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/webrtc.example.com/privkey.pem
    SSLCertificateChainFile /etc/letsencrypt/live/webrtc.example.com/chain.pem

    ProxyRequests Off
    ProxyPreserveHost Off
    ProxyPass / https://web.example.com:8544/
    ProxyPassReverse / https://example.com:8544 /
</VirtualHost>

我想为在子域的 8544 端口上运行的 socket.io 提供服务。所以我像上面一样在 apache 中更新了我的 000-default.conf 文件。

在我重新启动 apache 服务器后,https://webrtc.example.com/socket.io/socket.io.js工作正常。但在网页中它返回一个错误:

失败:WebSocket 握手期间出错:意外响应代码:400

为了解决这个错误,我在上面添加了这段代码ProxyRequests

RewriteEngine On
RewriteCond %{QUERY_STRING} transport=websocket [NC]
RewriteRule /(.*) ws://web.example.com:8544/$1[P,L]

并且错误更改为 HTTP 302 错误。我应该怎么做才能解决这个问题?

标签: node.jsapachesocket.ioproxy

解决方案


推荐阅读