Nginx 静态缓存配置方法
我们需要用到nginx两个缓存模块Expires和proxy_cache。Nginx可以更改HTTP头部,这个是Web服务器必须的,当然Nginx更可以支持在HTTP头部中添加Expires等相关信息,增强浏览器缓存,是网页加载速度增强。proxy_cache模块用于反向代理使用, 加上第三方的ngx_cache_purge模块(用于清除指定URL的缓存)效果更好,已经可以完全取代Squid。(fastcgi_cache主要用于对FastCGI的动态程序进行缓存。)
下面先说Expires的使用方法,在nginx的web的配置里边nginx.conf的server标签下添加如下代码:
location ~ .*.(gif|jpg|jpeg|png|bmp|swf){
expires 3d;
}
重启nginx服务即可。
第二部分是proxy_cache 的缓存,这部分缓存放在nginx代理服务器的nginx.conf里边;
主要参数说明:
proxy_set_header Host remote_addr; #将客户端 IP传给web服务器
proxy_temp_path /home/proxy_temp_dir; #指定临时文件目录
proxy_cache_path /home/proxy_cache_dir levels=1:2 keys_zone=cache_one:50m inactive=1d max_size=
1g;
设置Web缓存区名称为cache_one,内存缓存为50MB,自动清除1天内没有被访问的文件,硬盘缓存为1GB。
client_body_buffer_size 512k; #增加缓冲区代理缓冲客户端请求的最大字节数
proxy_connect_timeout 60; #连接后端服务器超时时间
proxy_read_timeout 60; #后端服务器响应请求超时时间(向web访问)
proxy_send_timeout 60; #后端服务器发送数据超时时间
proxy_buffer_size 32k; #代理请求缓存区大小
proxy_buffers 4 64k; #设置缓冲区的数量和大小,nginx向后端获取信息的响应信息,回放置到缓冲区
proxy_busy_buffers_size 128k; #系统繁忙时可申请的proxy_buffers大小
proxy_temp_file_write_size 128k; #proxy缓存临时文件的大小,硬盘缓存,官方建议buffers*2。
proxy_next_upstream error timeout invalid_header http_500 http_503 http_404; #增加故障转移,如果后端的服务器返回502、504、执行超时等错误,自动将请求转发到upstream负载均衡池中的另一台服务器,实现故障转移。
proxy_cache cache_one; #增加使用web缓存区cache_one
具体nginx.conf配置文件:
[root@lb01 ~]#cat /application/nginx/conf/nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main 'remote_user [
request" '
'body_bytes_sent "
http_user_agent" "
server_addr"';
sendfile on;
keepalive_timeout 65;
include proxy.conf;
upstream static_pools {
ip_hash;
server 192.168.109.161:80 weight=3;
#server 127.0.0.1:8080 backup;
}
upstream dynamic_pools {
server 192.168.109.179 weight=3 max_fails=2 fail_timeout=2;
}
server {
listen 80;
server_name www.bao.com;
add_header X-Via $server_addr;
add_header X-Cache $upstream_cache_status;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
location / {
proxy_pass http://dynamic_pools;
include proxy.conf;
}
location ~ /purge(/.) {
access_log logs/PalmHall_khl1.log main;
allow 172.18.10.163;
allow all;
proxy_cache_purge cache_one 1
args;
}
location ~ ^.*.(js|ico|gif|jpg|jpeg|png)$ {
access_log logs/PalmHall_khl.log main;
proxy_pass http://static_pools;
proxy_redirect off;
proxy_cache cache_one;
proxy_cache_valid 200 302 10m;
60,45 80%
location / {
proxy_pass http://static_pools;
include proxy.conf;
proxy_cache cache_one;
proxy_set_header Host $host;
}
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
location / {
proxy_pass http://dynamic_pools;
include proxy.conf;
}
location ~ /purge(/.) {
access_log logs/PalmHall_khl1.log main;
allow 172.18.10.163;
allow all;
proxy_cache_purge cache_one 1
args;
}
location ~ ^.*.(js|ico|gif|jpg|jpeg|png)$ {
access_log logs/PalmHall_khl.log main;
proxy_pass http://static_pools;
proxy_redirect off;
proxy_cache cache_one;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 301 1d;
proxy_cache_valid 404 1m;
proxy_cache_valid any 5m;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
expires 90d;
}
}
}
[root@lb01 conf]# cat proxy.conf
proxy_set_header Host remote_addr;
proxy_temp_path /home/proxy_temp_dir; #指定临时文件目录
client_body_buffer_size 512k; #增加缓冲区代理缓冲客户端请求的最大字节数
proxy_connect_timeout 60; #增加连接后端服务器超时时间
proxy_read_timeout 60; #增加后端服务器响应请求超时时间
proxy_send_timeout 60; #增加后端服务器发送数据超时时间
proxy_buffer_size 32k; #增加代理请求缓存区大小
proxy_buffers 4 64k; #增加
proxy_busy_buffers_size 128k; #增加系统繁忙时可申请的proxy_buffers大小
proxy_temp_file_write_size 128k; #增加proxy缓存临时文件的大小
proxy_next_upstream error timeout invalid_header http_500 http_503 http_404; #增加故障转移,如果后端的服务器返回502、504、执>
行超时等错误,自动将请求转发到upstream负载均衡池中的另一台服务器,实现故障转移。
注:proxy_cache的缓存清理工具内容,测试还有点问题,下个版本更新时再添加。
检测缓存效果:
首先将原图片名称变更:
然后再访问刚才的这个界面,会发现请求头信息里边有来自于cache
用谷歌浏览器测试的时候,可以按F12调用开发工具,选择Network选项,我们可以看到,Response Headers,在这里我们可以看到,我们请求的是否是缓存,但现在还看不到,下面我们来配置一下,再来测试。
1.缓存变量说明
upstream_cache_status
0.8.3版本中其值可能为:
MISS 未命中
EXPIRED - expired。请求被传送到后端。
UPDATING - expired。由于proxy/fastcgi_cache_use_stale正在更新,将使用旧的应答。
STALE - expired。由于proxy/fastcgi_cache_use_stale,后端将得到过期的应答。
HIT 命中
将这两句放在server标签中即可
add_header X-Via upstream_cache_status;
具体位置可看上边的nginx.conf里边
在缓存文件夹也可以看见缓存的文件,
网友评论