NGINX位置块始终重定向到不同位置

时间:2017-05-23 19:41:39

标签: nginx

我有NGINX托管许多应用程序,通常都使用相同的API。我的nginx有一个api的位置块,所以有点谎言

location /default-api/ {
   proxy_pass https://some/location.com;
}

通常每个GUI都希望使用相同的api,偶尔有人可能希望更改特定应用程序使用的API。我希望将每个GUI配置为使用不同的URL,以便以后如果有人想要更改其api,则更容易重定向该URL,而是在每个位置对每个URL进行硬编码https://some/location.com阻止我想重定向到default-api。

如此有效我想要的东西,如果它可以工作

location /foo-api/ {
    redirect /default-api/; 
}

location / bar-api / {         redirect / default-api /;     }

location /baz-api/ {
    redirect /default-api/; 
}

我想当我第一次玩nginx时,我看到了一个非常简单的指令,但我现在无法找到它。我知道有很多指令可以做到这一点,但我所知道的任何指令都不够干净,值得做。

重写需要过于复杂的正则表达式,重定向要求客户端在获得重定向后进行新的查询。 proxy_pass执行一些不需要的代理逻辑,这三个似乎都要求我将servername硬编码到重定向路径中。我能想到的最干净的可能是以一种它没有制作的方式使用tryfiles。

是否有一些更简单的指令来执行这样的内部重定向?

1 个答案:

答案 0 :(得分:2)

两个建议。

1)除非需要,否则注释location /foo-api块:

location / {
    rewrite ... ... break;   # if required to normalize the /prefix/...
    proxy_pass ...;
}
# location / foo-api/ { }    # disabled - use `location /`

2)使用命名位置:

location /default-api/ {
    try_files /nonexistent @api;
}
location /foo-api/ {
    try_files /nonexistent @api;
}
location @api {
    rewrite ... ... break;   # if required to normalize the /prefix/...
    proxy_pass https://some/location.com;
}
相关问题