Question

Nginx 502 Bad Gateway and Node.JS app

Posted March 18, 2014 140.3k views
Folks, I'm trying to install a Node.JS application in a subfolder of a WordPress site running on Nginx, Varnish and php-fpm. Any attempt to access the site gives a **502 Bad Gateway** browser error and the following message in Nginx's error log.
[error] 20247#0: *143 connect() failed (111: Connection refused) while connecting to upstream, client: 127.0.0.1, server: example.com, request: "GET /forum HTTP/1.1", upstream: "http://127.0.0.1:4567/forum", host: "example.com"
I've researched the cause of such error messages, but have yet to come up with a solution. It it helps, here's my Nginx config:
server {
    
    server_name example.com www.example.com;
      
    root /home/public_html/;
    listen 8080;
     
    index index.html index.htm index.php;

    include conf.d/drop;

        location / {
                
            try_files $uri $uri/ /index.php?q=$uri&$args;
        }

        location ~ \.php$ {
            fastcgi_buffers 8 256k;
            fastcgi_buffer_size 128k;
            fastcgi_intercept_errors on;
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_pass unix:/var/run/php5-fpm.sock;


        }

        location ~* \.(css|js|png|jpg|jpeg|gif|ico)$ {
                expires 1d;
        }

## Settings for proxying NodeBB forum installation. Added March 14 2014.

        location ^~ /forum {

        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;

        proxy_pass http://127.0.0.1:4567/forum;
        proxy_redirect off;

        # Socket.IO Support
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

    }

}

These answers are provided by our Community. If you find them useful, show some love by clicking the heart. If you run into issues leave a comment, or add your own answer to help others.

×
Submit an Answer
15 answers

I was having this same issue with running multiple apps/websites on one server along with node.js app running on port 3000.

It turned out to be SELinux permission issue and solved by running this command:
sudo semanage port –add –type httpportt –proto tcp 3000

Hope this helps anyone having the same problem.

Posting this configs hoping that somebody else will spot something that I'm missing:

This is the Nginx config from forum.example.com under sites-available directory, which is properly linked to sites-enabled directory


#
server {
server_name forum.example.com www.forum.example.com;

listen 8080;

## Settings for proxying Node.JS forum installation.

location / {

proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;

proxy_pass http://127.0.0.1:4567/;
proxy_redirect off;

# Socket.IO Support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

}

}



And below are the settings from the apps config file:


{
"base_url": "http://127.0.0.1",
"port": "4567",
"use_port": true,
"secret": "secret",
"bind_address": "0.0.0.0",
"database": "redis",
"redis": {
"host": "127.0.0.1",
"port": "6379",
"password": "secret2",
"database": "0"
},
"bcrypt_rounds": 12,
"upload_path": "/public/uploads",
"relative_path": ""
}


Now if I attempt to access the app from forum.example.com, I get:


[error] 9921#0: *148 connect() failed (111: Connection refused) while connecting to upstream, client: 127.0.0.1, server: forum.example.com, request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:4567/", host: "forum.example.com"


which is just the same error I get if I try to access it from a subfolder.

Any clues?

I had similar issue and spent a some time on it fugiuring out why it happened and the thing was, that I simply forgot to do npm install, because one of the core dependencies wasn’t installed on the server. What a shame…

With node/nginx proxy and ajax requests get 502:

I fixed this issue by simply stopping and starting pm2 and ensuring only 1 pm2 process was running.

As you can see from the config, the Node.JS app is running on port 4567, which is different from the Nginx port, running on a www port.

The Node.JS application is started using Forever - "forever start app.js".

The thing is, without Nginx, I can access the app using the IP/URL of the main site and the Node apps port, like this: http://example.com:4567.

But not via Nginx.
"502 Bad Gateway" means that NodeJS is not running. Make sure your NodeJS app is running.
you need run the node proyect:

/home/test/nodejs/
>node server.js

Remember: nodejs need run in diferent port at nginx.
How to node: http://nodejs.org/
Is your application serving 127.0.0.1:4567/forum or JUST 127.0.0.1:4567?

The way I see it, you're probably serving it on 127.0.0.1:4567 and want to pass it to nginx on example.com/forum

Removing the /forum from 127.0.0.1:4567/forum might help.
I have actually tried that, but still get the same result. Matter of fact, I have also tried accessing the application via a subdomain, after making the necessary changes, but still getting just about the same error, which is,


014/03/18 23:19:26 [error] 9921#0: *148 connect() failed (111: Connection refused) while connecting to upstream, client: 127.0.0.1, server: forum.example.com, request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:4567/", host: "forum.example.com"


You can see from the above error that the app is being served at http://127.0.0.1:4567

The only difference between mine and other setups I've come across is that Nginx is sitting behind Varnish (Varnish[port 80] > Nginx[port 8080]. But I don't see that as an issue because the main site is working well.
And on the browser, the error is still "502 Bad Gateway."

Btw, I running Nginx 1.4.6
Previous 1 2 Next