我的设置使用映射来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;
}
(编辑)正如 Alexey 建议的那样,我这样做了:
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 传递的内容仍然没有添加标头。
答案1
解决方案由 Alexey 和 Richard 在评论中提供。我必须使用不同的 nginx 变量,以及(至少)用于 HTML 文件的映射条目的正则表达式:
map $upstream_http_content_type $expires2 {
default off;
~text/html 2d;
text/plain 20d;
text/css 180d;
}
location / {
uwsgi_pass django;
expires $expires2;
}