nginx,为什么auth_request不能用于if部分

时间:2016-07-18 07:44:32

标签: java nginx

我正在尝试仅为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。但是如何实现我的目标,以及为什么它不能在里面应用?

1 个答案:

答案 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”。