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

Apache虚拟主机配置问题导致WSS服务器无法连接求助

问题诊断与解决方案

核心问题分析

  1. 前端连接地址错误:直接访问wss://sub.example.com:8080时,你的Node WebSocket服务器仅监听未加密的ws协议(未配置SSL证书),浏览器用wss请求会因服务器无法提供SSL证书而失败。同时,Apache已将HTTP请求跳转到HTTPS,但WebSocket代理规则未在HTTPS虚拟主机中配置。
  2. Apache代理规则位置错误:WebSocket代理配置仅放在80端口虚拟主机中,而HTTPS请求走443端口,该端口的虚拟主机无对应代理规则,导致HTTPS下的WebSocket请求无法转发到Node服务器。

具体修复步骤

1. 修正HTTPS虚拟主机配置(sub.example.com-le-ssl.conf)

在443端口的<VirtualHost>块中添加WebSocket代理规则,所有HTTPS请求(包括WSS)都走这个端口:

<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerName sub.example.com
    
    # 新增WebSocket代理规则
    ProxyPass "/ws/" "ws://localhost:8080/"
    ProxyPassReverse "/ws/" "ws://localhost:8080/"
    
    # 原有HTTP服务器代理
    ProxyPass / http://localhost:8000/
    ProxyPassReverse / http://localhost:8000/
    
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    SSLCertificateFile /etc/letsencrypt/live/sub.example.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/sub.example.com/privkey.pem
    Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>

2. 调整前端连接代码

将WebSocket连接地址改为Apache代理路径,无需指定8080端口(443是HTTPS默认端口,浏览器自动处理):

socket = new WebSocket('wss://sub.example.com/ws/')

3. ws与wss使用说明

  • 客户端→Apache:用wss(加密),公网通信需SSL保障安全。
  • Apache→Node服务器:用ws(未加密)即可,本地回环通信(localhost)无需额外加密,节省资源。若Node服务器配置了SSL证书,也可使用wss://localhost:8080/,但无必要。

4. 重启服务生效

修改配置后,重启Apache和Node应用:

systemctl restart apache2
# 重启你的Node WebSocket服务

额外验证

  • 访问https://sub.example.com/ws/,返回Upgrade Required说明代理规则生效。
  • 检查UFW规则,确保443端口已开放(8080端口可仅开放本地访问,无需对外暴露,所有请求通过Apache代理)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 14:53:07