某天突然访问自己的测试域名,然后 404 了,然后就像无头苍蝇一样,四处尝试,看 nginx 的配置,折腾一番,无果。最后在同事的帮助下,找到了一些端倪。虽然这几个步骤很简单,但却是整个解决问题的思路。
1、看 nginx 请求的 access.log
查看 nginx 配置的日志,确认请求已经到达了 nginx。
nginx 日志配置指令:
access_log /data/logs/nginx/api.access.log;
error_log /data/logs/nginx/api.error.log;
2、检查域名指定的 upstream 访问的 server 端口号是否正确
upstream my_service {
# 192.168.1.10 Nginx 服务器,8899 是 Nginx 监听的端口号
server 192.168.1.10:8899 weight=1;
}
我的域名的 upstream 配置的是一台 Nginx 服务器,请求都打到那台 Nginx 服务器上,然后转发到后端 server。有一天我访问的时候突然就出现 404 了,我看 Nginx 服务器也是启动得好好的,后端服务也是正常启动的。
然后我在 Nginx服务器 上查看它监听的端口号: netstat -anp | grep nginx
发现我域名配置的 upstream 的 server 端口号「8899」在上面这个图中没有,有可能是谁动了我的配置文件,最后改了域名指向的 upstream 的 server 端口号,然后 404 就消失了。
3、检查后端服务是否可达
如果已经请求到 nginx,那就看是否请求到了后端服务,
先确认后端服务是否启动起来,这个看后端日志应该能发现点什么,并通过 curl 127.0.0.1:8080
是看是否能访问到你的服务。
每个人遇到的这个问题的原因可能不是相同的,但只要心中有一个大致的解决问题的思路方向,就不会深陷其中而无法看清问题的本质。