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

时间:2017-04-07 06:33:11

标签: nginx logging

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

public class MyBeanValidator implements Validator {
    @Override
    public void validate(Object value) throws InvalidValueException {
        if (!isValid(value)) {
            throw new InvalidValueException("Invalid field");
        }
    }
    private boolean isValid(Object value) {
        if (value == null || !(value instanceof MyBean)
                || ((MyBean) value).getMyIntegerAttribute() == null ) {
            return false;
        }
        return true;
    }
}

但是这个请求信息总是写在访问日志中,这是我认为的监视请求,因为它们太多而且来自两个不安全的站点而且只是HEAD请求。

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

感谢。

2 个答案:

答案 0 :(得分:1)

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

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

这将是简单而有效的

答案 1 :(得分:0)

非常羞于发现nginx(1.7.0及更高版本)log moudle提供了conditional logging,而文档示例只是状态条件:

  

if参数(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;

尚未记录非法主机标头请求。