部署 hackChat 并在 Nginx 同时提供 http 和 websocket 服务
主要重点在于单端口并且同一个路径提供不同服务,首先需要满足以下条件:
- 首先根据官方教程完成部署,并使用
pm2 start ./server/main.js --node-args="-r esm" --name hackchat
启动服务。 - 假设在创建配置时,默认选择的是 6060 端口作为 websocket 端口。
- 假设需要使用 once.chat 这个域名,但是只想使用 443 端口,不希望 websocket 走 6060。
流程:
- 修改
client/client.js
,在 320 行找到var wsPath = ':6060';
改为var wsPath = '/';
。 - 根据普通的 Nginx 配置流程,完成端口监听,SSL 等配置,我这边用的 BT面板,就不再详细说了。
修改 Nginx 配置,对于
localtion /
进行如下配置location / { root /www/wwwroot/hackchat/client; if ( $http_upgrade = "websocket" ) { proxy_pass http://127.0.0.1:6060; } proxy_set_header Host $host:$server_port; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header REMOTE-HOST $remote_addr; add_header X-Cache $upstream_cache_status; proxy_set_header X-Host $host:$server_port; proxy_set_header X-Scheme $scheme; proxy_connect_timeout 30s; proxy_read_timeout 86400s; proxy_send_timeout 30s; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; }
此时打开网页,即可正常加载静态资源的同时,也能用根路径连接到 websocket 服务。
如果嫌麻烦的话呢,也可以修改 wsPath ,带上 /chat-ws
这样的 path (官方的实现方式),在 Nginx 中就可以直接通过 location 进行区分了,配置起来更简单一点。
欢迎体验: once.chat