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

对于不同的网站部分,我们使用不同的caching标题。 例如: /wp-admin部分根本不应该被caching,并且/blog部分只有4个小时,而不是默认的2天。

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

当前nginxconfiguration的例子

 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; } } 

使用标准的NGINXconfiguration没有办法做到这一点。

要清理您的configuration(不使用外部工具),将通用configuration移动到它自己的文件中,并从每个部分包含它:

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; } 

site.conf

 location /wp-admin/ { etag off; if_modified_since off; add_header Last-Modified ""; add_header Cache-Control no-cache; include php.conf; } 

NGINX因高级configuration需要大量重复而臭名昭着。