У меня есть небольшое веб-приложение, которое поставляется с Express.js и подключается к бэкэнду с Socket.io. Чтобы сделать его публичным, я использую 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
}
А вот фрагмент моего серверного кода:
io.on('connection', (socket) => {
// Stuff here
socket.on('disconnect', () => {
console.log('disconnected!')
// Stuff that relies on the disconnect event
})
})
Когда пользователь закрывает вкладку или перезагружает страницу, событие отключения должно сработать, но оно никогда не происходит при прохождении соединения через Nginx и Cloudflare. Заранее спасибо за любую помощь!
ОБНОВЛЕНИЕ: Кажется, что через несколько секунд после перезагрузки / закрытия событие отключения наконец регистрируется.