nginx配置的一个小错误
October 11, 2019
写在前面
最近一次帮同事找错误的经历,虽然最后发现是很低级的错误,但是过程挺有意思
问题描述
之前搭建的新管理后台项目A上线了,搭档想在本地调试,于是按照文档配好了nginx配置文件,本地启动项目,按域名访问却被重定向到了另一个项目B的页面
排查过程
-
检查项目A的ip地址是否正确
确认是本机ip,没有错,刷新页面,问题依旧
-
switchHosts
关闭其他项目的host配置,只保留项目A的配置清理dns缓存,刷新页面,问题依旧,怀疑
nginx
配置没有生效 -
nginx -t
检查配置检查失败,报错
“duplicate upstream a-proxy”
,定位到A的nginx
配置文件a-proxy
是配置的反向代理,在配置文件里大概是这样的server { ... location / { ... proxy_pass http://a-proxy; } } upstream a-proxy { server 127.0.0.1: 12076; }
google了一下这个错误,说是出现了这个错误说明
a-proxy
出现了多次,删除多余的就可以,于是排查配置文件 -
A的nginx配置文件中搜索重复的
a-proxy
没有找到
-
排查其他
server
的nginx
配置文件,搜索重复的a-proxy
没有找到
-
排查合并的主
nginx
配置文件,搜索重复的a-proxy
还是没有找到
-
给
a-proxy
改名,看是否还是报错仍然报相同的错误,“duplicate upstream xxx-proxy”,这样基本上可以确认是A的同一份配置文件被加载了多次导致的错误
-
回到主nginx配置文件,开始查找加载的配置代码
经过排查发现
include servers/*
代码出现了多次,正是这个代码导致了同一份配置文件被多次加载。 于是删除多余代码,重新nginx -t
检查通过,重启nginx后项目访问正常
总耗时: 1小时
总结
经过搭档回忆,起因是之前重装nginx复制粘贴配置文件的时候不小心复制重复了一些内容。
其他配置尽管重复加载,但没有遇到这个不允许重复的情况,这个问题一直没有暴露出来,直到这次...
自己对nginx不太熟悉,以后还要抽时间补一补相关知识,以上。