【发布时间】:2019-03-24 15:05:57
【问题描述】:
我有一个使用 Express.js 提供服务并使用 Socket.io 连接到后端的小型 Web 应用程序。为了公开,我使用 Nginx 作为反向代理,然后在最前面使用 Cloudflare。该应用程序依赖于在关闭或重新加载时触发disconnect 事件来跟踪在线用户等。通过 Nginx 和 Cloudflare 时,断开连接事件永远不会在后端触发。在本地开发时会这样做。
这是我的 Nginx 配置文件:
server {
listen 80;
server_name colab.gq;
server_name www.colab.gq;
location / {
proxy_pass http://localhost:3000;
proxy_set_header X-Forwarded-For $remote_addr;
}
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/colab.gq/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/colab.gq/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
这是我的服务器端代码的 sn-p:
io.on('connection', (socket) => {
// Stuff here
socket.on('disconnect', () => {
console.log('disconnected!')
// Stuff that relies on the disconnect event
})
})
当用户关闭选项卡或重新加载页面时,断开连接事件应该触发,但在通过 Nginx 和 Cloudflare 传递连接时不会触发。提前感谢您的帮助!
更新:似乎在重新加载/关闭断开事件后几秒钟终于注册了。
【问题讨论】:
标签: javascript node.js nginx socket.io cloudflare