一般情况下,拒绝Nginx请求而不进行身份validation

是否有可能拒绝所有的nginx请求,不发送基本authentication数据?

我有这样的要求:

xxx.xxx.xxx.xxx - - [24/Oct/2012:10:32:12 +0200] "POST /path HTTP/1.1" 401 1387 "-" "Apache-HttpClient/4.1.1 (java 1.5)" "-" xxx.xxx.xxx.xxx - paul [24/Oct/2012:10:32:12 +0200] "POST /path HTTP/1.1" 200 192 "-" "Apache-HttpClient/4.1.1 (java 1.5)" "-" 

我想拒绝第一个,不提供用户。 正如你所看到的,它已经发送了401 HTTP代码,但是这个代码不是直接从nginx生成的,而是从底层的应用服务器生成的。 我想要做的是直接在nginx中否认它。 有没有办法检查用户是否被提供?

这是可能的,而不需要直接在nginx中设置正常的基本authentication?

Nginx将来自身份validation的用户名存储在$remote_user 。 您应该能够testing它不是空的,并相应地执行所需的操作(例如返回401错误)。 就像是:

 if ($remote_user = ''){ return 401; } 

从外观$remote_user ,你已经填充了$remote_uservariables(因为它显示在你的日志中) – 就我所知,你必须使用Nginx的HTTP Auth基本模块来填充这个variables。

基本身份validation设置授权标头。 在Nginx中,HTTP请求标头可以通过$http_HEADER访问,所以在这种情况下$http_authorization 。 如果你在Nginx之外实现了基本authentication并设置了这个头部,那么你可以testing头部是否为空。 (另外,取决于你如何实现身份validation,你可以设置一个自定义头,你testing)。