Nginx不区分大小写的proxy_pass

时间:2017-10-07 22:09:20

标签: nginx nginx-location nginx-reverse-proxy

我有一个名为http://example.com的网站,其中有一个可以在http://example.com/app1访问的应用。 app1位于nginx反向代理后面,如下所示:

location /app1/ {
    proxy_pass http://localhost:8080/;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
}

将尾部斜杠添加到proxy_pass字段可让我"删除" URL的/ app1 /部分,至少就应用而言。所以app1认为它收到了对根网址的请求(例如,我在app1中有一条位于'/'的路线,而不是'/app1')。

但是,我想让nginx让这个不区分大小写。因此,无论我转到http://example.com/App1还是http://example.com/APP1,它仍应将请求转发给app1,删除网址的/ app1 /部分。

当我尝试使用nginx的不区分大小写的规则时,它不会将URI的其余部分转发给app1。

location ~* /app1/ {
    proxy_pass http://localhost:8080/;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
}

这给了我一个nginx配置错误。

我的目标有两个:

  • 匹配/app1/不区分大小写
  • 当"传递"时删除网址的/app1/部分网址到应用

我已尝试重写网址,但它不允许我将其余的URI添加到proxy_pass。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

您应该捕获其余网址,然后使用它

location ~* /app1/(.*) {
    proxy_pass http://localhost:8080/$1$is_args$args;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
}