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

如何在CentOS Linux 7(Core)、Apache/2.4.54(cPanel)服务器中启用SSL加密WebSocket(WSS)

解决CentOS 7 + cPanel/Apache环境下WebSocket转WSS的问题

我之前帮朋友处理过一模一样的情况,在cPanel+Apache的环境下把ws转成wss其实不难,主要靠Apache的反向代理来实现,同时依托你已经部署好的Let's Encrypt证书完成加密。下面是具体步骤:

1. 确认Apache已启用必要模块

cPanel环境下通常这些模块默认就开了,但还是先检查下更稳妥:

  • 用root权限登录服务器终端,执行:
    httpd -M | grep -E "(proxy|proxy_http|proxy_wstunnel)"
    如果能看到proxy_module、proxy_http_module、proxy_wstunnel_module这三个模块(状态是shared或static),就没问题。要是缺了,直接通过WHM的EasyApache 4界面搜索并启用这三个模块就行,别手动改配置文件,容易搞砸cPanel的默认设置。

2. 添加Apache反向代理配置

cPanel不建议直接修改主配置文件,咱们给目标域名加自定义配置:

  • 登录WHM,找到Apache Configuration -> Include Editor
  • 选择Virtual Host Include,然后挑你要配置的域名(推荐单个域名,别全局乱改),类型选Post Virtual Host Include(加载顺序靠后,优先级更高)
  • 粘贴下面的配置代码,记得根据你的实际需求调整路径:
RewriteEngine On
# 处理WebSocket的升级请求,确保wss能正确转发到ws服务
RewriteCond %{HTTP:Upgrade} =websocket [NC]
RewriteRule /ws/(.*) ws://localhost:8090/$1 [P,L]

# 反向代理普通HTTP请求(如果你的WebSocket服务需要同时处理HTTP的话可选)
ProxyPass /ws http://localhost:8090
ProxyPassReverse /ws http://localhost:8090

# 强制该路径使用SSL,并且明确代理WebSocket连接
<Location "/ws">
    SSLRequireSSL
    ProxyPass ws://localhost:8090
    ProxyPassReverse ws://localhost:8090
</Location>

说明:这里用/ws作为WSS的访问路径,比如你的前端代码里原来写ws://yourdomain.com:8090,现在改成wss://yourdomain.com/ws就行。如果你的WebSocket服务有特定的子路径,比如ws://localhost:8090/chat,那上面的规则也要对应调整。

3. 限制8090端口仅本地访问(安全优化)

为了避免你的原始WS服务直接暴露在外网,咱们把8090端口限制成只有服务器本地能访问:

  • 终端执行以下命令:
    firewall-cmd --add-rich-rule='rule family="ipv4" source address="127.0.0.1" port port="8090" protocol="tcp" accept' --permanent
    firewall-cmd --reload
    这样只有Apache能访问8090端口,外部用户碰不到,更安全。

4. 重启Apache生效配置

在WHM里找到Restart Services -> HTTP Server (Apache)点重启就行,或者终端跑命令:
systemctl restart httpd

5. 测试WSS连接

现在可以验证配置是否生效了:

  • 前端代码把WS地址改成wss://yourdomain.com/ws(对应你配置的路径),测试连接是否正常
  • 也可以用命令行工具wscat测试(先装npm install -g wscat):
    wscat -c wss://yourdomain.com/ws
    如果能成功连接并收发消息,就说明搞定了!

一些注意事项

  • 确保你的WebSocket服务绑定的是localhost或127.0.0.1,别绑定公网IP,避免绕开Apache直接访问
  • Let's Encrypt证书自动续期后,Apache会自动用新证书处理WSS连接,不用额外操作
  • 如果碰到403错误,检查下mod_security是不是拦截了请求,可以临时关闭测试,或者给WebSocket的升级请求加放行规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 16:07:47