如何在nginx中禁用非法主机头请求的日志记录

如何在nginx中禁用非法主机头请求的日志记录,nginx,logging,Nginx,Logging,在我的nginx.conf中,我添加了以下代码来拒绝非法请求: server { ... ## Deny illegal Host headers if ($host !~* ^(www.mydomain.com|xxx.xxx.xxx.xxx)$) { return 444; } ... } 但这个请求信息总是写在访问日志中,我认为这是监控请求,因为它们太多了,来自两个不安全的站点,只是头请求 那么,如何停止记录这些非法请求信息以访问日志呢 谢谢。发

在我的nginx.conf中,我添加了以下代码来拒绝非法请求:

server {
   ...
   ## Deny illegal Host headers
   if ($host !~* ^(www.mydomain.com|xxx.xxx.xxx.xxx)$) {
      return 444;
   }
   ...
}
但这个请求信息总是写在访问日志中,我认为这是监控请求,因为它们太多了,来自两个不安全的站点,只是头请求

那么,如何停止记录这些非法请求信息以访问日志呢


谢谢。

发现nginx(1.7.0及更高版本)log moude提供了,感到非常羞愧,文档示例只是状态条件:

if参数(1.7.0)启用条件日志记录。如果条件的计算结果为“0”或空字符串,则不会记录请求。在以下示例中,将不记录响应代码为2xx和3xx的请求:

map $status $loggable {
    ~^[23]  0;
    default 1;
}

access_log /path/to/access.log combined if=$loggable;
答案中也提到了这个信息。我只是忽略了它

现在,我将以下代码添加到nginx日志设置中:

map $status $loggable {
    ~444 0;
    default 1;
}

access_log /var/log/nginx/access.log combined if=$loggable;

未记录非法主机头请求。

您应该使用单独的服务器块

server {
    listen 80;

    # valid host names
    server_name www.example.com;
    server_name xx.xx.xx.xx;

    # you site goes here
}

# requests with all other hostnames will be caught by this server block
server {
    listen 80 default_server;
    access_log off;
    return 444;
}

这将是简单而有效的

我尝试了您的解决方案,我认为它对于不使用条件语句和正则表达式匹配是简单而有效的。谢谢