1、nginx-LB配置页面缓存
[root@Oldboy conf]# vi nginx.conf
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
include proxy.conf; //调用proxy.conf
upstream www_pool { //后端服务器地址池
server 10.0.0.7:80 weight=1; //weight 权重,默认为1。 weight越大,负载的权重就越大
server 10.0.0.8:80 weight=1;
}
upstream bbs_pool {
server 10.0.0.7:8080 weight=1;
server 10.0.0.8:8080 weight=1;
}
upstream blog_pool {
server 10.0.0.7:8081 weight=1;
server 10.0.0.8:8081 weight=1;
}
server {
listen 80;
server_name www.etiantian.org;
location ~ .*\.(gif|jpg|png|css|js)$ { //以(jpg|gif|png)为后缀的,跳转并缓存
proxy_pass http://www_pool;
proxy_set_header Host $host; //LB带着主机头访问后端地址池
proxy_set_header X-Forwarded-For $remote_addr; //将客户端真实ip映射到后端地址池
proxy_cache webserver; //调用缓存共享池
proxy_cache_valid 200 10m; //缓存状态码 和 缓存时间
expires 30d; //过期时间
}
location /upload/ { //基于url缓存
proxy_pass http://blog_pool;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_cache webserver;
proxy_cache_valid 200 10m;
expires 30d;
}
location / { //默认访问直接跳转不缓存
proxy_pass http://bbs_pool;
}
}
}
[root@Oldboy nginx]# cat conf/proxy.conf
proxy_connect_timeout 60;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_buffer_size 16k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;
proxy_temp_path /application/nginx/temp_dir;
proxy_cache_path /application/nginx/cache/webserver levels=1:2 keys_zone=webserver:20m max_size=1g;
参数解释:
proxy_connect_timeout 60: LB与后端服务器连接超时时间 (代理连接超时)
proxy_send_timeout 60: 连接不成功时,后端服务器超时时间 (代理发送超时)
proxy_read_timeout 60: 连接成功后,后端服务器响应时间 (代理接收超时)
proxy_buffer_size 16k: 代理服务器保存用户头信息的缓冲区大小
proxy_buffers 4 64k: proxy_buffers缓冲区,网页平均在64k以下的话,这样设置
proxy_busy_buffers_size 128k: 高负荷缓存大小(proxy_buffers的两倍)
proxy_temp_file_write_size 128k: 缓冲文件夹大小,大于这个值将从upstream获取
proxy_temp_path /application/nginx/temp_dir: 缓冲文件夹路径
proxy_cache_path /application/nginx/cache/webserver levels=1:2 keys_zone=webserver:20m max_size=1g;
proxy_cache_path:指定缓存目录
levels=1:2:缓存目录格式
keys_zone=webserver:20m:为缓存目录定义共享池的名称和大小20M
max_size=1g : 共享池最大1G
2、测试
(1) 访问http://www.etiantian.org/test.jpg(缓存)
查看LB缓存目录(说明已经缓存上了)
/application/nginx/cache/webserver/cache/webserver/7/be/ccde0d99fc028721307cbd38a4dc5be7
(2) 访问http://www.etiantian.org/(直接跳转不缓存)
(3) 测试将后端服务器都关闭,依然可以访问http://www.etiantian.org/test.jpg,但是无法访问http://www.etiantian.org/。删除缓存目录下的缓存文件,再次访问http://www.etiantian.org/test.jpg报错
502 Bad Gateway