php post nginx 400,Nginx 400错误研究

这几天游戏上线在查看 Nginx 的访问日志时,发现有很多 HTTP 返回码为 400 的记录。

以下是Nginx 的访问日志:

222.89.55.137 - - [27/Dec/2014:19:35:15 +0800] "POST /dia.php HTTP/1.1" 400 172 "-" "-" "-"

网站查了很多文档关于400问题的解决方法:

1.修改nginx配置文件

client_header_buffer_size 128k;

large_client_header_buffers 4 128k;

按照这个方法实验了,错误依旧问题依然没有解决。

2.增加default配置文件

增加默认的server到配置文件,以下配置的解释看这里禁止未绑定域名访问

代码如下 复制代码

server {

listen 80 (www.111cn.net)default_server;

server_name _;

return 404;

access_log off;

}

from:http://www.111cn.net/sys/nginx/52851.htm

这种方法也测试了也没能解决。

于是查看RFC文档:

A client MUST include a Host header field in all HTTP/1.1 request messages . If the requested URI does not include an Internet host name for the service being requested, then the Host header field MUST be given with an empty value. An HTTP/1.1 proxy MUST ensure that any request message it forwards does contain an appropriate Host header field that identifies the service being requested by the proxy. All Internet-based HTTP/1.1 servers MUST respond with a 400 (Bad Request) status code to any HTTP/1.1 request message which lacks a Host header field.

上面是http1.1的rfc关于host部分的解释,

从上面我们了解到如果一个http1.1的请求没有host域,

那么server应该给client段发送400的状态码,

表明这个请求server不能处理。而对于nginx server来说,

也遵循这样的方式,说明client发送了一个无效的请求,

nginx server无法处理,故返回400的状态码。

根据上面的描述分析判断是客户端请求的http header 是不可用造成的

于是继续google

把Nginx的错误日志的级别调到info级别来证明自己的判断,结果真有收获,

以下信息是Nginx errorlog中的内容:

2014/12/27 19:35:11 [info] 20798#0: *9705609 client sent invalid header line: "User-Agent: ^M

根据以上的错误信息判断是客户端发过来的header 是错误的导致nginx返回400错误,

至于为什么客户端会发送错误的header 信息,我也只能让开发来看了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值