NGINX => serve several applications on a single host name with sub-uris
nginx
Solution
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.
Problem
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?