在 nginx 中为每个站点部分设置不同的缓存标头

在 nginx 中为每个站点部分设置不同的缓存标头

对于网站的不同部分,我们使用不同的缓存标头。例如:部分/wp-admin根本不应该缓存,/blog部分仅缓存 4 小时,而不是默认的 2 天。

目前我已经通过重复 -blocks 解决了这个问题location,但这会导致文件非常冗长。有没有更简洁的方法来实现这一点?

当前 nginx 配置示例

location /wp-admin/ {
    etag off;
    if_modified_since off;
    add_header Last-Modified "";
    add_header Cache-Control no-cache;
    try_files $uri $uri/ /index.php?$args;

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

location / {
    expires 2d;
    add_header Cache-Control "public";
    try_files $uri $uri/ /index.php?$args;
    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

location /blog {
    expires 4h;
    add_header Cache-Control "public";
    try_files $uri $uri/ /index.php?$args;

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

答案1

无法使用标准 NGINX 配置来做到这一点。

为了整理您的配置(不使用外部工具),请将通用配置移到其自己的文件中并将其包含在各个部分中:

php.conf

try_files $uri $uri/ /index.php?$args;
location ~ \.php$ {
    include fastcgi_params;
    fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

站点配置文件

location /wp-admin/ {
    etag off;
    if_modified_since off;
    add_header Last-Modified "";
    add_header Cache-Control no-cache;

    include php.conf;
}

NGINX 因需要大量重复进行高级配置而臭名昭著。

相关内容