如果存在自定义标头,Nginx 允许访问

如果存在自定义标头,Nginx 允许访问

有没有办法,只有当某个自定义标头存在且值匹配时,我才允许访问目录?使用 apache,我一直使用 SetEnvIf 来做到这一点。我该如何使用 nginx 来做到这一点?

基本上,我有一个只能由我访问的开发服务器,但我有动态 IP,并且每天都必须更改配置文件。使用 Apache,我只需将浏览器设置为发送一个自定义标头,该标头充当访问密码,如果该标头值正确,Apache 将允许访问。

答案1

我做了很多研究来解决一个简单的问题:仅当请求标头中有一个特定令牌时才允许 proxy_pass。我尝试了这里的所有答案,但没有一个像我喜欢的那样有效。我的最终解决方案是:

location /api {
    proxy_http_version 1.1;

    if ($http_authorization != "Bearer 1234") {
        return 401;
    }

    proxy_pass http://app:3000/;
}

参考:

https://stackoverflow.com/questions/45734332/nginx-not-equal-to

https://stackoverflow.com/questions/12431496/nginx-read-custom-header-from-upstream-server

Nginx 位置精确匹配无可争议

https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/

答案2

您的实际问题在这里得到回答:

https://stackoverflow.com/questions/18970620/nginx-reject-request-if-header-is-not-present-or-wrong

话虽如此,为什么不使用基本身份验证呢?这使其成为密码,而不是像密码一样。

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

相关内容