Я пытаюсь кэшировать другое место с другой ключевой зоной кеша, но это не работает. Кэш работает только для корневого каталога "/".
Если я отключу кеш для местоположения «/», он все равно не будет работать для другого местоположения.
Блок http:
fastcgi_cache_path /webcache/nginx levels=1:2 keys_zone=microcache:100m max_size=1000m inactive=45m use_temp_path=off;
fastcgi_cache_path /webcache/extreme levels=1:2 keys_zone=extreme:100m max_size=10400m inactive=99999m use_temp_path=off;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
Серверный блок:
location ~* "^/(20[0-1][0-8]/)" {
try_files $uri $uri/ /index.php?$args;
location ~ \.php$ {
try_files $uri = 404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/opt/remi/php56/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_intercept_errors on;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
fastcgi_no_cache $no_cache;
fastcgi_cache_bypass $no_cache;
fastcgi_cache extreme;
fastcgi_cache_min_uses 1;
fastcgi_cache_methods GET HEAD;
fastcgi_cache_lock on;
fastcgi_cache_lock_age 5s;
fastcgi_cache_lock_timeout 5s;
fastcgi_cache_valid 200 302 301 8760h;
fastcgi_cache_valid 500 502 10s;
fastcgi_cache_valid 403 404 10s;
fastcgi_cache_use_stale updating error timeout invalid_header http_500;
fastcgi_cache_background_update on;
fastcgi_pass_header Set-Cookie;
fastcgi_pass_header Cookie;
}
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
try_files $uri = 404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/opt/remi/php56/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
include /etc/nginx/fastcgi_params;
fastcgi_intercept_errors on;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_no_cache $no_cache;
fastcgi_cache_bypass $no_cache;
fastcgi_cache microcache;
fastcgi_cache_min_uses 1;
fastcgi_cache_methods GET HEAD;
fastcgi_cache_lock on;
fastcgi_cache_lock_age 5s;
fastcgi_cache_lock_timeout 5s;
fastcgi_cache_valid 200 302 301 1m;
fastcgi_cache_valid 500 502 10s;
fastcgi_cache_valid 403 404 10s;
fastcgi_cache_use_stale updating error timeout invalid_header http_500;
fastcgi_cache_background_update on;
fastcgi_pass_header Set-Cookie;
fastcgi_pass_header Cookie;
fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
}
URI /index.php
обрабатывается последним location
блок, поэтому использует microcache
зона.
URI /2000/
сначала переписывается на /index.php
а затем обрабатывается последним location
блок, поэтому использует microcache
зона.
Чтобы использовать альтернативную зону, вы можете избежать перезаписи URI и вместо этого жестко привязать переменную fastcgi_param SCRIPT_FILENAME к $document_root/index.php
, поскольку все URI, соответствующие этому шаблону, отправляются в index.php
тем не мение.
Например:
location ~* ^/20[0-1][0-8]/ {
fastcgi_pass unix:/var/opt/remi/php56/run/php-fpm/php-fpm.sock;
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root/index.php;
...
fastcgi_cache extreme;
...
}
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
try_files $uri = 404;
fastcgi_pass unix:/var/opt/remi/php56/run/php-fpm/php-fpm.sock;
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
...
fastcgi_cache microcache;
...
}