NGINX如何配置才能支持wss

1. 前言

PHP搭建websocket的服务端还是比较简单的,不得不夸一下swoole,点赞!

//创建WebSocket Server对象,监听0.0.0.0:9502端口。
$ws = new Swoole\WebSocket\Server('0.0.0.0', 9502);

//监听WebSocket连接打开事件。
$ws->on('Open', function ($ws, $request) {
    $ws->push($request->fd, "hello, welcome\n");
});

//监听WebSocket消息事件。
$ws->on('Message', function ($ws, $frame) {
    echo "Message: {$frame->data}\n";
    $ws->push($frame->fd, "server: {$frame->data}");
});

//监听WebSocket连接关闭事件。
$ws->on('Close', function ($ws, $fd) {
    echo "client-{$fd} is closed\n";
});

$ws->start();

当我们把代码运行起来(在终端执行php websocketServer.php),并且把云服务器的安全组开放9502端口之后,ws://协议就已经可以使用了。
客户端连接:

let url = `ws://110.122.1.58:9502`;

// 打开一个websocket
let websocket = new WebSocket(url);
// 建立连接
websocket.onopen = () => {
  console.log("连接成功");
};

2. 如何使用wss协议呢?

注意:wss协议不支持ip+端口的形式连接!
所以当我们直接将URL改成let url = 'wss://110.122.1.58:9502'是连接不上的,这时候就需要后端服务器的配合,利用NGINX做一个反向代理。

把URL改成域名的形式:
let url = 'wss://domain.com/abc'
最后的abc是自定义的,一般会取名为wss或者websocket。

在NGINX的配置文件中添加如下配置:

#nginx转发websocket服务端处理
location /abc{
    #websocket服务端监听的地址和端口
    proxy_pass http://127.0.0.1:9502;
    proxy_read_timeout 300s;
    proxy_send_timeout 300s;

    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    proxy_http_version 1.1;
    proxy_set_header Connection "upgrade";
    proxy_set_header Upgrade $http_upgrade;
}

重启服务器,wss协议就可以连通啦~

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容