缓存的作用
减少后端压力,提高网站并发量以及响应速度。
常见缓存类型
- 服务器端缓存:如Redis,memcached,web服务器。
- 代理缓存,获取服务端内容进行缓存,如Nginx作为代理服务器,缓存请求资源真实服务器的响应的信息。
- 客户端缓存,即浏览器缓存。
缓存配置语法
#缓存配置
Syntax: proxy_cache zone | off;
Default: proxy_cache off;
Context: http, server, location
#缓存过期周期
Syntax: proxy_cache_valid [code ...] time;
Default: —
Context: http, server, location
#示例
#对200 302响应头的资源缓存10分钟,对404响应头的资源缓存1分钟
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
#缓存维度,即缓存哪些信息
Syntax: proxy_cache_key string;
Default: proxy_cache_key $scheme$proxy_host$request_uri;
Context: http, server, location
#示例
proxy_cache_key "$host$request_uri $cookie_user";
proxy_cache_key $scheme$proxy_host$uri$is_args$args;
示例
在你的默认nginx配置文件下包含以下两个文件
server.conf
在指定的root下准备好html页面
server {
listen 8001;
root /usr/local/nginx/html;
index 1.html;
}
server {
listen 8002;
root /usr/local/nginx/html;
index 2.html;
}
server {
listen 8003;
root /usr/local/nginx/html;
index 3.html;
}
proxy_server.conf
#http下
#说明,level:缓存层级为2级,keys_zone:开辟的空间名称为code_cache,大小为10兆,max_size=10g :缓存的资源最大为10g,多的自动忽略,inactive=60:该缓存在60分钟内未被访问则清理掉,use_temp_path=off;关闭零时缓存
proxy_cache_path 你的缓存路劲 levels=1:2 keys_zone=code_cache:10m max_size=10g inactive=60m use_temp_path=off;
upstream cache {
server 39.96.20.91:8001;
server 39.96.20.91:8002;
server 39.96.20.91:8003;
}
#server下
server {
listen 8000;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
#root html;
#index index.html index.htm;
proxy_pass http://cache;
proxy_cache code_cache;
proxy_cache_valid 200 304 12h;
#除去200 304状态码的资源,缓存10分钟
proxy_cache_valid any 10m;
#缓存状态,在http响应头可以看到是否命中缓存, MISS/HIT
add_header Nginx_Cache "$upstream_cache_status";
#如果出现规定的状态码的错误,则跳转到另一台服务器去请求资源
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
include proxy_param;
}
proxy_param
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_buffer_size 32k;
proxy_buffering on;
proxy_buffers 4 128k;
proxy_busy_buffers_size 256k;
proxy_max_temp_file_size 256k;
重启nginx,查看端口是否开启:
nginx -s reload
netstat -ntlp
在浏览器访问http://IP:8000,第一次返回200,缓存MISS未命中,刷新,返回304,缓存HIT命中。
配置部分页面不缓存
在proxy_server.conf的server中加上如下代码,表示请求1|login|register|password页面的时候不开启缓存,其余开始缓存
if ($request_uri ~ ^/(url3|login|register|password)) {
set $cookie_nocache 1;
}
在proxy_server.conf的location下加上如下两行:
proxy_no_cache $cookie_nocache $arg_nocache $arg_comment;
proxy_no_cache $http_pargma $http_authorization;
现在,访问1.html的时候不会缓存,每次请求返回的状态码都为200,请求2.html或者3.html的时候会产生缓存。