php+nginx如何在浏览器哪个好输出错误日志

你的位置: >
> 解决nginx访问日志http 400错误方法
配置负载均衡后,在查看nginx访问日志的时候,经常看到这些http 400错误:
xxx.xxx.xxx.xxx - - [22/Aug/:13 +0800] &GET / HTTP/1.1& 200 66 &-& &Mozilla/4.0 ( MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)&
xxx.xxx.xxx.xxx - - [22/Aug/:13 +0800] &-& 400 0 &-& &-&
基本上几条正常的访问记录就会有一条400的记录,刚开始还以为是dns错误啥的,后来上网搜了下,发现也有可能是客户端缓存的问题。
只需要删除浏览器中的cookies,操作方法是:在浏览器中点击“Internet选项”然后再点击删除cookies即可!按照这个思路,尝试清除了谷歌浏览器chrome的浏览记录以后,发现果然彻底解决了访问时经常遇到的HTTP400错误的问题
附录1.nginx 日志中神秘的 HTTP 400 错误
前几天在查看 Nginx 的访问日志时,发现大量 HTTP 返回码为 400 的记录,见下图
可以看到,除了记录了 IP 以及返回码之外,日志中请求的 URL, Referer, User Agent 等等的信息通通为空白,非常奇怪。根据 HTTP 协议,400 返回码表示服务器认为浏览器发送的请求有错误,参见 ,但是正常通过浏览器访问时,怎么会出现请求错误呢?
我立刻打开自己的 Chrome 浏览器试着访问了一下博客首页,发现居然又出现了三次 400 的记录,IP 自然都是我自己
反复试验,此现象基本都能重现,而且有一个很重要的特征:400 记录并不是紧随着正常记录,而是与之有大约几秒钟的间隔
看来是 Chrome 在请求完网站之后,间隔一段时间后,又发送了几条请求到服务器,但是请求的内容有问题,无法被服务器识别
Chrome 发送的是什么样的请求呢?我立刻打开 SmartSniff 抓取了一下 TCP 的包,见下图
注意选中的那三条记录的字节数,1 Byte ,原来 Chrome 发送了一条空的请求给服务器,所以服务器自然返回 400 了
至此,再结合上面所发现的特征,基本可以猜出原因了:与 Chrome 的并发连接数有关系!
我的判断是:
浏览器对于同域名的请求有并发连接数的限制,而 Chrome 的这个并发数的数值很高
Chrome 访问一个网页时,会立刻建立大量的 TCP 连接,以便进行后续的 HTTP 传输
如果此网页的外部资源较少,导致部分 TCP 连接不需要使用,那么在一段时间后,Chrome 会断开这个连接
断开连接时,Chrome 的处理方式是发送一个空请求给服务器,造成服务器报 400 错误
为了验证这个判断,我给首页加了一个 img 标签,增加了首页的一个前端资源,然后再访问网站
果然,几十秒之后,日志中只出现了 2 条 400 记录,比之前的少了一条,基本验证了以上我的判断
另外试验了一下IE8 ,发现并不会造成 400 错误,而根据资料,这两个浏览器的并发数都是6,看来这可能属于 Chrome 处理策略上的问题了
呵呵,看来有时候网页外链的资源少了,也会出现烦恼啊…
PS: 谁知道怎么修改 Chrome 的并发连接数?找了 N 久,貌似不支持嘛…
附录2.解决HTTP 400错误的方法
好长时间以来,野草在访问野草博客时就经常遇到HTTP400错误,现象是访问野草的个人门户一切正常,访问别人的博客也一切正常,今天又发现在谷歌浏览器chrome里访问野草博客遇到HTTP400错误,但使用其他浏览器访问野草博客却一切正常,遇到的错误提示如下:400 Bad Request nginx/0.8.15
野草之前搜索后,发现很多人都说这个错误与DNS有关,于是野草把自己的DNS折腾了好多遍,改用Google的DNS后还会遇到HTTP400错误,改用电信的DNS也还会遇到HTTP400错误,改成自动获取DNS服务器地址以后还是会遇到HTTP400错误,真是把野草郁闷的要死。
今天万般无奈之下,向和讯博客管理员求助,因为野草实在是怀疑野草博客所在的和讯服务器是不是出了啥问题,然后,野草得到了和讯博客管理员的提示,也就是本文要分享的解决HTTP400错误的方法:
先删除一下浏览器中的cookies,操作方法是:在浏览器中点击“Internet选项”然后再点击删除cookies。再尝试通过博客首页登录。
野草按照这个思路,尝试清除了谷歌浏览器chrome的浏览记录以后,发现果然彻底解决了野草访问时经常遇到的HTTP400错误的问题。
就这么简单!搞了半天,还是客户端的问题。希望这个方法能够帮到大家解决HTTP400错误的问题。
转载请注明: &
与本文相关的文章博主最新文章
博主热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
if ($host ~* XXXX.com) {
rewrite ^/(.*)$ http://www.XXXX.com/$1
我在nginx.conf文件是这样设置的啊..难道这样判断语句错了?
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
你这个是死循环了。应该把 example.com 和 www.example.com 分开两个server
server_name example.
return 301 http://www.example.com$request_
server_name www.example.
同步到新浪微博
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:
在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。问::.sl-ok../sl-ok.php?=确保浏览器的栏中显示的的拼写和格式正确无误什么意思?答:您好,可能是您的不可用。另外查到一些不能打开网页的问题及其解决办法:IE无法打开网页的常见原因及解决一、网络设置的问题这种原因比较多出现在需要手动...
问:PHP调用perl执行 ubuntuPHP调用perl执行调用perl过程正常.但是perl再调用外部程序貌似就无效果...答:先查看apache用的是什么,如果没有特殊指定,你的PHP应该用的是Apache所指定的,同样Perl也是这个。可以先尝试使用这个来执行你的Perl脚本,...
问:PHP中函数strptime执行问题?PHP中函数strptime为什么无法执行,执行时提示Fatal error:Call to undefined...答:strptime(PHP&=.1.RC1)你的额php版本,这个函数版本必须大于.1。希望能帮助你!
问:php日志在做一个,要在里面加个账户登陆日志功。只对电脑里的日志有谢了解。这...答:日志有ip时间离开时间浏览器型号浏过的页面加上浏览页面的时间进站入口分辨率屏幕作系统(省 )搜索引擎接入商...
问:PHP执行有时间吗?需要循环-,可是到1+就...如上答:缺省的执行时间是秒。你可以调用函数set_time_limit()重新设置:void set_time_limit(int$seconds)当你调用函数set_time_limit()时,执行时间从开始计算...
问:如何知道php执行速度慢在哪行码处答:装个xdebug,打开profiling,用cache grind看调度的日志就知道哪是瓶颈了
问:php的问题 a.php美容&form method="post"action="b.php"&姓名:...答:注释掉这行试试:;charset=GBK"&
问:php怎么写日志答:PHP这东西做日志很让人揪心。往数据库里面吧,没别的什么好办法。数据量大可用先把数据按格式到里面,然后load数据库中。你是说做个写日志的程序吗?下一个wordpress就是一个典型的...
问:php是什么意思?php是什么意思?答:前面应该还有。PHP,是英文超级文本预处理语言Hypertext Preprocessor的缩写。PHP是一种 HTML内嵌式的语言,是一种在器端执行的嵌入HTML文档的脚本语言,...
问:php该在哪里写日志?怎么写日志?日志是做什么用的?答:所谓的日志就是系统运行状态的数据。一般是将到文本或数据库中。:?phpfunction writeLog($msg){$logFile=date('Y-m-d').'.txt';msg=date...
问:php是什么意思php是什么意思答:PHP,一个嵌套的缩写名称,是英文超级文本预处理语言(PHP:Hypertext Preprocessor)的缩写。PHP是一种 HTML内嵌式的语言,是一种在器端执行的嵌入HTML文档...
问:php错误日志在哪里答:查看你的php配置就知道路径了
问:关闭浏览器时执行一段php码答:关闭浏览器时执行一段php码系统数据库浏览器php我想做一个日志系统,数据库每个人的登录开始时间结束时间,当浏览器关闭时离开时间!
问:linuxphp脚本执行,日志输出到问题有一个sh脚本,我用nohup./x.sh&log.txt这样执行时,输出到log.txt的日志中文...答:转换一下编码试试#从gb1转为utf iconv-f GB1-t UTF- log.txt&new_log.txt或者#从gb1转为utf iconv-f UTF-t GB1 log.txt&new_log.txt
09-1409-1609-1308-25
03-2504-0803-0704-22
◇本站云标签nginx是一个web服务器,因此nginx的access日志只有对访问页面的记录,不会有php 的 error log信息。
nginx把对php的请求发给php-fpm fastcgi进程来处理,默认的php-fpm只会输出php-fpm的错误信息,在php-fpm的errors log里也看不到php的errorlog
原因是php-fpm的配置文件php-fpm.conf中默认是关闭worker进程的错误输出,直接把他们重定向到/dev/null,所以我们在nginx的error log 和php-fpm的errorlog都看不到php的错误日志。
调试起来就很痛苦了。解决nginx下php-fpm不记录php错误日志的办法:
1.修改php-fpm.conf中配置 没有则增加catch_workers_output = yeserror_log = log/error_log
2.修改php.ini中配置,没有则增加log_errors = Onerror_log = "/usr/local/lnmp/php/var/log/error_log"error_reporting=E_ALL&~E_NOTICE
3.重启php-fpm,当PHP执行错误时就能看到错误日志在"/usr/local/lnmp/php/var/log/error_log"中了
1. php-fpm.conf 中的php_admin_value[error_log] 参数 会覆盖php.ini中的 error_log 参数所以确保你在phpinfo()中看到的最终error_log文件具有可写权限并且没有设置php_admin_value[error_log] 参数,否则错误日志会输出到php-fpm的错误日志里。
2.找不到php.ini位置,使用php的phpinfo()结果查看
3.如何修改PHP错误日志不输出到页面或屏幕上修改php.inidisplay_errors = off //不显示错误信息(不输出到页面或屏幕上)log_errors = on //记录错误信息(保存到日志文件中)error_reporting = E_ALL //捕获所有错误信息error_log = //设置日志文件名
程序中修改以上配置ini_set("display_errors",0)ini_set("error_reporting",E_ALL); //这个值好像是个PHP的常量ini_set("error_log","&日志文件名&")ini_set("log_errors",1);
4.如何将php的错误日志输出到nginx的错误日志里在PHP 5.3.8及之前的版本中,通过FastCGI运行的PHP,在用户访问时出现错误,会首先写入到PHP的errorlog中如果PHP的errorlog无法写入,则会将错误内容返回给FastCGI接口,然后nginx在收到FastCGI的错误返回后记录到了nginx的errorlog中在PHP 5.3.9及之后的版本中,出现错误后PHP只尝试写入PHP的errorlog中,如果失败则不会再返回到FastCGI了,错误日志会输出到php-fpm的错误日志里。所以如果想把php错误日志输出到nginx错误日志,需要使用php5.3.8之前的版本,并且配置文件中php的error_log对于php worker进程不可写
阅读(...) 评论()

我要回帖

更多关于 浏览器哪个好 的文章

 

随机推荐