proxy_cache_valid缓存的相关问题请教

来源:3-12 Nginx作为代理服务_代理服务

imoocadf36567

2018-05-31

  location / {
       proxy_cache my_cache;
       proxy_cache_revalidate on;
       proxy_cache_min_uses 3;
       proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
       proxy_cache_lock on;
       proxy_pass http://my_upstream;
   }

如果是动态文件,不加“proxy_cache_valid 200 304 1h;”内容。哪么页面不缓存,如果加了这个内容,如果动态文件更新了。用户看到还是旧信息,如何即时更新。又可以在服务器宕机的时候时候让用户看到缓存页面。

       proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;

这句话的意思是,如果后端服务器返回错误或者5xx等错误,给用户返回之前的cache数据吧。动态页面如何做呢


写回答

1回答

Jeson

2018-05-31

 是的,如果proxy_cache_use_stale设置了,那么当NGINX收到源站返回error、timeout或者其他指定的5XX错误,并且在其缓存中有请求文件的陈旧版本,则会将这些陈旧版本的文件而不是错误信息发送给客户端。

如果要将动态请求设置为不缓存,只缓存静态元素,可以作动静分离,将静态请求,单独设置缓存。如下:

    location ~ .*\.(htm|html|js|css|gif|jpg|jpeg|png|bmp|ico|swf|flv)$ {

        proxy_next_upstream http_500 http_502 http_503 http_504 error timeout invalid_header;

        proxy_cache cache_one;

        proxy_cache_valid 200 304 12h;

        proxy_cache_valid 301 302 10h;

        proxy_cache_valid any 1m;

        proxy_cache_key $host$uri$is_args$args;

        add_header Ten-webcache '$upstream_cache_status from $host';

        proxy_pass http://tomcat-game;

        expires 30m;

    }

  location / {
       proxy_pass http://my_upstream;
   }


0
3
Jeson
这个设置不会关心你静态页还是动态页,只关心后台服务返回的状态码。 另外,动态页面缓存也不是没有意义,有的场合,通过设置适当的动态页面缓存时间,可以很好的缓解后台服务器压力。
2018-06-01
共3条回复

Nginx入门到实践-Nginx中间件应用+搭建Webserver架构

中间件、负载均衡、应用层安全防护、动静分离、Nginx+LUA开发等

4183 学习 · 908 问题

查看课程