我的设置使用映射来Expires
为各种静态文件定义不同的标头(基于其 mime 类型)。对于代理内容 ( uwsgi_pass
),我使用静态Expires
标头:
map $sent_http_content_type $expires {
default off;
text/html 7d;
text/css 180d;
application/font-woff2 1y;
application/pdf 1y;
~image/ 1y;
}
server {
listen 443 ssl http2;
server_name example.com;
location / {
uwsgi_pass django;
expires 7d;
}
location ~ ^/(css|fonts|images|pdf|html)/ {
root /var/www/django/static/;
expires $expires;
}
}
使用映射(通过$expires
变量)代理内容不起作用。nginx 有什么方法可以识别代理内容的 mime 类型来完成这项工作吗?
location / {
uwsgi_pass django;
expires $expires;
}
(编辑)正如阿列克谢所建议的,我这样做了:
map $upstream_http_content_type $expires2 {
default off;
text/html 2d;
text/plain 20d;
text/css 180d;
}
location / {
uwsgi_pass django;
expires $expires2;
}
不幸的是,仍然没有将Expires
标头添加到通过 uwsgi 传递的内容中。
Alexey 和 Richard 在评论中提供了解决方案。我必须使用不同的 nginx 变量,以及(至少)HTML 文件的映射条目的正则表达式: