一般情况下拒绝没有身份验证的 Nginx 请求

一般情况下拒绝没有身份验证的 Nginx 请求

是否可以拒绝所有未发送基本身份验证数据的 nginx 请求?

我有这样的要求:

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 中设置正常的基本身份验证,这可能吗?

答案1

Nginx 将身份验证得到的用户名存储在$remote_user。您应该能够测试它是否为空,并相应地执行所需的操作(例如返回 401 错误)。类似于:

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

从外观上看,您已经填充了$remote_user变量(因为它出现在您的日志中) - 据我所知,您必须使用 Nginx 的HTTP Auth 基本模块填充该变量。

基本身份验证会设置授权标头。在 Nginx 中,HTTP 请求标头可通过 访问$http_HEADER,因此在本例中为$http_authorization。如果您在 Nginx 之外实施基本身份验证并设置该标头,则可以测试该标头是否为空。(或者,根据您实施身份验证的方式,您可以设置要测试的自定义标头)。

相关内容