有没有办法,只有当某个自定义标头存在且值匹配时,我才允许访问目录?使用 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
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