Nginx缓存控制字段cache-control的配置

Lance.Wu 发表于: 2021-08-10   最后更新时间: 2021-08-11 14:40:58  
{{totalSubscript}} 订阅, 135 游览

HTTP协议的Cache -Control指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置 Cache-Control并不会影响另一个消息处理过程中的缓存处理过程。

  1. 请求时的缓存指令包括: no-cache、no-store、max-age、 max-stale、min-fresh、only-if-cached等。

  2. 响应消息中的指令包括: public、private、no-cache、no- store、no-transform、must-revalidate、proxy-revalidate、max-age。

Cache-Control

设置相对过期时间, max-age指明以秒为单位的缓存时间. 若对静态资源只缓存一次, 可以设置max-age的值为315360000000 (一万年). 比如对于提交的订单,为了防止浏览器回退重新提交,可以使用Cache-Control之no-store绝对禁止缓存,即便浏览器回退依然请求的是服务器,进而判断订单的状态给出相应的提示信息!

Http协议的cache-control的常见取值及其组合释义:

  • no-cache: 数据内容不能被缓存, 每次请求都重新访问服务器, 若有max-age, 则缓存期间不访问服务器.
  • no-store: 不仅不能缓存, 连暂存也不可以(即: 临时文件夹中不能暂存该资源).
  • private(默认): 只能在浏览器中缓存, 只有在第一次请求的时候才访问服务器, 若有max-age, 则缓存期间不访问服务器.
  • public: 可以被任何缓存区缓存, 如: 浏览器、服务器、代理服务器等.
  • max-age: 相对过期时间, 即以秒为单位的缓存时间.
  • no-cache, private: 打开新窗口时候重新访问服务器, 若设置max-age, 则缓存期间不访问服务器.
  • private, 正数的max-age: 后退时候不会访问服务器.
  • no-cache, 正数的max-age: 后退时会访问服务器.

案例

server {
    listen       443;
    server_name  www.orchome.com;
    charset utf-8;

    ssl                  on;
    ssl_certificate      /daka/program/nginx/conf/server.cer;
    ssl_certificate_key  /daka/program/nginx/conf/server.key;
    ssl_session_timeout  15m;
    ssl_protocols  SSLv2 SSLv3 TLSv1;
    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers   on;

    # 设置浏览器缓存 
    add_header Cache-Control no-cache;
    add_header Cache-Control private;

    location /user {
        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;
        proxy_pass http://172.168.0.221:8082/user/list;

        if ($request_filename ~* .*.(html|htm)$)
         {
         expires -1s;
         }

         if ($request_filename ~* .*.(gif|jpg|jpeg|png|bmp|swf)$)
         {
         expires 30d;
         }

         if ($request_filename ~ .*.(js|css)$)
         {
         expires 12h;
         }
    }

       location /static {
        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;
        proxy_pass http://172.168.0.20:8082/static;

        if ($request_filename ~* .*.(html|htm)$)
         {
         expires -1s;
         }

         if ($request_filename ~* .*.(gif|jpg|jpeg|png|bmp|swf)$)
         {
         expires 30d;
         }

         if ($request_filename ~ .*.(js|css)$)
         {
         expires 12h;
         }

    }

   location / {
        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;
        proxy_pass http://172.168.0.221:8080/;

        if ($request_filename ~* .*.(html|htm)$)
         {
#         expires -1s;
         }

         if ($request_filename ~* .*.(gif|jpg|jpeg|png|bmp|swf)$)
         {
         expires 30d;
         }

         if ($request_filename ~ .*.(js|css)$)
         {
         expires 12h;
         }
    }
}


您需要解锁本帖隐藏内容请: 点击这里
本帖隐藏的内容


上一条: Nginx代理URL追加参数
下一条: 已经是最后了!

查看nginx更多相关的文章或提一个关于nginx的问题,也可以与我们一起分享文章
提问