Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Socket.io 404 on nginx

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.

like image 833
ItzBenteThePig Avatar asked Nov 01 '25 04:11

ItzBenteThePig


1 Answers

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...

like image 200
Jedd Avatar answered Nov 02 '25 21:11

Jedd