So I have been looking through a lot of posts, websites, and have still not gotten this problem fixed.
I have previously had a project running on my server, including socket.io, without problems.
But now that I am uploading this new project to the server, it seems that the socket.io always returns 404.
Sorry if I have overlooked something obvious here.
Nginx config:
server {
    listen 80 default_server;
    listen [::]:80 default_server;
    index index.html index.htm index.nginx-debian.html;
    server_name localhost;
    location / {
        proxy_pass http://localhost:3001;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
    location /demo/ {
        proxy_pass http://localhost:3000/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_cache_bypass $http_upgrade;
    }
    location /socket.io/ {
        proxy_pass http://localhost:3000/;
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-NginX-Proxy true;
        proxy_pass_request_headers on;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_cache_bypass $http_upgrade;
    }
}
My socket.io server:
const app = express();
const server = http.createServer(app);
const io = require('socket.io')(server);
server.listen(3000);
Client (Pug):
script(src="/socket.io/socket.io.js")
Note that the code above is what I have ended up with after reading through a lot of questions on here, on serverfault, aswell as blog posts several places.
I don't remember using a second location "tag" (is that what it is called?) for socket.io for the first one I used.
The proxy pass should be:
location /socket.io/ {
  proxy_pass http://localhost:3000/socket.io/;
  ... 
}
Please see https://medium.com/@ibraheemabukaff/how-to-proxy-websockets-with-nginx-e333a5f0c0bb for details...
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With