Config nginx多位置不区分大小写

问题描述 投票:0回答:1

我将我的nginx作为反向代理设置为:

server {
    listen 80;
    server_name mydomain.com anotherdomain.es 20.18.4.140;
        location ^~ /service/ {
        proxy_pass http://20.18.4.146/;
        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_set_header X-Forwarded-Proto $scheme;
    }

    location ^~ /vm2/ {
        proxy_pass http://20.18.4.146/;
        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_set_header X-Forwarded-Proto $scheme;
    }

    location ^~ /vm3/ {
        proxy_pass http://20.18.4.142:6001/;
        #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_set_header X-Forwarded-Proto $scheme;
    }       location / {
        proxy_pass http://20.18.4.148/;
        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_set_header X-Forwarded-Proto $scheme;
    } }

server {
    listen 443 ssl;
    server_name mydomain.com anotherdomain.es 20.18.4.140;

    fastcgi_param HTTPS on;
    include /etc/nginx/include/ssl;
        location ^~ /service/ {
        proxy_pass https://20.18.4.146/;
        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_set_header X-Forwarded-Proto $scheme;
    }

    location ^~ /vm2/ {
        proxy_pass https://20.18.4.146/;
        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_set_header X-Forwarded-Proto $scheme;
    }       

    location ^~ /vm3/ {
        proxy_pass https://20.18.4.142:6000/;
        #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_set_header X-Forwarded-Proto $scheme;
    }

    location / {
        proxy_pass https://20.18.4.148/;
        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_set_header X-Forwarded-Proto $scheme;
    } 
}

现在我可以通过这种方式正确访问它:

mydomain.com/service / ... anotherdomain.es/service / ...

mydomain.com/vm2 / ... anotherdomain.es/vm2 / ...

mydomain.com/vm3 / ... anotherdomain.es/vm3 / ...

mydomain.com / ... anotherdomain.es / ...

将所有流量从一个位置重定向到适当的服务器。其余的url(包括参数)没有问题,并且大小写。

但是我需要这些位置不区分大小写。并能够像这样访问它(或任何其他组合):

mydomain.com/Service / ... anotherdomain.es/SERVICE / ...

mydomain.com/VM2 / ... anotherdomain.es/Vm2 / ...

我不想重复这些位置或重复每个位置的配置。我想做得更好,更有效。

我已经尝试过使用正则表达式,但是检查语法会给我错误,并且不起作用。例如这个:

~* ^/(vm2|Vm2|VM2)/$
~* ^/vm2/
~* /(<vm2>/g)
~* /app1/(.*)
...

错误:

nginx:[emerg]“ proxy_pass”不能在URI部分中指定正则表达式,或在命名位置中,或在“ if”中语句,或在“ limit_except”块中/ etc / nginx / sites-enabled / my-sites:4 nginx:配置文件/etc/nginx/nginx.conf测试失败

也可能是这种情况:mydomain.com/vm2/service/15(正则表达式为2)

我已经尝试了很多,但没有发现对我有用的东西。有任何想法吗?谢谢。

nginx case-insensitive
1个回答
0
投票

有了Richard Smith的线索,我所看到的内容和新的阅读材料(nginx-case-insensitive-location)留在了这里:

location ~* /service(?<stuff>.*)$  {
    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_set_header X-Forwarded-Proto $scheme;
    rewrite ^ /$stuff break;
    proxy_pass http://20.18.4.146;
}

... 
...ssl
...

location ~* /service(?<stuff>.*)$  {
    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_set_header X-Forwarded-Proto $scheme;
    rewrite ^ /$stuff break;
    proxy_pass https://20.18.4.146;
}

...

location / {
    proxy_pass https://20.18.4.148/;
    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_set_header X-Forwarded-Proto $scheme;
}

现在是具有区分大小写的“服务”或“ vmX”,表示服务或服务或服务或VM2。

我希望它能帮助像我这样的其他Nginx经验不足的人。

© www.soinside.com 2019 - 2024. All rights reserved.