Nginx配置proxy_cache后缓存不能生成缓存文件

proxy_cache方式跟memcached内存级别的缓存还是不能比拟,但nginx目前还不能做memcached的write动作,所以简单配置proxy_cache也能抵挡不少鸭梨。

没有配置好proxy_cache
但在网络上搜索几篇文章以后,发现大家写的很模糊,很多文章都是抄袭复制品。所以按照网络上的教程,我一开始是这么配置的:

在http段增加:

 代码如下 复制代码

proxy_cache_path  /tmp/qttc_cache levels=1:2 keys_zone=qttc:200m inactive=1d max_size=10g;

然后在server中找到你要缓存的location,增加:

 代码如下 复制代码

proxy_cache qttc;

意思表示开启这个location的缓存,但是我重启nginx以后,重新访问站点发现在缓存目录下并没有生成缓存文件。于是,我首先这么做:

一、会不会是浏览器有缓存,于是我清空浏览器,甚至使用其它浏览器访问站点,并且按狂刷。结果还是没有生成静态文件。

二、会不会是nginx自动判断我的内容,太少就不会缓存。于是我赋值了一大堆字符串到一个文件中,然后使用浏览器狂访问那个文件,结果还是没有生成静态文件。

于是到网上搜索,结果也没有搜索到有用的信息。难道我安装的nginx有问题?重新从官网下载编译安装,还是没有解决问题。

原来是这样工作的
后来不断的摸索,仔细研究。发现还要添加以下两条才能让proxy_cache工作,

proxy_cache_valid  200 304 302 24h;

指定各个状态码下缓存的时间,200是很重要的,如果有其它的要缓存可以在后边加上

 代码如下 复制代码

proxy_pass http://www.111cn.net;

指定获取静态内容的地址,其实proxy_cache的原理就是从一个你指定的地址获取内容,然后缓存。当下次你访问时,nginx会自动判断有没有缓存文件?如果有的话缓存文件是不是已经过期(缓存文件的有效期就是第一条设置的)?如果前面两条任何一条成立就会从proxy_pass的地址重新获取页面信息。

于是经过配置以后,终于能生成缓存文件了:

 代码如下 复制代码

[root@lee qttc_cache]# ll
总用量 24
drwx------ 3 www www 4096 7月  19 08:55 4
drwx------ 5 www www 4096 7月  19 08:55 8
drwx------ 3 www www 4096 7月  19 08:55 a
drwx------ 3 www www 4096 7月  19 08:55 c
drwx------ 3 www www 4096 7月  19 08:55 d
drwx------ 3 www www 4096 7月  19 08:55 e

 
可惜,如果你要清空缓存,可以在后台加一个功能使用后端语言删除,或者使用一个Purge插件通过IP加端口访问的方式来清楚缓存文件。

PS.
如果你要清楚某一个url的缓存文件,就比较悲催了。但也不是不能做到。因为nginx生成url文件的时候,存放的目录以及生成的哈希文件名都是固定的,你也可以使用proxy_cache_key来指定生成的key的字段内容。

如果你掌握它的生成规则,你就可以写一个管理器来快速清空单个url缓存。最烂的方法也可以把缓存目录清空,接着访问你要需要单独清空的url,然后再到缓存目录里看看生成的缓存目录与文件名,再你需要单独清空这个url的缓存时直接把文件干掉就好。

因为proxy_cache需要proxy_pass配置才能生成缓存内容,而目前一般的站点配置中,比如PHP站点都是把php页面proxy_pass到后台PHP程序处理,所以你可以在处理php的location里加上proxy_cache把php动态语言生成的内容结果缓存。对于那些静态文件其实也不需要什么proxy_cache来缓存,因为静态文件跟proxy_cache最终生成的缓存文件一样都是在磁盘上的一个文件。

因此正确的描述是:它是一个重定向,反向代理的缓存功能,不是根据url生成缓存静态文件的功能

下面我把我的全部配置代码拿出来

proxy_cache是nginx自带的内置缓存模块,配置一下就可以用了,看下面的配置

vi /usr/local/nginx/conf/nginx.conf

 代码如下 复制代码

user  zhangy users;
worker_processes 10;
error_log  /var/vlogs/nginx_error.log  crit;
pid        /var/vlogs/nginx.pid;
#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 65535;
events
{
 use epoll;
 worker_connections 65535;
}
http
{
 include       mime.types;
 default_type  application/octet-stream;
 #charset  gb2312;
 server_names_hash_bucket_size 128;
 client_header_buffer_size 32k;
 large_client_header_buffers 4 32k;
 client_max_body_size 8m;
 sendfile on;
 tcp_nopush     on;
 keepalive_timeout 60;

 tcp_nodelay on;

 fastcgi_connect_timeout 300;
 fastcgi_send_timeout 300;
 fastcgi_read_timeout 300;
 fastcgi_buffer_size 64k;
 fastcgi_buffers 4 64k;
 fastcgi_busy_buffers_size 128k;
 fastcgi_temp_file_write_size 128k;
//============
 client_body_buffer_size  512k;
 proxy_connect_timeout    5;
 proxy_read_timeout       60;
 proxy_send_timeout       5;
 proxy_buffer_size        16k;
 proxy_buffers            4 64k;
 proxy_busy_buffers_size 128k;
 proxy_temp_file_write_size 128k;
 proxy_temp_path   /usr/local/nginx/proxy_temp;
/*levels设置目录层次
keys_zone设置缓存名字和共享内存大小
inactive在指定时间内没人访问则被删除在这里是1天
max_size最大缓存空间*/
proxy_cache_path /usr/local/nginx/proxy_cache levels=1:2 keys_zone=content:20m inactive=1d max_size=100m;
//============等号中间要加的,关键只要加上proxy_cache_path

 gzip on;
 gzip_min_length  1k;
 gzip_buffers     4 16k;
 gzip_http_version 1.0;
 gzip_comp_level 2;
 gzip_types       text/plain application/x-javascript text/css application/xml;
 gzip_vary on;

 upstream myselfxtajmd {
 server 127.0.0.1:10002;
 server 127.0.0.1:10001 weight=5;
 }

 server
 {
 listen       10000;
 server_name  localhost;
 index index.html index.htm index.php;
 log_format  access  '$remote_addr - $remote_user [$time_local] "$request" '
 '$status $body_bytes_sent "$http_referer" '
 '"$http_user_agent" $http_x_forwarded_for';
 access_log  /var/log/test.log  access;

 location /
 {
 proxy_cache content; //根keys_zone后的内容对应
 proxy_cache_valid  200 304 301 302 10d;   //哪些状态缓存多长时间
 proxy_cache_valid  any 1d;    //其他的缓存多长时间
 proxy_cache_key $host$uri$is_args$args;   //通过key来hash,定义KEY的值

 proxy_pass http://myselfxtajmd;
 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;
 }

//动态的放过
 location ~ .*.(php|jsp|cgi)?$
 {
 proxy_set_header Host  $host;
 proxy_set_header X-Forwarded-For  $remote_addr;
 proxy_pass http://www.111cn.net;
 }
 }
}

设置proxy_cache缓存与取消缓存
在配置文件的server{}内,添加这么一句即可:

 代码如下 复制代码
 
location ~ .*/.(css|js)$ {
    add_header Cache-Control 'no-store';
}

 

在nginx.conf里的http块加入以下代码

#proxy_temp_path和proxy_cache_path指定的路径必须在同一分区
proxy_temp_path   /tmp/proxy_temp_dir;
#设置名称为nginx_cache,内存缓存空间大小为500MB,30天没有被访问的内容自动清除,硬盘缓存空间大小为30GB。

 代码如下 复制代码
proxy_cache_path  /tmp/proxy_cache_dir  levels=1:2   keys_zone=nginx_cache:200m inactive=3d max_size=30g;

在server加入以下代码

 

 代码如下 复制代码

 
location / {
        proxy_cache nginx_cache;
        proxy_cache_key $host$uri$is_args$args;
        proxy_set_header Host  $host;
        proxy_set_header X-Forwarded-For  $remote_addr;
        expires  30d;
}
 

重启Ngnix

 

 代码如下 复制代码
/usr/local/nginx/sbin/nginx -s reload
时间: 2024-11-23 13:13:49

Nginx配置proxy_cache后缓存不能生成缓存文件的相关文章

nginx配置域名后程序重定向的错误

问题描述 nginx配置域名后程序重定向的错误 如题,我现在有一台服务器,安装了nginx,按下如图配置了一个反向代理 配置好之后正常访问都没有问题,但是程序中所有的重定向都有问题,重定向之后都会带上应用的上下文根 比如我一个用户登出的程序正常处理结束后要重定向到首页www.zjbzx.cn/上,但是实际跳到了www.zjbzx.cn/zjb/上,请教各位大牛知道的帮忙解答一下,多谢~ 解决方案 配置重定向配置的不对,自己检查下.

nginx-Nginx配置完成后访问登陆界面不能显示css,图片等

问题描述 Nginx配置完成后访问登陆界面不能显示css,图片等 Nginx配置完成后可以访问不带登陆界面的任何网站,页面格式图片都正常显示:只要访问带登陆界面的网站就不能显示css,图片等 解决方案 任何网站, nginx用来做正向代理用的? 解决方案二: 这些资源的路径和location配置正确吗

nginx利用proxy_cache来缓存文件

 代码如下 复制代码 user  zhangy users; worker_processes 10; error_log  /var/vlogs/nginx_error.log  crit; pid        /var/vlogs/nginx.pid; #Specifies the value for maximum file descriptors that can be opened by this process. worker_rlimit_nofile 65535; events

使用Shell自动化管理脚本清理Nginx的proxy_cache缓存

Nginx的Web缓存服务主要由proxy_cache相关指令集和fastcgi_cache相关指令集构成,前者用于反向代理时,对后端内容源服务器进行缓存,后者主要用于对FastCGI的动态程序进行缓存.两者的功能基本上一样. 在功能上,Nginx已经具备Squid所拥有的Web缓存加速功能.清除指定URL缓存的功能.而在性能上,Nginx对多核CPU的利用,胜过Squid不少.另外,在反向代理.http://www.aliyun.com/zixun/aggregation/13996.html

Nginx配置缓存 多域名时分域名配置缓存

相信很多人有已经从apache之类的web服务器转到Nginx了,然而Nginx除了单纯的web服务器用途外,可以当做反向代理服务器使用,配合proxy_cache功能基本可以代替squid了. 1. 编译安装Nginx ./configure --user=www --group=www --prefix=/opt/nginx --with-http_stub_status_module --with-http_ssl_module make && make install 2. ngi

Nginx配置srcache_nginx模块搭配Redis建立缓存系统_nginx

1. nginx模块 --add-module=../modules/ngx_devel_kit-0.2.18 --add-module=../modules/set-misc-nginx-module-0.22rc8 --add-module=../modules/srcache-nginx-module-0.22 --add-module=../modules/redis-nginx-module-0.3.6 --add-module=../modules/redis2-nginx-modu

Nginx用ngx_cache_purge模块缓存加速 支持html伪静态页面

Nginx缓存加速步骤如下 一.添加模块 本文分享的 Nginx 缓存需要额外编译 ngx_cache_purge 模块.至于下载模块.重新编译后面会讲. 二.Nginx配置 要用这个缓存功能,建议重新弄一个 server 模块(替换之前的),如下代码是张戈博客目前正在使用的规则(已删除了我自定义的伪静态规则,避免混淆视听): #####################################################################################

nginx配置详解-url重写、反向代理、负载均衡

应用层的负载均衡 master/worker结构:一个master进程,生成一个或多个worker子进程 nginx请求的连接方式epoll 是Linux下多路复用IO接口select/poll的增强版本 select 遍历epoll无需遍历 1.nginx安装(未安装邮件服务器模块) ./configure --help查看编译选项 配置文件中路径没加/以prefix指定的路径开始./configure \--prefix=/usr \--sbin-path=/usr/sbin/nginx \

Nginx 反向代理可以缓存 HTTP POST 请求页面吗?

Nginx 反向代理可以缓存 HTTP POST 请求页面吗?  2017-09-05 景峯 Netkiller 本文节选自<Netkiller Web 手札> 作者:netkiller 网站:http://www.netkiller.cn 答案是可以!  因为nginx 使用 url 作为缓存的key ( Nginx 将url地址 md5后作为缓存的 key ),所以默认情况下 Nginx 只能处理 HTTP GET 缓存. 对于 HTTP POST 请求,提交数据放在HTTP Head 头