Nginx设置缓存expires后返回404找不到文件的原因

Nginx设置缓存expires后返回404找不到文件的原因

前言

今天访问我的站点图片加载比较慢,想起当时用的背景图片都是1920×1080分辨率,而且没有做压缩,一个图片达到1.0M多。于是在nginx 开启了图片以及css js 压缩与缓存。但是开启后写文章新上传的图片都是404.于是开始排查问题

问题描述:Nginx服务器想设置一些文件(图片、js、css等)的浏览器缓存,但一旦在配置文件nginx.conf里加上expires的语句,我在wp后台新文章上传的图片就显示404。

排查过程:

1.既然他访问的图片的url可以确定,我在本地curl 访问下,排查下浏览器缓存的问题

2.依旧404但是可以排除缓存的问题,接着查看是不是图片根本不存在,如果是的话证明上传图片这个过程有问题。结果查看图片已经存在

3.证明我们的图片已经存在,但是访问不到,那只有一种可能的原因—《访问路径发生改变》表面上看到访问的路径是站点下面wp-content/uploads/xxxx/xxx.png,但是由于我们加了优先级高的location规则(css js 图片的匹配)要比location / 高 ,)而忽略了location / 里面的root配置。所以404找不到路径(因为你没定义)

4.仔细看规则发现root写在location / 里面了,而缓存的那两个规则里没定义root,默认他会去找缺省的root配置(/html这个缺省路径)而这是不会在网页上显示出来的。并且访问的是图片匹配上了规则默认他会优先读缓存的配置。

解决:在网上对比了几个添加静态缓存的方式,发现他们都把root写进去了,看了下自己的配置文件root的位置,这才恍然大悟,我的root实际上只写在了location / 这个范围内,在这范围外的实际都没生效。这里有两种方法

1.要么把root写在http段内扩大作用域

2.在独立location中配置自定义root路径。(由于我本身缓存的内容就是root路径内的,没必要单独各自location加root,所以采用方法1比较方便)

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Loading...