用NGINX保护REST API

嗨,我有一个背后的NGINX API。 该API被configuration为要求对所有操作进行身份validation。 我想在它前面有一个NGINX代理来传递一些动作的authentication参数,这样他们就可以在没有authentication的情况下被访问。

身份validation在主要位置上工作正常,但是当我尝试在NGXINX位置指定特定path时,它仍然提示我input凭据。

这里重要的是,我想要允许的唯一行动是STATUS。 其他的一切都不应该被第二个地点拾起。

有没有办法做到这一点没有PCRE或正则expression式匹配?

location / { add_header 'Access-Control-Allow-Origin' *; add_header 'Access-Control-Allow-Credentials' 'true'; add_header 'Access-Control-Allow-Headers' 'Content-Type,Accept'; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; add_header X-Proxy-Cache $upstream_cache_status; proxy_ignore_headers X-Accel-Expires Expires Cache-Control Set-Cookie; proxy_hide_header Cache-Control; proxy_hide_header Set-Cookie; proxy_pass http://backend; add_header 'Location1' '1'; location /1/2/3?action=STATUS { add_header 'Location2' '2'; proxy_set_header Authorization "Basic BLAHBLAHBLAH"; proxy_pass http://backend; } } 

位置匹配是针对不包含查询string的规范化URI完成的。

所以在这种情况下有必要使用if块:

 location /1/2/3 { if ($arg_action != "STATUS") { return 403; } add_header 'Location2' '2'; proxy_set_header Authorization "Basic BLAHBLAHBLAH"; proxy_pass http://backend; }