频道栏目
首页 > 系统 > Linux > 正文

nginx访问一直显示502是个什么情况

2018-08-11 15:15:23           
收藏   我要投稿

写文章之前,一共遇到过2次访问自己的站点,nginx返回502。每次情况都不一样,做个记录:

第一次
引起502原因:内存溢出
排查方法:在终端 输入top。查看服务器的运存是否已经达到了峰值

内存溢出这问题就很浅显易见了。
因为是临时的服务器,运存只有1G,可是临时的项目非常的多,在报502之前,服务器已经在跑着3个项目。

这时候服务器没及时的监控(其实已经到了运行内存的峰值了),接着又把第4个项目放了上去。

刚开始的时候还算平稳,过了5分钟后。4个项目的接口全部返回了502。然后折腾着重启tomcat,重启nginx。

可是都不行,于是上控制台看,原来是cup到顶了。登录终端,输入top一看,的确已经到顶了。于是把第4个项目先撤下来,重启nginx,重启tomcat。一切恢复正常(到现在服务器一直都在崩溃的边缘徘徊,所以有重要的项目最好还是先升级一下服务器)。


第二次
引起502原因:tomcat配置文件异常
排查方法:只能从日志入手,一步一步排查

1、有了第一次的经验,这次一看到502.先查看峰值 top

一切正常,服务器的压力还算轻松,因为只跑着一个项目

2、既然不是峰值的问题,那就从nginx的日志入手,查看nginx日志(在安装目录下/logs/error.log 我的就是在:/usr/local/nginx/logs)

[error] 14304#0: *94 connect() failed (111: Connection refused) while connecting to upstream, client: xxx.xxx.xx.xxx, server: xxxx.com, request: "GET / HTTP/1.1", upstream: "http://xx.xxx.xxx.xxx:8080/", host: "xxxxx.com"

搜索 nginx 502 或者搜索报错的信息,给出的答案都是一个样:

查看 php-fpm 是否启动,修改php-fpm的配置文件。不得不说这可能是解决的方法之一,不过搜索出来的答案都是千篇一律,根本找不到点子上(因为我的服务器根本就没装php-fpm,不过之前运行正常,所以我很肯定的排除了这种可能性!)

3、既然找到了错误信息,可是又没对应的解决方案,最好的方法就是重启一次nginx。杀掉nginx的进程,然后用nginx -t来检测配置文件是否正常。

检测发现一切都正常,重启nginx,还是502。而且由于我的nginx代理给tomcat了。所以无论访问哪个接口,都是会转发到tomcat中去。

所以我只能通过服务器的IP地址(不加任何端口,在浏览器中输入服务器IP地址)来访问nginx。打开的正是nginx的欢迎页面,这时候证实了nginx是正常在运行的

4、既然转发给了tomcat。那就在从tomcat入手

关闭tomcat。在启动tomcat,可是关闭的时候报了个错,tomcat并没有在运行

于是我先把tomcat在运行起来,执行启动命令没有报错,一切都很平静,可是站点还是报502

5、开始排查tomcat日志:

/usr/local/tomcat8/apache-tomcat-8.5.29/logs/catalina.对应日期.log

在日志中隐约看到一个错误信息:

java.lang.IllegalStateException: java.io.FileNotFoundException

文件找不到的异常。由于之前我配置过一个nginx+tomcat 配置不同二级域名访问tomcat中的对应项目。所以修改过tomcat的server.xml文件。详细看我之前的博文

这就不难解释了,由于之前的配置文件中配置了多个HOST节点,并且是映射到指定的项目目录中。造成了找不到文件的异常,使tomcat挂了,所以访问站点就报了502

到这里,502的问题就算是解决了,把tomcat错误的配置文件修改回来,或者把多余的host节点删除。然后关闭tomcat,这时候tomcat就正常关闭了,在重新重启tomcat。等tomcat运行完之后,站点恢复正常。

小结:平时还是要多留意服务器的运行情况

其次,每次出问题后,不要盲目相信其他操作,最好能从日志文件入手,因为别人的经验不一定适用于自己,盲目操作可能会让问题雪上加霜

再者,一定要很清楚到底是服务的问题还是程序的问题,因为tomcat归tomcat,nginx归nginx。需要一个一个排查清楚。

就像这次的事故,是因为tomcat的配置文件,导致tomcat运行异常。然后引发的nginx报错502

最重要的就是平时要做好备份保护,不要一通操作之后连最基本的配置都改乱了

至此,我的问题就暂时解决了,又是一次艰难的排查。

相关TAG标签 nginx 访问 502报错
上一篇:nginx配置HTTPS 访问PHP页面空白问题如何解决
下一篇:Docker基础入门
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站