olivoil
olivoil

Reputation: 317

NGINX => serve several applications on a single host name with sub-uris

I'd like to serve several applications from the same server, reversed-proxied through nginx. I'd like these applications to be available through a single domain name with sub-uris.

e.g.

www.mydomain.com/nodejs => caught by nginx listening to port 80 and served through to a node.js app running on port 3001

www.mydomain.com/rails => caught by nginx listening to port 80 and served through to a rails app running on port 3002

My first stab is to start with two upstreams:

# /etc/nginx/sites-available/mydomain.com

upstream nodejs {
  server 127.0.0.1:3001;
}

upstream rails {
  server 127.0.0.1:3002;
}

server {
  listen 80 default deferred;

  # What do I put here so that
  # mydomain.com/nodejs is proxied to the nodejs upstream and
  # mydomain.com/rails  is proxied to the rails  upstream ???
}

Does anyone know this or point me in the right direction?

Upvotes: 6

Views: 4089

Answers (2)

user3012307
user3012307

Reputation: 31

About the question ,css、js、images files are missed , you can do like this,

if you use express framework。 you need add this code line

app.enable('trust proxy');  

this value 'trust proxy' default value is disable.

Upvotes: 0

kgr
kgr

Reputation: 9948

How about:

upstream nodejs {
    server 127.0.0.1:3001;
}

upstream rails {
    server 127.0.0.1:3002;
}

server {
    listen 80;  

    location /nodejs {
        proxy_pass         http://nodejs;
        proxy_redirect     off;
        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    }

    location /rails {
        proxy_pass         http://rails;
        proxy_redirect     off;
        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    }

}

or shortly:

server {   
    listen 80;     

    location /nodejs {
        proxy_pass         http://127.0.0.1:3001;
        proxy_redirect     off;
        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    }

    location /rails {
        proxy_pass         http://127.0.0.1:3002;
        proxy_redirect     off;
        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    }

}

?

Most of the proxy directives are optional (you probably just need proxy_pass and proxy_redirect) but useful.

Upvotes: 6

Related Questions