拦截所有nginx位置以进行身份验证
我想知道如何在一个位置为每个位置显式设置身份验证检查。像下面这样做似乎容易出错(遗漏条目、打字错误、不必要的重复等) nginx.conf拦截所有nginx位置以进行身份验证,nginx,Nginx,我想知道如何在一个位置为每个位置显式设置身份验证检查。像下面这样做似乎容易出错(遗漏条目、打字错误、不必要的重复等) nginx.conf location / { auth_request /someAuth; auth_request_set $someVar $someOtherVar; proxy_pass https://somewhere.com:1234; proxy_set_header X-Forwarded-For $remote_addr; } location
location / {
auth_request /someAuth;
auth_request_set $someVar $someOtherVar;
proxy_pass https://somewhere.com:1234;
proxy_set_header X-Forwarded-For $remote_addr;
}
location /foo {
auth_request /someAuth;
auth_request_set $someVar $someOtherVar;
proxy_pass https://somewhereElse.com:6578;
proxy_set_header X-Forwarded-For $remote_addr;
}
location /bar {
auth_request /someAuth;
auth_request_set $someVar $someOtherVar;
proxy_pass https://somewhereOther.com:9876;
proxy_set_header X-Forwarded-For $remote_addr;
}
可能以如下方式使用
map
指令
map $uri $proxy {
~^/foo https://somewhereElse.com:6578;
~^/bar https://somewhereOther.com:9876;
default https://somewhere.com:1234;
}
server {
...
location / {
auth_request /someAuth;
auth_request_set $someVar $someOtherVar;
proxy_pass $proxy;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
请注意,这样的配置需要一个指令。可能以如下方式使用
map
指令
map $uri $proxy {
~^/foo https://somewhereElse.com:6578;
~^/bar https://somewhereOther.com:9876;
default https://somewhere.com:1234;
}
server {
...
location / {
auth_request /someAuth;
auth_request_set $someVar $someOtherVar;
proxy_pass $proxy;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
请注意,这样的配置需要一个指令。我想我有一个坏例子,所有参数在位置之间都是相同的。如果它们都是相同的,那么地图就可以工作,但我的现实世界问题却不同ones@ekjcfn3902039您可以使用几个
map
块从$uri
nginx内部变量获取各种参数。也许如果你发布你的真实配置,我可以建议一些更优化的解决方案。我有点希望在继续到真实位置之前,能有一个像位置拦截器一样的单行线。我想地图是最好的选择?@ekjcfn3902039我认为map
是最好的选择。我想我有一个糟糕的例子,所有的参数在不同的位置都是相同的。如果它们都是相同的,那么地图就可以工作,但我的现实世界问题却不同ones@ekjcfn3902039您可以使用几个map
块从$uri
nginx内部变量获取各种参数。也许如果你发布你的真实配置,我可以建议一些更优化的解决方案。我有点希望在继续到真实位置之前,能有一个像位置拦截器一样的单行线。我想地图是最好的选择?@ekjcfn3902039我认为地图是最好的选择。