NGINX Digest, limit_except GET, but allow localhost



我正试图在nginx中配置Digest Auth,我使用非正式的模块,nginx Digest模块,在大多数情况下,我可以让它工作得很好,我能够锁定一个端点,除非它是get,这是我的位置配置。

location /config {
proxy_pass http://internal_config_service/config;

limit_except GET {
auth_digest "peek a boo";
}
}

然而,我有一个场景,我允许localhost不受挑战,我真的没有找到一个很好的方法来做到这一点。

我已经探索过的东西,我已经尝试过allow 127.0.0.1;,我甚至研究过试图做一些与if和检查$host是本地的,而不是添加文摘指令,但我不认为这是可能的,因为我的理解是配置是相当静态的。

我能想到的一个解决方案,可能会起作用,但需要相当数量的工作,和额外的混乱,有人新的,基本上是创建2个服务器,一个是只能由本地主机访问,并允许本地主机通过不受挑战,不能从外部访问。然后第二个服务器是公开访问的,并被digest锁定。

我希望有一个更好的解决方案,但我仍然在学习NGINX的复杂性,但对更好的解决方案并不乐观。

你可以使用satisfy指令:http://nginx.org/en/docs/http/ngx_http_core_module.html满足

问题:我不知道auth_digest(非官方模块)是否会成为NGINX请求处理中Auth-Face的一部分。但是,如果是这种情况,您可以另外使用auth_request。不过不妨试一下:

...
location /authreq {
satisfy any;
allow 127.0.0.1;
deny all;
auth_digest "something";
# If auth_digest is not working try
auth_request /_authdigest;
}
location = /_authdigest {
internal;
auth_digest "something";
}

更新你关于allow 127.0.0.1; deny all的问题

This将NOT阻止所有其他客户端/流量。它告诉NGINX结合satisfy any,如果IP不是127.0.0.1,任何其他认证函数(auth_basic, auth_jwt, auth_request)必须成功才能让请求通过。在我的演示中:如果我不向localhost发送请求,我将不得不通过auth_request位置。如果auth_request类似于200,它满足我的配置,我被允许连接到上游代理。

我已经构建了一个小的njs脚本,禁用用户的auth_digest,并对代理请求进行身份验证。但这不是你需要的,不是吗?

如果您想将配置分开,一个用于本地主机,另一个用于公共ip,您的服务器配置可以如下所示:

server {
listen 127.0.0.1:80;
## do localhost configuration here
}
server {
listen 80;
## apply configuration for the IP of nic eth0 (for example) here.
}

相关内容

最新更新