nginx:为不同的路径使用不同的服务器

时间:2016-12-09 12:06:49

标签: ruby-on-rails nginx server

我有两个Rails应用程序位于同一台机器上的两个不同的URI后面。 nginx配置适用于自己的配置文件中的每个应用程序。

现在其中一个应用程序必须慢慢合并到第二个应用程序中。在URI路径application-one.com/register下可以访问端点。我只希望此application-one.com/register路径访问第二个应用程序,而所有其他路径(application-one.com/* except /register)仍在访问第一个应用程序。

有没有办法在不使用301重定向的情况下执行此操作,因为我无法在我的情况下使用它们?

示例配置文件如下所示:

upstream unicorn_application_one {
    server unix:/tmp/unicorn_application_one.sock fail_timeout=0;
}

server {
    client_max_body_size ....
    ...
    server_name application-one.com

    root /home/deployer/application_one/current/public;
    try_files $uri/index.html $uri @unicorn_application_one;

    location @unicorn_application_one {
        proxy_set_header ...
        ....
    }

    location ^~ /assets/ {
        ...
    }

    ....
}

修改

我尝试了@joaumg方法,但我不得不改变它:

每当我将上游提取到外部文件时,我都会遇到duplicate upstream错误。

所以我只是将@ joaumg的代码改为:

location /register {
    proxy_pass http://unix:/tmp/unicorn_application_two.sock;
}

有没有办法以@joaumg告诉的方式执行此操作而不会出现重复的上游错误?

1 个答案:

答案 0 :(得分:1)

一个可能的例子(未经测试):

  

cat upstreams.conf

upstream unicorn_application_one {
    server unix:/tmp/unicorn_application_one.sock fail_timeout=0;
}

upstream unicorn_application_two {
    server unix:/tmp/unicorn_application_two.sock fail_timeout=0;
}
  

cat server_one.conf

include upstreams.conf;

server {
    client_max_body_size ....
    ...
    server_name application-one.com

    root /home/deployer/application_one/current/public;

    location /register {
        proxy_pass @unicorn_application_two;
    }

    try_files $uri/index.html $uri @unicorn_application_one;

    location @unicorn_application_one {
        proxy_set_header ...
        ....
    }

    location ^~ /assets/ {
        ...
    }


    ....
}