5

我想从同一台服务器上提供多个应用程序,通过 nginx 反向代理。我希望这些应用程序可以通过带有 sub-uris 的单个域名提供。

例如

www.mydomain.com/nodejs => 被 nginx 捕获并监听端口 80 并通过在端口 3001 上运行的 node.js 应用程序提供服务

www.mydomain.com/rails => 被 nginx 捕获并监听端口 80 并通过运行在端口 3002 上的 rails 应用程序提供服务

我的第一个尝试是从两个上游开始:

# /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 ???
}

有谁知道这一点或指出我正确的方向?

4

2 回答 2

6

怎么样:

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;
    }

}

或很快:

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;
    }

}

?

大多数代理指令是可选的(您可能只需要proxy_passand proxy_redirect)但很有用。

于 2012-04-17T19:33:48.480 回答
0

关于问题,css、js、images文件丢失,你可以这样做,

如果您使用 express 框架。您需要添加此代码行

app.enable('trust proxy');  

此值“信任代理”默认值为禁用。

于 2014-04-26T03:32:20.203 回答