nginx配置proxy_cache缓存策略

作者:matrix 被围观: 10,208 次 发布时间:2017-12-09 分类:零零星星 | 一条评论 »

这是一个创建于 2569 天前的主题,其中的信息可能已经有所发展或是发生改变。

图片3703-nginx定向清理Proxy Cache缓存
之前有使用脚本删除缓存的记录,但是没有留下下proxy的使用,今天正好配置下下。
>> nginx定向清理Proxy Cache缓存

proxy是nginx的自带模块,作为前台代理后端的数据库请求,负载均衡啊什么的贼6

proxy配置

修改 nginx.conf文件配置 lnmp环境一般都是/usr/local/nginx/conf/nginx.conf
http代码块中添加proxy操作

> vi /usr/local/nginx/conf/nginx.conf #编辑文件

#添加如下内容
proxy_connect_timeout 2400;
proxy_read_timeout 240;
proxy_send_timeout 240;
proxy_buffer_size 16k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 128k;
proxy_request_buffering off;
proxy_cache_lock on;
proxy_cache_valid 200 206 403 1d;#默认全局缓存200,206,403响应状态码 1天
proxy_cache_use_stale updating;
proxy_temp_file_write_size 128k;

#配置缓存目录,以及keys_zone作用域名称
proxy_temp_path /var/tmp/nginx/proxy_temp_dir;
proxy_cache_path /var/tmp/nginx/proxy_cache levels=1:2 keys_zone=link:2m inactive=1d max_size=1g;

#是否忽略后端返回的Cache-Control,Expires响应头。
proxy_ignore_headers Cache-Control;
proxy_ignore_headers Expires;
proxy_ignore_headers Set-Cookie;

#向后端代理传递请求头数据 避免丢失
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Remote-Host $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto; # 用户请求协议 https http

或者也可以在http代码块中使用 include "hhtjim_proxy.conf";方式载入文件(文件名自定义)。

vhost配置proxy_pass

找到需要配置的vhost主机,修改conf文件中server代码块

        proxy_cache link;
        proxy_cache_valid 200 30d;
        proxy_cache_valid 301 302 303 10m;
        proxy_cache_valid any 5m;

        #添加返回响应头,X-Cache标记是否命中缓存。
        add_header X-Cache "$upstream_cache_status";

        #拦截所有请求 到link负载均衡策略
        location / {
        proxy_pass http://link;
        }

配置负载均衡

依旧在http块中添加上游upstream

#自定义link名称
upstream link { 
    ip_hash;#负载均衡ip hash定位.每个请求按访问IP的hash结果分配.解决session问题
    server 127.0.0.1:8182 weight=3; #权重为3
    server 127.0.0.1:8084 weight=1; #权重为1
    keepalive 32;
}

若没有配置多余后端服务,直接使用当前nginx也是可以的。
完整vhost配置记录如下:

#入口拦截
server
    {
        listen 80;
        #listen [::]:80;
        server_name www.hhtjim.com ;
        index index.html index.htm index.php default.html default.htm default.php;
        root  /home/wwwroot/www.hhtjim.com/;

        include other.conf;


        include enable-php.conf;

        proxy_cache link;
        proxy_cache_valid 200 30d;
        proxy_cache_valid any 5m;


    add_header X-Cache "$upstream_cache_status";

        location / {
        proxy_pass http://link;
        }
    }


#模拟网站后台程序,数据库处理
server
    {
        listen 8182;
        #listen [::]:80;
        server_name localhost ;
        index index.html index.htm index.php default.html default.htm default.php;
        root  /home/wwwroot/www.hhtjim.com/;

        include other.conf;

        include enable-php.conf;

        #Slim Framework
        location / {
            try_files $uri $uri/ /index.php$is_args$args;
        }


        location ~ /.well-known {
            allow all;
        }

        location ~ /\.
        {
            deny all;
        }
        access_log off;
    }

重启nginx

lnmp nginx start 

#或者 reload 未尝试
# lnmp nginx reload
# ./nginx -s reload 

踩坑

  1. 目录不存在
    Starting nginx... nginx: [emerg] mkdir() "/var/tmp/nginx/proxy_temp_dir" failed (2: No such file or directory)
    

    第一次配置完,nginx各种错误,什么缓存目录不存在,proxy_pass放置代码块不正确。
    如果是proxy_temp_dir目录不存在则自行新建就好,最后记得还要修改权限chmod -R 0777 /var/tmp/nginx/

  2. 测试发现X-cache一直MISS
    确保有忽略掉程序返回的缓存控制响应头 例如Cache-ControlExpires

    注意:后台服务器返回的响应头有cache-Control,Expires,其值nocacheprivate 都表示不缓存,也就会导致全部MISS

    最后,修改

    1.修改后端程序返回的响应头,可控性最高。
    2.设置proxy_ignore_headers 忽略掉头部
    proxy_ignore_headers Cache-Control;
    proxy_ignore_headers Expires;
    

参考:
http://blog.csdn.net/gamay/article/details/73613741
https://www.lvtao.net/server/224.html
http://blog.csdn.net/zstack_org/article/details/53940047
http://blog.csdn.net/wzx19840423/article/details/50474650
http://blog.51yip.com/apachenginx/1018.html

其他文章:
本文固定链接:https://www.hhtjim.com/nginx-configuration-proxy_cache-caching-strategies.html
matrix
本文章由 matrix 于2017年12月09日发布在零零星星分类下,目前没有通告,你可以至底部留下评论。
转载请注明:nginx配置proxy_cache缓存策略-HHTjim'S 部落格
关键字:, ,

有1条评论 »

  1. 彩博888 彩博888 2018-7-8 16:59:18 +0800#1

    当你让痛苦停泊时,幸福就会在别处靠岸。

添加新评论 »

 🙈 😱 😂 😛 😭 😳 😀 😆 👿 😉 😯 😮 😕 😎 😐 😥 😡 😈 💡

插入图片

NOTICE: You should type some Chinese word (like “你好”) in your comment to pass the spam-check, thanks for your patience!