An old dog learns code

nginx配置的一个小错误

October 11, 2019


写在前面

最近一次帮同事找错误的经历,虽然最后发现是很低级的错误,但是过程挺有意思

问题描述

之前搭建的新管理后台项目A上线了,搭档想在本地调试,于是按照文档配好了nginx配置文件,本地启动项目,按域名访问却被重定向到了另一个项目B的页面

排查过程

  1. 检查项目A的ip地址是否正确

    确认是本机ip,没有错,刷新页面,问题依旧

  2. switchHosts关闭其他项目的host配置,只保留项目A的配置

    清理dns缓存,刷新页面,问题依旧,怀疑nginx配置没有生效

  3. 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出现了多次,删除多余的就可以,于是排查配置文件

  4. A的nginx配置文件中搜索重复的a-proxy

    没有找到

  5. 排查其他servernginx配置文件,搜索重复的a-proxy

    没有找到

  6. 排查合并的主nginx配置文件,搜索重复的a-proxy

    还是没有找到

  7. a-proxy改名,看是否还是报错

    仍然报相同的错误,“duplicate upstream xxx-proxy”,这样基本上可以确认是A的同一份配置文件被加载了多次导致的错误

  8. 回到主nginx配置文件,开始查找加载的配置代码

    经过排查发现 include servers/*代码出现了多次,正是这个代码导致了同一份配置文件被多次加载。 于是删除多余代码,重新nginx -t检查通过,重启nginx后项目访问正常

总耗时: 1小时

总结

经过搭档回忆,起因是之前重装nginx复制粘贴配置文件的时候不小心复制重复了一些内容。

其他配置尽管重复加载,但没有遇到这个不允许重复的情况,这个问题一直没有暴露出来,直到这次...

自己对nginx不太熟悉,以后还要抽时间补一补相关知识,以上。