我们有一个运行 nginx 1.10.3 的 Debian 9.4 盒子。该盒子的目的是提供文件和资源的重定向,以便营销部门可以在其材料中提供链接,如果文档更新,底层内容可以指向另一项资产。这样,客户就可以始终访问正确的版本以供参考。
尽管我们将其设置得尽可能简单,但我们还是看到了类似缓存的奇怪行为。我们可以更改重定向指向的内容,但它仍然解析为旧版本。
作为参考,以下是我们的网站配置:
server {
listen 80;
server_name files.oursite.com;
index index.html;
error_page 404 http://files.oursite.com/error.html;
location / {
try_files $uri $redirect;
}
location @redirect {
include /home/fileserve/redirect.conf;
}
在redirect.conf中,会出现以下情况:
rewrite /foo http://files.oursite.com/foo.pdf redirect;
那样就可以了。但如果我们将其更新为:
rewrite /foo http://files.oursite.com/bar.pdf redirect;
foo.pdf 仍然弹出。
nginx 的标头响应显示它仍在提供 foo.pdf,我已从多台机器、浏览器和网络连接尝试过它,以验证它在任何本地情况下都没有缓存。这也是在我从 301 切换到 302 之后,因为我们不想要本地缓存。
有人知道发生了什么,以及如何解决这个问题吗?谢谢!
编辑:根据要求添加故障排除:
nginx -t 语法正确,测试成功。nginx -T 显示重定向加载(/foo 应该重定向到 /bar.pdf)curl 如下:
curl -ihttp://files.oursite.com/foo:
HTTP/1.1 302 Moved Temporarily
Server: nginx
Date: Fri, 25 Jan 2019 18:18:36 GMT
Content-Type: text/html
Content-Length: 154
Connection: keep-alive
Location: http://files.oursite.com/bar.pdf
curl -I 直接输出到文件,根据@Richard Smith:
对于旧文件(foo.pdf):
HTTP/1.1 200 OK
Server: nginx
Date: Fri, 25 Jan 2019 18:39:12 GMT
Content-Type: application/pdf
Content-Length: 980444
Last-Modified: Tue, 20 Nov 2018 18:10:25 GMT
Connection: keep-alive
ETag: "5bf44e11-ef5dc"
Accept-Ranges: bytes
对于新文件(bar.pdf):
HTTP/1.1 200 OK
Server: nginx
Date: Fri, 25 Jan 2019 18:39:45 GMT
Content-Type: application/pdf
Content-Length: 5948805
Last-Modified: Thu, 24 Jan 2019 23:23:50 GMT
Connection: keep-alive
ETag: "5c4a4906-5ac585"
Accept-Ranges: bytes
curl -I 之后添加 expires -1;
HTTP/1.1 302 Moved Temporarily
Server: nginx
Date: Fri, 25 Jan 2019 20:42:59 GMT
Content-Type: text/html
Content-Length: 154
Connection: keep-alive
Location: http://files.oursite.com/foo.pdf
Expires: Fri, 25 Jan 2019 20:42:58 GMT
Cache-Control: no-cache
所有这一切中最困难的部分是记得擦除我的 URL :)
答案1
我认为我已经找到答案了,但有人可能想进一步解释为什么会发生这种情况。
我的重定向文件实际上具有以下内容:
rewrite /foo http://files.oursite.com/foo.pdf redirect;
rewrite /foo-EXAMPLE http://files.oursite.com/foo-EXAMPLE.pdf redirect;
无论出于什么原因,输入 /foo-EXAMPLE 总是会选择 /foo 的重定向。这可以解释为什么无论我对 /foo-EXAMPLE 做了什么更改,它都会选择 /foo.pdf。如果我从重定向文件中删除 /foo,/foo-EXAMPLE 就可以正常工作。
似乎可以将 -EXAMPLE 添加到任何 URL 前面,并且它仍会抓取 /foo。我不知道为什么。