最近在做项目迁移工作,迁移过程中遇到了一个问题,docker启动了nginx后,只能访问nginx静态路径下的资源,不能访问挂载文件资源。访问挂在资源时提示如下图:
刚开始以为是docker文件挂载时路径的问题,重建容器调试了半天仍然没有解决,防火墙与selinux关了也不好使,最后重装docker,没有解决。
睡了一宿后意识到自己找错了问题方向,既然能够访问到nginx静态路径(/usr/share/nginx/html)下的资源,说明容器应该没有问题。尝试了配置的路径发先并没有按照配置的规则进行转发跳转,于是怀疑配置的路径问题,修改了多次配置文件仍然没有解决问题。
就在快要放弃的时候,把配置文件中使用include包含的配置文件直接复制修改后放到了nginx.conf中,重启容器,然后好使了,但是问题出在哪还没找到。
仔细观察了include包含的文件后发现,配置文件中server 的 server_name 与端口属性相同,遂怀疑是冲突导致,修改回原来的形式后验证,果然出现了错误。
经过搜索了解到存在了2个相同的server_name,由于语法没有问题,所以启动Nginx不会因此而失败,而在实际使用情况中,如果有多个Server_name使用了相同的值,Nginx会按照读取顺序进行优先处理。也就是说我下面的两个配置中只有一个文件的配置生效了,而生效的那个刚好指定了nginx静态路径,所以出现了有的资源能访问到,有的资源访问失败。
观察原系统中的配置文件,发现两个配置文件使用的sever_name分别是外网和内网IP,至此因为学艺不精浪费了一天时间的愚蠢问题解决了,记录下来。