原因分析:

原先的配置文件如下:

nginx root拼接_运维


访问文件发现一直显示404错误。排查想法是查找相应的错误日志,看nginx最终到磁盘的哪个路径下寻找文件,从而定位错误原因。

最初以为错误日志是在这个路径下

nginx root拼接_nginx root拼接_02

但是查看错误日志,发现只有请求的url错误信息,但是nginx具体是到哪个目录下去查找文件,这没有显示。

后来发现配置文件中还有这一段:

nginx root拼接_面试_03


于是将两个log的路径修改为实际存在的路径,最终在错误日志中找到了具体的路径信息:

nginx root拼接_运维_04


发现是去server下的root去寻找文件。

nginx root拼接_面试_05


于是怀疑是否是root的优先级问题。

在Bing上搜索:

nginx root拼接_linux_06


nginx配置文件 location段 匹配优先规则 附 root 和 alias 的区别这篇文章中,基本确认我们自己配置的root路径的优先级低于宝塔面板内置规则的优先级,即下面的配置优先级高:

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    {
        expires      30d;
        error_log /dev/null;
        access_log /dev/null;
    }

解决方案:

参考宝塔中已有的配置,将我们原先的配置修改成下面这样:

nginx root拼接_面试_07


即在原来的基础上加上 ~ ^,再次访问图片显示成功。


nginx root拼接_面试_08