使用 NGINX 保护 REST API

使用 NGINX 保护 REST API

您好,我在 NGINX 后面有一个 API。该 API 被配置为要求对所有操作进行身份验证。我希望在它前面有一个 NGINX 代理来传递某些操作的身份验证参数,以便无需身份验证即可访问它们。

身份验证在主位置上运行良好,但是当我尝试在 NGXINX 位置指定特定路径时,它仍然提示我输入凭据。

这里最重要的是,我唯一想允许的操作是 STATUS。其他所有操作都不应由第二个位置接收。

有没有不用 PCRE 或正则表达式匹配来做到这一点的方法?

    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;

        }

    }

答案1

位置匹配是针对不包含查询字符串的规范化 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;

}

相关内容