【问题标题】:nginx not returning Cache-Control header from upstream gunicornnginx 没有从上游 gunicorn 返回 Cache-Control 标头
【发布时间】:2018-12-10 20:05:59
【问题描述】:

我正在使用WhiteNoise 提供来自在 gunicorn 下运行的 Django 应用程序的静态文件。由于某种原因,gunicorn 后端返回的 Cache-ControlAccess-Control-Allow-Origin 标头没有通过 nginx 代理传递回客户端。

下面是对 gunicorn 后端的示例请求的响应:

% curl -I -H "host: www.myhost.com" -H "X-Forwarded-Proto: https" http://localhost:8000/static/img/sample-image.1bca02e3206a.jpg

HTTP/1.1 200 OK
Server: gunicorn/19.8.1
Date: Mon, 02 Jul 2018 14:20:42 GMT
Connection: close
Content-Length: 76640
Last-Modified: Mon, 18 Jun 2018 09:04:15 GMT
Access-Control-Allow-Origin: *
Cache-Control: max-age=315360000, public, immutable
Content-Type: image/jpeg

当我通过 nginx 服务器向同一个文件发出请求时,缺少两个标头。

% curl -I -H "Host: www.myhost.com" -k https://my.server.com/static/img/sample-image.1bca02e3206a.jpg

HTTP/1.1 200 OK
Server: nginx/1.10.3 (Ubuntu)
Date: Mon, 02 Jul 2018 14:09:25 GMT
Content-Type: image/jpeg
Content-Length: 76640
Last-Modified: Mon, 18 Jun 2018 09:04:15 GMT
Connection: keep-alive
ETag: "5b27758f-12b60"
Accept-Ranges: bytes

我的 nginx 配置与 gunicorn deployment docs 中记录的内容差不多,即我没有启用 nginx 缓存(nginx -T | grep -i cache 为空)或做任何我认为不寻常的事情。

我错过了什么?

【问题讨论】:

  • gunicorn 真的得到请求了吗?你能看到某种日志吗?也许 nginx 只是自己提供文件?您的链接下的默认配置中有location / 块。
  • 你没有在 Nginx 中启用缓存,你想知道为什么它没有在它的响应头中返回缓存指令?代理服务器不仅仅是一个管道,您的连接将通过它原封不动地流向其目的地。
  • @AlexandrTatarinov 是的!谢谢 :-) 我习惯于在我假设的其他场景中定义“位置/静态”,因为我把它遗漏了,nginx 没有处理文件。我忘了“根”...

标签: django nginx gunicorn whitenoise


【解决方案1】:

问题是你有

location / {
    try_files $uri @proxy_to_app;
}

nginx 配置中的指令,所以 nginx 只是自己提供文件,而 gunicorn 甚至都不知道,当然不能添加标题。

【讨论】:

    【解决方案2】:

    原来我忘记了几个月前配置的root 指令,它现在正在获取静态文件。我的错误是假设由于我没有配置 location /static 指令,nginx 会将所有请求代理到后端。

    我的解决方案是从 try_files 指令中删除 $uri 引用:

    location / {
        try_files /dev/null @proxy_to_app;
    }
    

    或者,我可以简单地将@proxy_to_app 位置块的内容直接放在location / 块中。

    感谢 Alexandr Tatarinov 在 cmets 中的建议。

    【讨论】:

      猜你喜欢
      • 2011-06-13
      • 2021-11-10
      • 1970-01-01
      • 2015-04-13
      • 1970-01-01
      • 1970-01-01
      • 2016-10-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多