Re: Исключить кеширование отдельно взятого файла

Igor Sysoev igor на sysoev.ru
Пн Июн 7 19:40:42 MSD 2010


On Mon, Jun 07, 2010 at 11:18:46AM -0400, grigory wrote:

> Добрый день. У меня включено кеширование на сервере, но один скрипт постоянно обращается к серверу через AJAX сотни раз в минуту, и у него каждый раз уникальный url, чтобы браузер не кешировал. Из-за этого в кеше nginx'а возникают тысячи файлов, которые генерируются, по-сути, этими запросами, и в кеше абсолютно не нужны.
> 
> Конфиг примерно такой:
> 
> ===================
> ...
>     proxy_cache_path   /var/cache/nginx levels= keys_zone=wholepage:50m;
> 
>     server {
>         listen       80;
>         server_name  server.com www.server.com;
> 
>         keepalive_timeout 0;
> 
> gzip  on;
> gzip_min_length 5000;
> gzip_proxied any;
> gzip_types text/plain text/xml application/xml application/x-javascript text/javascript text/css text/json;
> gzip_comp_level 6;
> gzip_buffers 16 8k;
> gzip_disable “MSIE [1-6].(?!.*SV1)”;
> 
>         location / {
>     proxy_pass http://server.com:8080/;
>    proxy_redirect off;
>    proxy_set_header   Host             $host;
>             proxy_set_header   X-Real-IP        $remote_addr;
>             proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
> 
>             client_max_body_size       10m;
>             client_body_buffer_size    128k;
> 
>             proxy_connect_timeout      90;
>             proxy_send_timeout         90;
>             proxy_read_timeout         90;
> 
>             proxy_buffer_size          4k;
>             proxy_buffers              4 32k;
>             proxy_busy_buffers_size    64k;
>             proxy_temp_file_write_size 64k;
> 
>             proxy_cache         wholepage;
>             proxy_cache_valid   200 301 302 304 30m;
>             proxy_cache_key     "$request_method|$http_if_modified_since|$http_if_none_match|$host|$request_uri";
>             proxy_hide_header   "Set-Cookie";
>             proxy_ignore_headers        "Cache-Control" "Expires";
> 
>             root /var/www/virtual/server.com;
>         }
> ...
> ================
> 
> Я так понимаю, что мне нужно добавить location в конфиг вроде такого (отключить кеширование у файла find.php):
> 
>         location ~ ^/find.php {
>            proxy_cache         off;
>         }
> 
> Но из-за этого файл find.php просто перестает работать с ошибкой 405 Not Allowed.
> 
> Подскажите, как сделать правильно, что кэш работал как прежде, но исключал find.php.

Отвыкаем мыслить регулярными выражениями, достаточно

         location = /find.php {

Вот этот кошмар не нужен:

         proxy_cache_key     "$request_method|$http_if_modified_since|$http_if_none_match|$host|$request_uri";

Конфигурация выглядит так:
 
         client_max_body_size       10m;
         client_body_buffer_size    128k;

         proxy_connect_timeout      90;
         proxy_send_timeout         90;
         proxy_read_timeout         90;

         proxy_buffer_size          4k;
         proxy_buffers              4 32k;
         proxy_busy_buffers_size    64k;
         proxy_temp_file_write_size 64k;

         proxy_set_header   Host             $host;
         proxy_set_header   X-Real-IP        $remote_addr;
         proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

         location / {
             proxy_pass http://server.com:8080;
             proxy_redirect off;

             proxy_cache         wholepage;
             proxy_cache_valid   200 301 302 304 30m;
             proxy_hide_header   "Set-Cookie";
             proxy_ignore_headers   "Cache-Control" "Expires";
         }

         location = /find.php {
             proxy_pass http://server.com:8080;
             proxy_redirect off;
         }

-- 
Игорь Сысоев
http://sysoev.ru



Подробная информация о списке рассылки nginx-ru