<div>Всем привет!<br></div><div>Есть nginx-0.7.54 на Linux, есть желание сделать на нем &quot;перманентный кеш&quot; - то есть если бекенд недоступен, то файл отдается из кеша, даже если он устарел.</div><div>Конфигурация nginx такая - </div>
<div></div><div>worker_processes  4;<br>worker_rlimit_nofile 10240;<br></div><div></div><div>error_log  logs/error.log;</div><div></div><div>pid        logs/nginx.pid;<br></div><div></div><div>events {<br>    worker_connections  4096;<br>
}<br><br>http {<br>    include       mime.types;<br>    default_type  application/octet-stream;<br><br>    log_format  main  &#39;$remote_addr - $remote_user [$time_local] &quot;$request&quot; &#39;<br>                      &#39;&quot;$status/$upstream_status&quot; $body_bytes_sent &#39;<br>
                      &#39;&quot;$host&quot; &quot;$upstream_addr/$upstream_response_time&quot;&#39;;<br><br>    access_log  logs/access.log  main;<br><br>    sendfile       on;<br>    tcp_nopush     on;<br>    tcp_nodelay    on;<br>
    keepalive_timeout  65 20;<br><br>    client_header_timeout 3m;<br>    client_body_timeout 3m;<br>    send_timeout 3m;<br><br>    client_header_buffer_size 4k;<br>    large_client_header_buffers 4 4k;<br><br>    client_max_body_size 1m;<br>
    client_body_buffer_size 128k;<br><br>    output_buffers 4 32k;<br>    postpone_output 1460;<br><br>    proxy_connect_timeout 10;<br>    proxy_send_timeout 90;<br>    proxy_read_timeout 90;<br>    proxy_buffer_size 128k;<br>
    proxy_buffers 4 128k;<br>    proxy_busy_buffers_size 128k;<br>    proxy_temp_file_write_size 128k;<br><br>    gzip  off;<br><br>    proxy_cache_key  &quot;$scheme://$host$uri$is_args$args:&quot;;<br>    proxy_cache_path  /usr/local/nginx/cache levels=1:2 keys_zone=one:10m inactive=20m max_size=500m;<br>
    proxy_cache one;<br>    proxy_cache_min_uses    1;<br>    proxy_cache_valid  200 302 5m;<br>    proxy_cache_valid  301 1h;<br>    proxy_cache_use_stale error timeout invalid_header http_500 http_502 http_503 http_504;<br>
    proxy_ignore_headers X-Accel-Redirect X-Accel-Expires Expires Cache-Control;<br><br>    set_real_ip_from   127.0.0.1;<br>    real_ip_header     X-Forwarded-For;<br><br>    server {<br>          listen       9090;<br>          server_name  localhost;</div>
<div>          location / {<br>                proxy_pass        <a href="http://localhost:8000">http://localhost:8000</a>;<br>                proxy_set_header  Host       $host;<br>                proxy_set_header  X-Forwarded-For $remote_addr;<br>
        }<br><br>          error_page   500 502 503 504  /50x.html;<br>          location = /50x.html {<br>               root   html;<br>          }<br>    }<br>}<br><br><br></div><div>Проверяем - создаем простенький test.cgi, запрашиваем его, убежаемся что файл попал в кеш - тут все ок.<br>
</div><div>Файл на диске есть -</div><div>$ find /usr/local/nginx/cache -type f -exec grep &quot;/cgi/test.cgi:&quot; {} \;</div><div>Binary file /usr/local/nginx/cache/e/aa/5fd721f295024d972798697193182aae matches</div><div>
</div><div>$ ls -al /usr/local/nginx/cache/e/aa/5fd721f295024d972798697193182aae</div><div>-rw------- 1 nobody nobody 322 May  5 16:43 /usr/local/nginx/cache/e/aa/5fd721f295024d972798697193182aae</div><div></div><div>Да и по логам видно - файл отдается из кеша.</div>
<div></div><div>192.168.7.6 - - [05/May/2009:16:43:00 +0300] &quot;GET /cgi/test.cgi HTTP/1.0&quot; &quot;200/200&quot; 23 &quot;<a href="http://www.xxx.net">www.xxx.net</a>&quot; &quot;<a href="http://127.0.0.1:8000/0.057">127.0.0.1:8000/0.057</a>&quot;<br>
192.168.7.6 - - [05/May/2009:16:46:30 +0300] &quot;GET /cgi/test.cgi HTTP/1.0&quot; &quot;200/-&quot; 23 &quot;<a href="http://www.xxx.net">www.xxx.net</a>&quot; &quot;-/-&quot;<br></div><div></div><div>Ломаем test.cgi - чтобы при запросе выдавал 500-ую ошибку.</div>
<div>Пробуем еще раз - все ок - файл отдается из кеша - </div><div>192.168.7.6 - - [05/May/2009:16:47:31 +0300] &quot;GET /cgi/test.cgi HTTP/1.0&quot; &quot;200/-&quot; 23 &quot;<a href="http://www.xxx.net">www.xxx.net</a>&quot; &quot;-/-&quot;<br>
</div><div>Но у нас еще не истекло время хранения. Ждем 5 минут и пробуем еще раз - </div><div>192.168.7.6 - - [05/May/2009:16:50:17 +0300] &quot;GET /cgi/test.cgi HTTP/1.0&quot; &quot;500/500&quot; 593 &quot;<a href="http://www.liga.net">www.liga.net</a>&quot; &quot;<a href="http://127.0.0.1:8000/0.039">127.0.0.1:8000/0.039</a>&quot;<br>
</div><div></div><div>То есть несмотря на то что    proxy_cache_use_stale прописана обращения к кешу нет - идет обращение на бекенд!<br></div><div></div><div>Файл в кеше еще есть - </div><div><div>$ find /usr/local/nginx/cache -type f -exec grep &quot;/cgi/test.cgi:&quot; {} \;</div>
<div>Binary file /usr/local/nginx/cache/e/aa/5fd721f295024d972798697193182aae matches</div><div>$ ls -al /usr/local/nginx/cache/e/aa/5fd721f295024d972798697193182aae</div><div>-rw------- 1 nobody nobody 322 May  5 16:43 /usr/local/nginx/cache/e/aa/5fd721f295024d972798697193182aae</div>
</div><div></div><div>Просьба ткнуть носом где туплю.</div><div>Спасибо!</div>