nginx三 之缓存模块
Posted 哎哟~不错哦
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx三 之缓存模块相关的知识,希望对你有一定的参考价值。
友情提示: 缓存模块是在动静分离的环境基础上搭建,动静分离可以参考http://www.cnblogs.com/dahuandan/p/6759212.html
介绍
提高网站响应速度是web应用不容忽视的目标,在之前动静分离的基础上,我们已经降低了后端服务器压力,提高了处理请求的性能,但是用户请求的静态资源是从硬盘读取,相比内存的性能还有很大的提高;
nginx自带的缓存模块可以把静态资源缓存到内存中,提高了用户请求静态资源的速度,并且nginx自带缓存模块配置简单,使用灵活,搭配第三方插件可以实现手动清除指定的缓存。
配置
添加缓存模块
#创建缓存目录 mkdir /dev/shm/demo #进入nginx安装的conf目录 cd /usr/local/nginx/conf/ #打开nginx.conf文件添加以下内容: proxy_temp_path /dev/shm/transfer/proxy_temp_path; proxy_cache_path /dev/shm/transfer/proxy_cache_path levels=1:2 keys_zone=cache_one:6072m inactive=7d max_size=30g; proxy_ignore_headers X-Accel-Expires Expires Cache-Control Set-Cookie; proxy_cache cache_one; 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\';
完整的配置文件
#工作进程个数:多开几个可以减少io带来的影响, #根据 lscpu查出来的cpus设置(一般为当前机器核心数的1-2倍,最大不超过8), worker_processes 2; #worker_cpu_affinity需要结合worker_processes使用,一个worker_processes绑定一个CPU, #比如两核是01,四核是0001,下面是8核绑定8个worker_processes的示例 worker_cpu_affinity 01 10; #error_log logs/error.log info; events { #使用epoll模型提高性能 use epoll; #单个进程连接数(最大连接数=连接数*进程数) worker_connections 65535; } http { #文件扩展名与文件类型映射表 include mime.types; #默认文件类型 default_type application/octet-stream; #开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on, #如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。 #注意:如果图片显示不正常把这个改成off sendfile on; #长连接超时时间,单位是秒 keepalive_timeout 65; #gzip 是告诉nginx采用gzip压缩的形式发送数据。这将会减少我们发送的数据量。 gzip on; gzip_min_length 1k; #最小1K gzip_buffers 16 64K; gzip_http_version 1.1; gzip_comp_level 6; gzip_types text/plain application/x- text/css application/xml application/; gzip_vary on; #header设置:用户真实的ip地址转发给后端服务器 proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; #缓冲 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; ##########################缓存##################### #设置缓存临时目录,要配合linux的内存目录/dev/shm使用的话,必须给赋予目录权限,因为默认root权限 proxy_temp_path /dev/shm/demo/proxy_temp_path; #设置缓存目录,并设置Web缓存区名称为cache_one,内存缓存空间大小为128m,7天没有被访问的内容自动清除,硬盘缓存空间大小为5GB。 proxy_cache_path /dev/shm/demo/proxy_cache_path levels=1:2 keys_zone=cache_one:128m inactive=7d max_size=5g; #启用html、jsp...<meta>标签不缓存的设置 proxy_ignore_headers X-Accel-Expires Expires Cache-Control Set-Cookie; ################################################集群 ################################################### #动态资源集群 upstream dynamic_server { #服务器配置 weight是权重的意思,权重越大,分配的概率越大。 server 192.168.1.111:8080 weight=1 max_fails=2 fail_timeout=30s; server 192.168.1.111:8081 weight=1 max_fails=2 fail_timeout=30s; } #静态资源集群(一般由nginx管理,因为nginx处理静态资源性能好,如果服 #务器有限,也可以部署在代理服务器本地) upstream static_server { server 192.168.1.111:808 weight=1; } ################################################Nginx代理################################################### server { #监听80端口,可以改成其他端口 listen 80; #nginx服务的域名,通过域名就可以访问应用 server_name localhost; ##静态资源存放在nginx服务器的地址 #root /opt/static/demo; #用于清除缓存的url设置 #假设一个URL为demo/test.gif,那么就可以通过访问demo/purge/test.gif清除该URL的缓存。 location ~ /purge(/.*) { #设置只允许指定的IP或IP段才可以清除URL缓存 allow 127.0.0.1; allow 10.74.147.91; deny all; proxy_cache_purge cache_one $host$1$is_args$args; } #反向代理:网页、视频、图片文件从nginx服务器读取 location ~ .*\\.(js|css|htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ { ##########################缓存##################### #使用web缓存区cache_one proxy_cache cache_one; #对200 304 302状态码设置缓存时间5天,其他的7天 proxy_cache_valid 200 304 302 5d; proxy_cache_valid any 7d; #以域名、URI、参数组合成Web缓存的Key值,Nginx根据Key值哈希,存储缓存内容到二级缓存目录内 proxy_cache_key $host$uri$is_args$args; #如果后端的服务器返回502、504、执行超时等错误,自动将请求转发到upstream负载均衡池中的另一台服务器,实现故障转移 #proxy_next_upstream http_502 http_504 error timeout invalid_header; #增加一个header字段方便在浏览器查看是否击中缓存(生产中可注释) add_header X-Cache \'$upstream_cache_status from $host\'; #反向代理,静态的由nginx来处理(不配置默认nginx的html目录,静态资源的目录结构必须和tomcat的web工程一致) proxy_pass http://static_server; #浏览器中缓存30天 expires 30d; } #反向代理: 其他动态文件转发到后端的tomcat集群 location ~ .*$ { proxy_pass http://dynamic_server; } #错误提示页面 error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } #静态资源服务器,这里监听本地808端口,因为静态资源服务器和代理服务器是同一台机器,所以有如下配置 #如果是独立的服务器,直接在集群upstram配置即可。 server{ listen 808; server_name static; #反向代理:网页、视频、图片文件从nginx服务器读取 location / { #浏览器中缓存30天 expires 30d; } } }
重新加载配置文件
/usr/local/nginx/sbin/nginx -s reload
测试
添加测试图片
在/usr/local/nginx/html/demo目录下添加测试图片test.png
测试缓存
1、当我们第一次访问测试图片地址 http://192.168.1.111/demo/test.png 是没有缓存命中的:
2、再次访 问http://192.168.1.111/demo/test.png 我们可以看到命中缓存了:
3、清除之前访问url的缓存:
以上是关于nginx三 之缓存模块的主要内容,如果未能解决你的问题,请参考以下文章
Nginx使用教程:使用Nginx缓存之Memcached缓存