Здравствуйте! Достаточно популярная, как мне кажется, проблема. Хочу кешировать запросы к какому-то локейшену, например, к / , но только от анонимных пользователей. То есть тех, у которых еще нет для нас никаких кук.
Как это правильно сделать в условиях бэкэнда, который, как, например, извините за выражение, битрикс, ставит куку типа PHP_SESSID при любом запросе? То есть по факту мой вопрос сводится к тому, как выполнять fastcgi_ignore_headers Set-Cookie; или не выполнять в зависимости от каких-то условий, например, от наличия уже поставленных пользователю кук. Пока я создал вот такого монстра (он работает, но мне не нравится): map $http_cookie $main_cache { default 0; "" 1; } location = / { if ($main_cache) { rewrite ^ /_main_cache/ last; } fastcgi_pass unix:/run/php-fpm.socket; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root/index.php; fastcgi_param HTTP_GEOCOUNTRY $geoip_country_code; } location = /_main_cache/ { internal; #Это чтоб в бэкэнд везде приходил правильный адрес, никто не должен знать про _main_cache rewrite ^ / break; fastcgi_cache main; fastcgi_hide_header "Set-Cookie"; fastcgi_ignore_headers "Cache-Control" "Expires" "Set-Cookie"; fastcgi_cache_valid 200 10s; fastcgi_cache_key "/"; fastcgi_cache_use_stale updating; fastcgi_cache_lock on; #Аноним после первого посещения не аноним, а так как мы игнорируем Set-Cookie ставим средствами nginx. add_header "Set-Cookie" "visited=1; path=/"; fastcgi_pass unix:/run/php-fpm.socket; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root/index.php; fastcgi_param HTTP_GEOCOUNTRY $geoip_country_code; } Можно как-то изящнее и феншуйнее? Пожалуйста, не предлагайте переделывать бэкэнд. Это нереально. С уважением, Иван. _______________________________________________ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru