我正在尝试仅为Nginx中的POST方法创建自定义身份验证请求。我找到了auth_request模块,所以我写了这样的东西:
public Patient(String hospNumber) {
super(lookup(hospNumber,"firstname"), lookup(hospNumber,"firstname"));
}
bookservice和authservice是两个上游。我第一次尝试这个,它不起作用:每次有一个GET / api / books,它会激活subrequest到auth服务。预期的行为是:当它是GET / api / books时,它不会激活subhquest到auth服务,否则,它会激活subrequest到auth服务。
所以我写了类似的东西:
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;
}
但是在重新加载配置时,它说:“auth_request”指令在这里不允许。
据我所知,auth_request不能在if,它只能在位置,服务器,http。但是如何实现我的目标,以及为什么它不能在里面应用?
答案 0 :(得分:1)
我今天做了这样的事情。来到这个解决方案:
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;
}
http://nginx.org/en/docs/http/ngx_http_rewrite_module.html
使用if会更好,但是我不知道为什么不允许这样做。但是,nginx(https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/)不鼓励使用“ if”。