Nginx + Passenger在不同的子URI中提供rails应用程序

hec*_*tor 1 ruby-on-rails passenger nginx

我在Debian服务器(ip 192.168.1.193)中运行rails应用程序,并且乘客是独立的

$ cd /home/hector/webapps/first
$ passenger start -a 127.0.0.1 -p 3000
Run Code Online (Sandbox Code Playgroud)

我想提供这个应用程序将Nginx与反向代理一起扔在不同的子文件夹中:

http://192.168.1.193/first
Run Code Online (Sandbox Code Playgroud)

我的nginx.conf服务器:

...
server {
    listen 80;
    server_name 127.0.0.1;
    root /home/hector/webapps/first/public;
    passenger_base_uri /first/;
    location /first/ {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
    }
}
...
Run Code Online (Sandbox Code Playgroud)

然后我运行Nginx服务器

$ /opt/nginx/sbin/nginx
Run Code Online (Sandbox Code Playgroud)

使用此配置运行一个rails应用程序似乎一切正常.

但是当我尝试添加我的第二个应用程序时

$ cd /home/hector/webapps/second
$ passenger start -a 127.0.0.1 -p 3001
Run Code Online (Sandbox Code Playgroud)

使用此nginx.conf文件:

...
server {
    listen 80;
    server_name 127.0.0.1;
    root /home/hector/webapps/first/public;
    passenger_base_uri /first/;
    location /first/ {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
    }
}

server {
    listen 80;
    server_name 127.0.0.1;
    root /home/hector/webapps/second/public;
    passenger_base_uri /second/;
    location /second/ {
        proxy_pass http://127.0.0.1:3001;
        proxy_set_header Host $host;
    }
}
…
Run Code Online (Sandbox Code Playgroud)

然后我重新加载Nginx服务器配置

$ /opt/nginx/sbin/nginx -s reload
nginx: [warn] conflicting server name "127.0.0.1" on 0.0.0.0:80, ignored
Run Code Online (Sandbox Code Playgroud)

我收到警告,我无法访问第二个应用程序

http://192.168.1.193/second/ 
Run Code Online (Sandbox Code Playgroud)

服务器为第二个应用程序返回404,第一个应用程序仍在运行.

Sas*_*tle 5

我想你只需将两个位置放在同一台服务器上:

server {
  listen 80;
  server_name 127.0.0.1;

  location /first/ {
    root /home/hector/webapps/first/public;
    passenger_base_uri /first/;

    proxy_pass http://127.0.0.1:3000/;
    proxy_set_header Host $host;
  }
  location /second/ {
    root /home/hector/webapps/second/public;
    passenger_base_uri /second/;

    proxy_pass http://127.0.0.1:3001/;
    proxy_set_header Host $host;
  } 

}
Run Code Online (Sandbox Code Playgroud)