Назад | Перейти на главную страницу

Установка другого заголовка кеша для каждого раздела сайта в nginx

Для разных разделов сайта мы используем разные заголовки кеширования. Например: /wp-admin раздел вообще не должен кэшироваться, а /blog раздел только на 4 часа вместо 2 дней по умолчанию.

В настоящее время я решил это, повторив location-blocks, но это приводит к довольно подробному файлу. Есть ли более лаконичный способ добиться этого?

Пример текущей конфигурации 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;
    }
}

Невозможно сделать это с помощью стандартной конфигурации 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;
}

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 известен тем, что требует много повторений для расширенной настройки.