当我将以下内容添加到我的 Nginx 配置服务器块时,/blog/ 位置开始对所有引用的文件类型进行 404 处理。利用 expires 指令并继续保持 proxy_pass 完全正常工作的正确方法是什么?有没有办法调整正则表达式以说出除 /blog/* 目录之外的所有这些文件类型?
location ~* \.(jpg|jpeg|png|gif|ico|css|js|pdf)$ {
expires 7d;
}
以下是服务器块中的其他位置引用。如果我删除 7 天有效期,一切正常。
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location /blog/ {
proxy_pass https://blog.domain.com/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
error_page 404 /index.php;
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
# browser caching of static assets
location ~* \.(jpg|jpeg|png|gif|ico|css|js|pdf)$ {
expires 7d;
}
答案1
例如:
map $uri $expires {
default off;
~\.(jpg|jpeg|png|gif|ico|css|js|pdf)$ 7d;
}
server {
...
location / {
expires $expires;
try_files $uri $uri/ /index.php?$query_string;
}
...
}
通过这种方法,您可以为不同类型的文件指定不同的过期时间:
map $uri $expires {
default off;
~\.(jpg|jpeg|png|gif|ico)$ 30d;
~\.(css|js|pdf)$ 7d;
}
另一种方法是根据请求主体的内容类型设置过期时间,例如官方文档:
map $sent_http_content_type $expires {
default off;
application/pdf 42d;
~image/ max;
}
server {
...
expires $expires;
...
}