gpt4 book ai didi

nginx - 基本身份验证/ip 过滤器仅适用于 Ingress NGINX 中包含特殊字符的路径

转载 作者:行者123 更新时间:2023-12-02 11:29:29 25 4
gpt4 key购买 nike

我希望我的 Ingress (NGINX) 按源 IP 地址过滤并在代理到服务之前显示基本身份验证。虽然这很简单,但复杂的部分是,如果 URL 在路径中包含特殊字符,我只希望它执行此操作。

假设我想保护所有以“+”开头的路径,然后再将它们代理到正确的服务。另一方面,我仍然希望不以“+”开头的路径将被路由(没有基本身份验证)到同一个服务。它也不应该更改服务将看到的 URL。

例如:

/serviceA/what/ever -> http://192.168.0.2/what/ever
/serviceA/what/+ever -> BASIC_AUTH -> http://192.168.0.2/what/+ever
/serviceB/what/ever -> http://192.168.0.3/what/ever
/serviceB/+what/ever -> BASIC_AUTH -> http://192.168.0.3/+what/ever

是否可以在 Ingress 或至少在 NGINX 配置中实现这一点?
URL 路径的正则表达式在 NGINX 中也很简单,但是否可以不复制所有路径条目,也不用在前面添加第二个代理 nginx?

理想的解决方案是在 Ingress yml 配置中,但我更熟悉 NGINX,所以这里是我想在 NGINX 语法中实现的示例:
Location ~ /+ {
auth_basic ...;
auth_basic_user_file ...;
< route it somehow to the similar location as it would have no +, but don't cut out the + >
}
Location /serviceA {
proxy_pass ...;
}
... more Locations ...

或者在 Ingress 中与路径条目类似。

最佳答案

首先,您的:

location ~ /+ {
auth_basic ...;
auth_basic_user_file ...;
< route it somehow to the similar location as it would have no +, but don't cut out the + >
}

只会匹配 servicex/+something ,而不是 servicex/something/+nice

您正在搜索的正则表达式类似于:
location ~ ^/(.*)\+(.*) for the "+" to be anywhere

location ~ ^(.*)\/\+(.*) for the "+" to be only after a "/"

对于部分:
< route it somehow to the similar location as it would have no +, but don't cut out the + >

像这样,您将完全按照原样发送 uri:
proxy_pass http://192.168.0.2$request_uri; 

像这样你会去掉“+”
proxy_pass http://192.168.0.2$1/$2; 

其中 $1 是/+ 之前的 (.*),$2 是之后的所有内容,我们在中间添加缺少的/。

我认为这会帮助你完成我认为你想做的事情。

如果你有任何问题问他们,我觉得我对你解释的某些部分感到迷惑,我的回答不是 100% 正确。

希望我有所帮助。

关于nginx - 基本身份验证/ip 过滤器仅适用于 Ingress NGINX 中包含特殊字符的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54931977/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com