gpt4 book ai didi

java - nginx,为什么不能在if部分使用auth_request

转载 作者:搜寻专家 更新时间:2023-11-01 03:18:43 28 4
gpt4 key购买 nike

我正在尝试仅针对 Nginx 中的 POST 方法发出自定义身份验证请求。我找到了 auth_request 模块,所以我写了这样的东西:

location /api/books {
if ($request_method = GET) {
proxy_pass http://bookservice;
}
auth_request /api/auth;
proxy_pass http://bookservice;
}
location /api/auth {
proxy_pass http://authservice;
}

bookservice 和 authservice 是两个上游。我第一次尝试这个,它不起作用:每次有一个 GET/api/books,它都会触发对 auth 服务的子请求。预期的行为是:当它是 GET/api/books 时,它不会触发对 auth 服务的子请求,否则,它会触发对 auth 服务的子请求。

所以我写了这样的东西:

location /api/books {
if ($request_method = GET) {
proxy_pass http://bookservice;
}
if ($request_method = POST) {
auth_request /api/auth;
proxy_pass http://bookservice;
}
}
location /api/auth {
proxy_pass http://authservice;
}

但是当重新加载配置时,它说:“auth_request”指令在这里是不允许的。

我理解auth_request不能在if,只能在location,server,http。但是如何实现我的目标,为什么它不能在 if 中应用?

最佳答案

我今天做了这样的事情。来到这个解决方案:

location /api/books {
if ($request_method = POST) {
rewrite .* /_api/books last;
}
proxy_pass http://bookservice;
}

location /_api/books {
rewrite .* /api/books break;
auth_request /api/auth;
proxy_pass http://bookservice;
internal;
}

http://nginx.org/en/docs/http/ngx_http_rewrite_module.html

使用 if 会更好,但我不知道为什么不允许这样做。但是,nginx ( https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/) 不鼓励使用“if”。

关于java - nginx,为什么不能在if部分使用auth_request,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38431155/

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