设为首页 收藏本站
查看: 736|回复: 0

[经验分享] nginx的error.log日志常见的几个错误解决方法

[复制链接]

尚未签到

发表于 2018-11-13 09:36:46 | 显示全部楼层 |阅读模式
  nginx.conf里会有两个日志,分为access.log 和 error.log。其中这两个日志可以细化,一般来说在nginx目录下会有一个logs会保存,然后也可以在对应的server目录里可以分别的设定access.log和error.log来了解对应server的情况。
  access.log主要是记录"谁来登陆了,从哪里登陆的,登陆后发生了什么",具体格式可以在nginx.conf里设定。
  error.log主要记录的是检查nginx.conf里发现的错误,模式不支持自定义。与access.log后面经常用main结尾不同,error.log后面的结尾可能是warm也可能是crit,这里的warm或者crit代表错误的等级,crit表示最少,而debug表示记录的最详细,屁大点事都记下来。
  error_log off并不能关闭日志记录功能,它将日志文件写入一个文件名为off的文件中,如果你想关闭错误日志记录功能,应使用以下配置:error_log /dev/null crit;(把存储位置设置到Linux的黑洞中去 )。
  当打开error.log的时候,可能会看到各种样的内容,比如:
“2016/05/03 10:20:51 [emerg] 20952#0: unexpected "}" in /usr/local/nginx/conf/nginx.conf:87”  这句话就说明在nginx.conf的87行里有一个 } 是错误的,检查一下}是不是多余了,或者;少了,这个错误的级别是emergency;
2016/05/03 10:23:01 [emerg] 21023#0: "root" directive is duplicate in /usr/local/nginx/conf/nginx.conf:86  这句话就是说明在nginx.conf的第86行里root设定重复了,级别同样是emergency。以上两个都是书写的问题,很好纠正;
2016/05/03 10:23:31 [notice] 21045#0: signal process started  这个意思是nginx已经在运行的状态下,被执行启动,这个不算致命错误;
nginx: [alert] could not open error log file: open()"/usr/local/nginx/logs/error.log" failed (13:Permissiondenied)  这个是说当前用户没有权限写入error.log的日志,解决方法要来权限就行了;
nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory)  nginx提示无法找到nginx.pid这个文件了,使用#/usr/local/nginx/sbin/nginx -c  /usr/local/nginx/conf/nginx.conf,重新启动一下,就自动生成pid文件了。
  下面说几个有特殊代表性的错误:
  1)worker process 某某某 exited on signal 11 (core dumped)
  这种错误基本就是刷error.log的屏,严重的甚至直接让nginx崩掉。具体表现在用户端就是“视频打不开,网页打不开等等等”。
  这种错误一般是表示用户程序nginx进行读操作时访问的地址无效,具体一点就是搜索引擎的蜘蛛在爬取到加密部分时,得不到正确的路径,又没有被定位到错误页导致的。
  如何修改,在nginx.conf里的防盗链部分检查一下“secure_download_fail_location;” ,即“请求错误时,定向到错误页”的模块,确认location是否定向到一个正确地址为错误页面。
  2)nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
  nginx先监听了ipv4的80端口之后又监听了ipv6的80端口,于是就重复占用了。
  把nginx.conf里的:
listen 80;  
listen [::]:80 default_server;
  改成
listen 80;  
listen [::]:80 ipv6only=on default_server;
  http://stackoverflow.com/questions/14972792/nginx-nginx-emerg-bind-to-80-failed-98-address-already-in-use
  3)  rewrite or internal
redirection cycle while internally redirecting to "/ie.html", client:
127.0.0.1, server: localhost, request: "GET / HTTP/1.1", host: "203.46.90.146"
  这个错误一般就是rewrite重定向进入了死循环,用户端的情况就是登陆localhost/ie.html的时候,出现500错误。要解决这个问题需要vim一下nginx.conf这个配置文件,查找到ie.html。发现这一行是这么写的:
location / {  
    if ($http_usr_agent ~ MSIE) {        #如果用户使用的浏览器匹配ie的话
  
        rewrite ^.*$ /ie.html;        #ie用户会rewrite到/usr/local/nginx/html/ie.html里
  
        }
  
    root /usr/local/nginx/html;          #非ie用户就是访问/usr/local/nginx/html的index.html界面
  
    index index.html
  
}
  返回到/usr/local/nginx/html,发现的确存在ie.html,且格式正确。
  问题在 if语句那一段,ie用户被发现使用的浏览器是ie就会去登陆/ie.html界面,但是,要登陆/ie.html的时候还是会先判断浏览器型号,发现是ie,然后又被派去登陆/ie.html,然后再登陆/ie.html的时候,又要判断浏览器型号,就这样周而复始死循环,所以最后就500,Internal Server Error。
  遇到这种情况怎么办?增加一个break,跳出循环重定向。
location / {  
    if ($http_usr_agent ~ MSIE) {        #如果用户使用的浏览器匹配ie的话
  
        rewrite ^.*$ /ie.html;        #ie用户会rewrite到/usr/local/nginx/html/ie.html里
  
         break;
  
            }
  
    root /usr/local/nginx/html;          #非ie用户就是访问/usr/local/nginx/html的index.html界面
  
    index index.html
  
}
  4)open() "某网址" failed (24:Too Many open files),client:某某某,server:某某某...
  这种错误很明显,就是一个socket进程打开的文件超额,这种情况,需要适当放开可打开的文件数量。
  ulimit -n 20000,这个值默认是1024,现在放大到20000。
  5)499错误
  Nginx的error.log有可能会出现499错误,这种错误有两种可能,一个是客户端主动断开链接;第二个就是两个post距离过近,nginx认为这种快速提交post是不安全的,服务器就主动拒绝链接。
  解决这种错误就是在nginx.conf的全局配置里,添加一句话:
  proxy_ingore_client_abort on;
  意思是让服务器不要主动关闭对客户端的链接。这么搞,安全性肯定是会有所下降,但是总比找不到服务器要好。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-634417-1-1.html 上篇帖子: nginx 替换网站响应内容(ngx_http_sub_module) 下篇帖子: nginx限制用户下载文件速率
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表