前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >nginx配置proxy_cache缓存策略

nginx配置proxy_cache缓存策略

作者头像
HHTjim 部落格
发布2022-09-26 10:55:14
7250
发布2022-09-26 10:55:14
举报
文章被收录于专栏:HHTjim'S 部落格

nginx配置proxy_cache缓存策略

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

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

之前有使用脚本删除缓存的记录,但是没有留下下proxy的使用,今天正好配置下下。

>> nginx定向清理Proxy Cache缓存

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

proxy配置

修改 nginx.conf文件配置 lnmp环境一般都是/usr/local/nginx/conf/nginx.conf

http代码块中添加proxy操作

代码语言:javascript
复制
> 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代码块

代码语言:javascript
复制
        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

代码语言:javascript
复制
#自定义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配置记录如下:

代码语言:javascript
复制
#入口拦截
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

代码语言:javascript
复制
lnmp nginx start 

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

踩坑

目录不存在

代码语言:javascript
复制
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/

测试发现X-cache一直MISS

确保有忽略掉程序返回的缓存控制响应头 例如Cache-ControlExpires

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

最后,修改

代码语言:javascript
复制
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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • nginx配置proxy_cache缓存策略
    • proxy配置
      • vhost配置proxy_pass
        • 配置负载均衡
          • 踩坑
          相关产品与服务
          负载均衡
          负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档