添加过期文件类型的位置时,NGINX proxy_pass 设置在添加时失败

添加过期文件类型的位置时,NGINX proxy_pass 设置在添加时失败

当我将以下内容添加到我的 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;
    ...
}

相关内容