location ~* "^/[a-z0-9]{32}/[a-z]+/g2/c/" {
error_page 404 = @remote;
fastcgi_pass ...;
fastcgi_intercept_errors on;
fastcgi_cache fastcgi_cache;
fastcgi_cache_valid 200 302 1w;
fastcgi_cache_valid 404 2m;
fastcgi_cache_use_stale updating error timeout invalid_header http_500 http_503 http_404;
fastcgi_cache_key "$request_method|$uri";
}
location @remote {
fastcgi_pass fpm_remote;
fastcgi_cache fastcgi_cache;
fastcgi_cache_valid 200 302 1w;
fastcgi_cache_valid 404 2m;
fastcgi_cache_use_stale updating error timeout invalid_header http_500 http_503 http_404;
fastcgi_cache_key "$request_method|$uri";
}
без кеша все работает как положено
но если включить кеш то получается что после обращения к бекенду ответ с кодом 404 попадает в кеш, а потом именованый локейшн берет ответ из кеша
одинаковые ключи сделаны специально чтобы независимо от того откуда был получен ответ результат кешировался
собственно вопрос:
как сделать так чтобы 404 ответ в кеш не попадал при локальной обработке, но при получении 404 от удаленного бекенда все-таки складывался?
2011/8/29 Igor Sysoev
<igor@xxxxxxxxx>
On Mon, Aug 29, 2011 at 03:54:22PM +0300, Alexander Moskalenko wrote:
> спасибо, помогло
>
>
> - fastcgi_interpcept_errors on;
> + fastcgi_intercept_errors on;
>
> также получилась вот такая конструкция для другого алгоритма
>
> location ~* "^/(?<section>.*)/g_\d+/(?<img_name>.*)/.*\.(gif|jpe?g)$" {
> try_files $uri @remote;
> }
>
> location @remote {
> include proxy_params;
> proxy_pass
http://static_remote;
> proxy_intercept_errors on;
> error_page 404 = /$section/nophoto/$img_name.png;
> proxy_store on;
> proxy_store_access user:rw group:rw all:rw;
> }
На будущее - всегда делать префиксы в УРЛах для локализации регулярных
выражений:
location /some_action/ {
location ~* "^/some_action/(?<section>.*)/...
--