在我的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请求。
那么如何停止记录这些非法请求信息以访问日志?
感谢。
答案 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;
尚未记录非法主机标头请求。