请教一下关于用 nginx 配置静态资源访问的问题

2018-12-13 10:38:39 +08:00
 ukipoi

配置如下:

server {
        listen       8099;
        server_name  localhost;
        
        location / {
            root E:/img/;
            autoindex on;
        }
        location /img/{
            root E:/img/;
            autoindex on;
        }
    }

发生了这样的问题:
我直接以 localhost:8099/123.jpg 可以访问到图片。
但是我以 localhost:8099/img/123.jpg 会显示 404 错误。
我以为是他把 "/img/123.jpg" 理解成了 "E:/img/" 下 "img" 文件夹里的 "123.jpg" 图片,所以我把 "/" 的 location 配置注释掉了,只保留 "/img/" 的配置,但是访问还是显示 404 错误,请问这是什么原因?正确的话应该如何配置?
系统是 WIN7 nginx 版本是 1.14.2

2445 次点击
所在节点    问与答
4 条回复
0ZXYDDu796nVCFxq
2018-12-13 10:42:53 +08:00
location /img/{
root E:/img/;
autoindex on;
}

改为

location /img/{
alias E:/img/;
autoindex on;
}

原理自己看官方文档吧
https://nginx.org/r/root
zpf124
2018-12-13 11:20:27 +08:00
location 只是匹配,而不是匹配之后截掉匹配的部分,另外你对于 这个 location 的匹配顺序理解也有些问题。
除了几个个别的规则外,location 的匹配是越精确越优先的,在同样精度的情况下才会按照文本顺序匹配的, 你百度搜一下 有很多这种文章。


对于 你这个请求, /img/123.jpg 在不注释掉任何一个之前 也依旧是被 /img/ 的 location 匹配的。

但 只是匹配, location 不会截取 URI 的

也就是说 进了这个 location 处理里面的 URI 还是 /img/123.jpg 。 而你指定的 root 是 E:/img/ 自然拼接的就多一层了。

改成 这样也行。

location /img/{
root E:/;
autoindex on;
}
msg7086
2018-12-13 13:50:09 +08:00
非常典型的 alias 与 root 的区别。用 root 的话解析地址就是 root 地址加上全文件名。
loading
2018-12-13 13:55:03 +08:00
这种看 error.log 就能自己修过去。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/517141

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX