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

如何正确配置Apache2以实现Websocket SSL(wss)代理?

问题描述

在AWS中部署了应用及soketi.app服务器,所有服务位于负载均衡之后。应用可正常访问(443流量转发至实例的8788端口),但通过wss(SSL)协议连接soketi服务器时失败,报错:Could not connect to wss://mydomain.com/6001/app/blahblah。目标是将Apache配置为websocket代理,而非让浏览器与websocket服务器直接建立SSL连接。

相关配置文件如下:

Apache2 000-default.conf(已安装并启用必要的Apache模块)

<VirtualHost *:8788>
       ServerAdmin webmaster@localhost
       DocumentRoot /var/www/public/
       <Directory />
           Options FollowSymLinks
           AllowOverride None
       </Directory>
       <Directory /var/www/public/>
            Options All
            AllowOverride All
            order allow,deny
            allow from all
        </Directory>
       ErrorLog /var/log/apache2/error.log

       LogLevel warn
</VirtualHost>

<VirtualHost *:6001>
ProxyPass /app ws://127.0.0.1:6001/app
ProxyPassReverse /app ws://127.0.0.1:6001/app
</VirtualHost>

soketi-config.json

{
    "debug": true,
    "appManager.array.apps": [
        {
            "id": "blah",
            "key": "blah",
            "secret": "blah"
        }
    ]
}
解决方案

按以下步骤调整配置:

  1. 合并VirtualHost配置,统一处理流量
    负载均衡已将443的SSL流量转发到实例8788端口,无需单独配置6001端口的VirtualHost。将WebSocket代理规则整合到8788端口的配置中,让Apache统一处理HTTP和WebSocket请求:
<VirtualHost *:8788>
       ServerAdmin webmaster@localhost
       DocumentRoot /var/www/public/
       <Directory />
           Options FollowSymLinks
           AllowOverride None
       </Directory>
       <Directory /var/www/public/>
            Options All
            AllowOverride All
            order allow,deny
            allow from all
        </Directory>

       # 添加WebSocket代理规则
       ProxyPass /app ws://127.0.0.1:6001/app
       ProxyPassReverse /app ws://127.0.0.1:6001/app

       ErrorLog /var/log/apache2/error.log
       LogLevel warn
</VirtualHost>
  1. 明确Soketi监听配置
    在soketi-config.json中添加监听参数,确保服务仅在本地6001端口运行,避免对外暴露:
{
    "debug": true,
    "host": "127.0.0.1",
    "port": 6001,
    "appManager.array.apps": [
        {
            "id": "blah",
            "key": "blah",
            "secret": "blah"
        }
    ]
}
  1. 更新前端连接地址
    将原连接地址wss://mydomain.com/6001/app/blahblah改为wss://mydomain.com/app/blahblah——负载均衡会把443流量转至实例8788,Apache再将/app路径代理到本地soketi服务。

  2. 重启Apache生效配置
    执行命令重启服务:

sudo systemctl restart apache2
  1. 检查负载均衡WebSocket支持
    确认AWS负载均衡的443监听规则已开启WebSocket支持,目标组需允许HTTP升级头的转发,确保WebSocket握手请求能正常传递到后端实例。
验证

在浏览器控制台执行以下代码测试连接:

const socket = new WebSocket('wss://mydomain.com/app/blahblah');
socket.onopen = () => console.log('连接成功');
socket.onerror = (err) => console.error('连接失败', err);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 17:06:50