Проблемы с кэшированием 404 ответа с пустым телом

Nickolay Krylov nk на antenne.org.ru
Ср Дек 9 03:38:49 MSK 2009


Здравствуйте, Nginx-ru.

Сегодня построил схему в которой появилась проблема.

Идея такая: для каждого поддомена создается sitemap.xml средствами php
и кэшируется с помощью proxy_cache.

В некоторых поддоменах индексировать нечего, поэтому выдаем 404,
которые тоже кэшируются.

Кусок конфига
http {
    proxy_cache_path /js/jA/web/sitemaps levels=1:2 keys_zone=sitemaps:32m inactive=3600 max_size=10g;
...
    server { 
      listen xx.yy.zz.bb;
      name domain.ru *.domain.ru;
...
                location = /sitemap.php { rewrite ^.*$ / redirect; }
                location = /sitemap.xml {
                    proxy_temp_path /js/jA/web/tmp 1 2;

                    error_log /js/jB/tmp/sitemaps.log debug;

                    proxy_cache sitemaps;
                    proxy_cache_valid 200 301 302 404 403 10m;
                    proxy_cache_key "$host";

                    proxy_pass http://RRBE;
                    proxy_redirect off;
                    proxy_set_header Host $host;
                    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                    proxy_set_header X-BSNETMARK $bs_netmark;

                    expires 10m;
                    add_header Pragma public;

                    rewrite ^/sitemap.xml /sitemap.php break;

                }
    }
}

Проблема появляется при кэшировании пустого 404 ответа.
Первый запрос - не из кэша - проходит нормально.
Второй - кэшированный - "виснет".

jd# telnet domain.ru 80
Trying xx.yy.zz.bb...
Connected to domain.ru.
Escape character is '^]'.
GET /sitemap.xml HTTP/1.1
Host: veo.domain.ru

HTTP/1.1 404 Page Not Found
Server: nginx
Date: Wed, 09 Dec 2009 00:28:12 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: keep-alive

0

GET /sitemap.xml HTTP/1.1
Host: veo.domain.ru
- здесь висим минуту

Connection closed by foreign host.



Если в ответе есть тело, проблема не проявляется.

nginx -V
nginx version: nginx/0.8.20
configure arguments: --prefix=/usr/local/etc/nginx --with-cc-opt='-I /usr/local/include' --with-ld-opt='-L /usr/local/lib'
--conf-path=/usr/local/etc/nginx/nginx.conf --sbin-path=/usr/local/sbin/nginx --pid-path=/var/run/nginx.pid
--error-log-path=/var/log/nginx-error.log --user=www --group=www --with-debug --with-file-aio
--http-client-body-temp-path=/var/tmp/nginx/client_body_temp --http-proxy-temp-path=/var/tmp/nginx/proxy_temp
--http-fastcgi-temp-path=/var/tmp/nginx/fastcgi_temp --http-log-path=/var/log/nginx-access.log
--with-http_flv_module --with-http_geoip_module --with-http_gzip_static_module --with-http_perl_module
--with-http_random_index_module --with-http_realip_module --with-http_stub_status_module --with-pcre

Отладочные логи приготовил.

-- 
С уважением,
 Nickolay Krylov                          mailto:nk at antenne.org.ru




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