您的位置:首页 > 运维架构 > 反向代理

宝塔Apache通过反向代理配置wss服务

2020-07-19 04:32 2975 查看

如果网站使用https来与WebSocket建立通信,如果是PHP语言那不能直接用用WSS来通信,因为WEB服务器验证证书的时候只支持443端口,其他的端口是不能通过SSL证书验证的,但是如果你把WSS也修改为443端口,那就存在端口占用问题,那就只能用Apache(或Nginx)来做反向代理,把通过WSS通信直接代理到WS的端口就能正常通信了,具体操作如下:
准备工作
1、WX能正常握手与通信
2、配置好网址的ssl
3、利用apache转发443端口至指定端口WS端口
4、Apache(或Nginx)一般作为网站服务器运行着网站,为了不影响原来的站点使用,这里使用地址 域名/wss 作为wss的代理入口。也就是客户端连接地址为 wss://域名/wss

服务端配置(案例):

{
$this->server = new Swoole\WebSocket\Server("0.0.0.0", 9501, SWOOLE_BASE, SWOOLE_SOCK_TCP | SWOOLE_SSL);//端口可以自定义

$this->server->set([
'worker_num' => 4, //一般设置为服务器CPU数的1-4倍
'max_request' => 1000,
'task_worker_num' => 4,
'heartbeat_check_interval' => 3600,
'heartbeat_idle_time' => 3600,
'open_http_protocol' => false,
'ssl_cert_file' => "/swoole/ssl/ssl.pem",//WSS的证书用除Key外的其他两个生成的,可以自行百度
'ssl_key_file'  => "/swoole/ssl/ssl.key"//WSS的Key
]);

客户端配置(案例):

// 连接服务端
function connect() {
// 创建websocket
//ws = new WebSocket("wss://game.dmgoods.com:9292");
//ws与wss共存 2020年4月7日16:19:23 name:GUI
var sockdomain = document.domain;
if(document.location.protocol=='https:'){
ws = new WebSocket('wss://'+sockdomain+'/wss');
}
else{
ws = new WebSocket('ws://'+sockdomain+':9501');
}

站点配置文件修改(代理转发):

SSLProxyEngine on
ProxyRequests Off
ProxyPass /wss ws://127.0.0.1:9501
ProxyPassReverse /wss ws://127.0.0.1:9501

最后一步重启Apache,开启任务,大功告成!

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: