You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

本地WebSocket连接问题:HTTP下WS正常,HTTPS下WSS无法连接

解决Apache2下WSS连接失败问题

针对你在Ubuntu 18.04的Apache2服务器上遇到的WS正常但WSS无法连接的问题,按以下步骤排查解决:

1. 启用必要的Apache模块

WSS需要SSL支持和WebSocket代理转发功能,先确保模块已启用:

  • 启用SSL模块:sudo a2enmod ssl
  • 启用代理相关模块:sudo a2enmod proxy proxy_http proxy_wstunnel
  • 重启Apache生效:sudo systemctl restart apache2

2. 配置HTTPS虚拟主机的WebSocket代理

编辑你的HTTPS虚拟主机配置文件(通常位于/etc/apache2/sites-available/[your-site]-ssl.conf),添加WebSocket代理规则,并确保证书配置正确:

<VirtualHost *:443>
    ServerName 192.168.18.101
    SSLEngine On
    # 替换为你的自签名证书和私钥路径
    SSLCertificateFile /path/to/your/cert.crt
    SSLCertificateKeyFile /path/to/your/private.key

    # 代理WebSocket请求到后端服务(假设后端WS监听localhost:8080/ws,按需修改)
    ProxyPass /ws ws://localhost:8080/ws
    ProxyPassReverse /ws ws://localhost:8080/ws

    # 站点基础配置
    DocumentRoot /var/www/your-project-root
    <Directory /var/www/your-project-root>
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

配置完成后启用该站点(如果未启用):sudo a2ensite [your-site]-ssl.conf,再重启Apache。

3. 处理自签名证书的信任问题

浏览器默认不信任自签名证书,这会直接导致WSS连接失败:

  • 手动访问https://192.168.18.101,在浏览器的安全提示中选择"高级"->"继续访问",完成证书信任
  • 若为非浏览器客户端(如Node.js),可临时关闭证书验证(仅测试环境使用):
    const ws = new WebSocket('wss://192.168.18.101/ws', {
      rejectUnauthorized: false
    });
    

4. 检查网络与端口

  • 确保443端口对外开放:sudo ufw allow 443
  • 验证Apache监听443端口:sudo netstat -tulpn | grep apache2,确认输出包含0.0.0.0:443或:::443
  • 检查后端WebSocket服务的端口是否未被防火墙拦截,且服务正常运行

5. 查看日志定位错误

  • 查看Apache错误日志:sudo tail -f /var/log/apache2/error.log,排查代理失败、证书加载错误等信息
  • 查看后端WebSocket服务的日志,确认是否有WSS的连接请求到达

6. 确认前端连接地址正确性

确保前端代码中的WSS地址与配置的代理路径一致,例如:

const socket = new WebSocket('wss://192.168.18.101/ws');

内容的提问来源于stack exchange,提问作者Muhammad Qasim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 15:07:03