通过nginx代理访问网站返回502 Bad Gateway
问题描述
这是在部署慕课网音乐项目时遇到的一个问题,笔者通过浏览器访问服务器上的项目地址时,页面返回502 Bad Gateway
问题分析
首先分析,既然页面能访问并返回502 Bad Gateway
,说明与nginx通信是畅通的,但是没有找到服务器3200端口上运行的程序。 笔者就试着npm命令重启node服务,发现服务器的3200端口已被占用无法启动。于是想到了用netstat -tunlp | grep 3200
命令查看是谁在使用3200端口,查看后发现占用端口的正是nginx服务。而3200也正是nginx配置里监听的端口,故笔者猜测nginx若监听某个端口则会占用那个端口。 为了验证想法,笔者把nginx监听改为3100端口,然后node仍在3200端口启动,此时node服务正常运行,从浏览器访问项目也正常,不会返回502错误
解决方案
在此案例中,502 Bad Gateway
产生的原因是项目服务没启动,同时nginx代理端口转发到这个未启动的服务端口上而导致的。所以要解决这个问题,一方面要确保你的项目要正常运行,另一方面则是确保nginx代理到正确的服务端口上(PS:其实这个项目也可以不走nginx,直接通过ip:3200访问)