有人问我为什么nginx的access日志文件突然间变大M,查看结果nginx默认主机日志记录出现如下的400错误。
重现办法:
HTTP/1.1 400 Bad Request
<html> 日志里会记录一条 127.0.0.1 - - [26/Dec/2012:03:37:08 +0000] "GET / HTTP/1.1" 400 172 "-" "-" 分析: http1.1的标准规定请求必须包含头部信息,如果请求头为空那么web server直接返回400,详细可以看RFC文档RFC 2316, section 14.23 除了上面这种telnet方式可能造成空请求头外,当浏览器下载图片的同时点击别的链接,会关闭下载连接,也会出现空请求头,再或者机器人构造的空请求头访问。 去掉access日志中的400方法 0.7.12以前版本的nginx收到一个空请求,nginx不会去与任何虚拟主机匹配,直接返回400错误, 之后的新版本nginx可以用server_name _;匹配空请求头。 所以如果用的旧版本先升级到0.7.12以后的版本 升级之后添加如下默认虚拟主机server。 增加默认的server到配置文件,以下配置的解释看这里禁止未绑定域名访问 server { listen 80 default_server; server_name _; return 404; access_log off; } 建议把上面这个server保存为default.conf,然后include到主配置文件nginx.conf。 (责任编辑:IT) |