slimbo
slimbo

Reputation: 2759

Setting up multiple node servers using Nginx without subdomains

I have been looking all over but haven't found a single person hosting multiple node sites on the same server without using subdomains. I want something like the following...

website.com/app1 -> 127.0.0.1:3000
website.com/app2 -> 127.0.0.1:9000

upstream node {
   server 127.0.0.1:3000;
   keepalive 64;
}

server {
    listen 80;
    server_name  webaddress.com;

    root /var/www/trucks/;

    location /livereload {

        proxy_pass http://localhost:35729;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
    }

    location /app1 {
        rewrite ^/app1/?(.*) /$1 break;
        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:3000;
        root /var/www/trucks;
}

I have even tried rewriting the request; however, that doesn't appear to be having any effect. If I remove /app1 it works correctly. The closest I have gotten is forwarding to multiple sites but then the local express routes are invalid.

Upvotes: 6

Views: 1813

Answers (4)

alfredocambera
alfredocambera

Reputation: 3410

the problem with your configuration its that you are mixin regular http applications proxying with websockets application proxying. There is no need to use rewrite. Here is the simplest configuration I could come up with:

server {
  listen 80;
  index index.html index.htm;

  server_name _;

  proxy_http_version 1.1;
  proxy_set_header Upgrade $http_upgrade;
  proxy_set_header Connection "upgrade";
  proxy_set_header Host $host;

  location /node1 {
      proxy_pass http://localhost:8888;
  }
  location /node2 {
      proxy_pass http://localhost:9999;
  }
}

I recommend you redding the websockets related documentation on nginx site: http://nginx.org/en/docs/http/websocket.html

Upvotes: 0

mtsr
mtsr

Reputation: 3142

I have a working setup as follows:

server {
  listen 8080;
  server_name localhost;
  location / {
    proxy_pass http://localhost:3000;
    proxy_set_header Host $host;
  }
  location /api {
    proxy_pass http://localhost:3001;
    rewrite ^/api(.*) /$1 break;
    proxy_set_header Host $host;
  }
}

Upvotes: 1

Moch Lutfi
Moch Lutfi

Reputation: 552

Upvotes: 0

Techniv
Techniv

Reputation: 1967

Have you tried to use the proxy_redirect directive instead of rewrite ? http://wiki.nginx.org/HttpProxyModule#proxy_redirect

Upvotes: 0

Related Questions