2017-04-07 28 views
1

请在我的nginx.conf,我添加以下代码否认非法请求:如何禁用日志记录非法主机头在nginx的

server { 
    ... 
    ## Deny illegal Host headers 
    if ($host !~* ^(www.mydomain.com|xxx.xxx.xxx.xxx)$) { 
     return 444; 
    } 
    ... 
} 

但这一要求信息总是在访问日志,写这是监视器请求我认为,因为他们是这么多,从两个不安全的网站,只是HEAD请求。

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

谢谢。

回答

0

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

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; 
} 

这将是简单而有效的

+0

我试试你的解决方案,我认为这是简单而有效的不使用条件语句和正则表达式匹配。谢谢。 – Fogmoon

0

所以羞愧地发现,nginx的(1.7.0或更高版本)登录moudle提供conditional logging,并且文档的例子是公正地位的条件:

的,如果参数(1.7.0)允许有条件的日志。如果条件评估为“0”或空字符串,则不会记录请求。在下面的例子中,以响应代码2XX和3XX的要求将不被记录:

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

access_log /path/to/access.log combined if=$loggable; 

也应Disable logging in nginx for specific request已经提到了这个信息。我只是忽略了它。

现在我添加以下代码nginx的日志设置:

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

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

非法主机头的请求还没有登录。