Nginx缓存配置
此内容大部分为转载,如有冲突请见谅。
worker_processes 8;
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
worker_rlimit_nofile 120000;
更改worker进程的最大打开文件数限制。如果没设置的话,这个值为操作系统的限制。设置后你的操作系统和Nginx可以处理比“ulimit -a”更多的文件,所以把这个值设高,这样nginx就不会有“too many open files”问题了。
events {
use epoll; 选用epoll模型
worker_connections 65535;单个进程并发连接数
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
tcp_nopush on;
server_tokens off;
keepalive_timeout 65;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" '
'$connection $upstream_addr '
'upstream_response_time:$upstream_response_time request_time:$request_time';
proxy_cache_path /data/nginx/proxy_cache_path levels=1:2 keys_zone=cache:128m inactive=7d max_size=50g use_temp_path=off;
#proxy_cache_path 本地路径,用来设置Nginx缓存资源的存放地址
#levels=1:2 默认所有缓存文件都放在同一个/path/to/cache下,但是会影响缓存的性能,因此通常会在/path/to/cache下面建立子目录用来分别存放不同的文件。假设levels=1:2,Nginx为将要缓存的资源生成的key为f4cd0fbc769e94925ec5540b6a4136d0,那么key的最后一位0,以及倒数第2-3位6d作为两级的子目录,也就是该资源最终会被缓存到/path/to/cache/0/6d目录中
#keys_zone 在共享内存中设置一块存储区域来存放缓存的key和metadata(类似使用次数),这样nginx可以快速判断一个request是否命中或者未命中缓存,1m可以存储8000个key,10m可以存储80000个key
#inactive 未被访问文件在缓存中保留时间,本配置中如果60分钟未被访问则不论状态是否为expired,缓存控制程序会删掉文件。inactive默认是10分钟。需要注意的是,inactive和expired配置项的含义是不同的,expired只是缓存过期,但不会被删除,inactive是删除指定时间内未被访问的缓存文件
#max_size 最大cache空间,如果不指定,会使用掉所有磁盘空间,当达到配额后,会删除最少使用的cache文件
#use_temp_path 如果为off,则nginx会将缓存文件直接写入指定的cache文件中,而不是使用temp_path存储,official建议为off,避免文件在不同文件系统中不必要的拷贝
proxy_ignore_headers X-Accel-Expires Expires Cache-Control Set-Cookie;
upstream colorzb {
server 192.168.6.101:18080;
}
#上面这个代理,是我自己本地Tomcat端口。
server {
listen 80;
server_name localhost;
root html;
index index.html index.htm;
location / {
proxy_pass http://colorzb;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
location ~ /purge(/.*) {
allow 127.0.0.1;
deny all;
proxy_cache_purge cache $host$1$is_args$args;
}
#location ~ /purge(/.*) {
# allow 127.0.0.1;
# deny all;
# proxy_cache_purge cache $host$1$is_args$args;
# }
这个location用于清空缓存,需编译第三方模:ngx_cache_purge-2.3.tar.gz。
使用方法就是如果你想清空某个静态资源的缓存,本地访问http://192.168.1.1.com/purge/123.png
location ~ .(js|css|htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|xls|mp3|wma)$ {
proxy_cache cache; proxy_cache_valid 200 304 302 5d;
proxy_cache_valid any 7d;
proxy_cache_key $host$uri$is_args$args;
add_header X-Cache '$upstream_cache_status from $host';
proxy_pass http://colorzb;
expires 30d;
}
#proxy_cache cache;
启用proxy cache,并指定key_zone。另外,如果proxy_cache off表示关闭掉缓存
#proxy_cache_valid 200 304 302 5d;
对200/304/302状态码的缓存5天
#proxy_cache_valid any 7d;
除了上面那些状态码的,缓存7天
#proxy_cache_key $host$uri$is_args$args;
以域名、URI、参数组合成Web缓存的Key值,Nginx根据Key值哈希,存储缓存内容到二级缓存目录内
#add_header X-Cache '$upstream_cache_status from $host';
增加一个header字段方便在浏览器查看是否击中缓存(生产中可注释),其实就是测试时候方便检测是否成功做出缓存功能
#proxy_pass http://colorzb;
代理,这个不用解释了。。。。。。。。我这里就是代理到Tomcat上,只要是在Tomcat上出来的静态资源全都缓存到本地。
#expires 30d;
浏览器中缓存30天
#proxy_next_upstream http_502 http_504 error timeout invalid_header;
#如果后端的服务器返回502、504、执行超时等错误,自动将请求转发到upstream负载均衡池中的另一台服务器,实现故障转移
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}