nginx 302 重定向到文件未更新

nginx 302 重定向到文件未更新

我们有一个运行 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。我不知道为什么。

相关内容