Django nginx未从上游gunicorn返回缓存控制标头

Django nginx未从上游gunicorn返回缓存控制标头,django,nginx,gunicorn,whitenoise,Django,Nginx,Gunicorn,Whitenoise,我用它来提供在gunicorn下运行的Django应用程序中的静态文件。出于某种原因,gunicorn后端返回的缓存控制和访问控制允许源站头不会通过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

我用它来提供在gunicorn下运行的Django应用程序中的静态文件。出于某种原因,gunicorn后端返回的
缓存控制
访问控制允许源站
头不会通过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配置与中的文档非常相似,也就是说,我没有启用nginx缓存(
nginx-t | grep-i cache
为空),也没有做任何我认为不寻常的事情


我遗漏了什么?

问题是你有

location / {
    try_files $uri @proxy_to_app;
}

nginx config中的指令,所以nginx只是自己提供文件,gunicorn甚至不知道,当然也不能添加头。

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

我的解决方案是从
try\u files
指令中删除
$uri
引用:

location / {
    try_files /dev/null @proxy_to_app;
}
或者,我可以简单地将
@proxy\u to_app
location块的内容直接放在
location/
块中


感谢Alexandr Tatarinov在评论中的建议。

gunicorn真的收到了请求吗?你能看到一些日志吗?也许nginx只是自己提供文件?您的链接下的默认配置中有
location/
块。您还没有在Nginx中启用缓存,您想知道它为什么不在响应头中返回缓存指令吗?代理服务器不仅仅是一个管道,您的连接将不加更改地通过它到达目的地。@Alexandratarinov是的!谢谢:-)我已经习惯于在我假设的其他场景中定义“位置/静态”,因为我忽略了它,nginx没有处理该文件。我忘了“根”。。。