Nginx作为web缓存服务器应用
Nginx支持类似Squid的缓存功能。Nginx的web缓存服务主要由proxy_cache相关命令集和fastcgi_cache相关命令集构成,前者用于反向代理时对后端内容源服务器进行缓存,后者主要用于对FastCGI的动态程序进行缓存。此外,如果不想使用Nginx自带的缓存功能,也可以使用第三方模块ngx_slowfs_cache来实现缓存服务器配置。
1.在Nginx下安装缓存服务器:
这里使用Nginx自带的缓存模块,通过proxy_cache命令来实现数据的缓存。
下载ngx_cache_purge模块,下载地址:http://labs.frickle.com/files/ngx_cache_purge-2.1.tar.gz
安装:
wget http://labs.frickle.com/files/ngx_cache_purge-2.1.tar.gz
tar zxvf ngx_cache_purge-2.1.tar.gz -C /app
tar zxvf nginx-1.4.7.tar.gz
cd nginx-1.4.7
./configure --user=www --group=www --prefix=/usr/local/nginx/ --add-module=/app/ngx_cache_purge-2.1/ --with-http_stub_status_module --with-http_ssl_module
make
make install
2.配置Nginx缓存服务器:
配置:
user www www;
worker_processes 4;
error_log logs/error.log notice;
pid logs/nginx.pid;
worker_rlimit_nofile 65535;
events {
use epoll;
worker_connections 65535;
}
http {
include mime.types;
default_type application/octet-stream;
charset utf-8;
server_names_hash_bucket_size 128;
client_max_body_size 300m;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
sendfile on;
tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 60;
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;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;
proxy_cache_path /backup/proxy_cache_dir levels=1:2 keys_zone=cache_one:1024m inactive=1d ma
x_size=3g;
参数说明:
☆ proxy_cache_path : 用于设置缓存的目录,后面跟缓存路径。最好将缓存目录放在一个独立的硬盘上。
★ levels=1:2 : levels用来设置目录深度,这里是两层目录深度,第一层是一个字符,第二层是两个字符。
☆ keys_zone : 用来设置web缓存区名称,这里是cache_one,后面的“4096m”表示内存缓存空间大小为4GB。
★ inactive : 表示自动清除缓存文件的时间,这里的“1d"表示1天没有被访问的内容自动清除,还可以使用分钟或小时计时,例如“5m"表示5分钟后自动清除,“5h”表示5小时后自动清除。
☆ max_size : 表硬盘缓存空间可使用的最大值,默认情况下经访问的文件常将被放到内存中进行缓存,而在内存缓存空间不足时,Nginx会将不经常访问的数据从内存写到磁盘。
proxy_temp_path /backup/proxy_temp_dir;
参数说明:
★ proxy_temp_path : 用于指定临时缓存文件的存储路径,这里需要注意的是,proxy_temp_path和proxy_cache_path指定的路径必须在同一磁盘分区。
server {
listen 80;
server_name yan.blog.com m.blog.com;
charset utf-8;
#access_log logs/host.access.log main;
location / {
proxy_cache cache_one;
参数说明:
反向代理缓存设置命令,语法为“proxy_cache zone|off",默认值为off,需要将proxy_cache命令放到location字段,这样匹配此location的url才能被缓存。
proxy_cache_valid 200 304 12h;
参数说明:
对不同的HTTP状态码设置不同的缓存时间。
proxy_cache_key $host$uri$is_args$args;
参数说明:
这个命令是设置以什么样的参数得到缓存的文件名,默认为“#$scheme$proxy_host$request_uri",表示以协议、主机名、请求uri(包含参数)作MD5得出缓存的文件名。这里是以域名、URI、参数组合成web缓存的Key值,Nginx根据Key值哈希,存储缓存内容到二级缓存目录内。
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://127.0.0.1:8080;
expires 1d;
}
#下面这段用于配置手动清除缓存策略,清除的方法为:如果一个URL为http://yan.blog.com/bbs/index.html,那么通过访问http://yan.blog.com/purge/bbs/index.html即可清除该URL的缓存。
location ~ /purge(/.*) {
#allow 127.0.0.1;
参数说明:
表示只允许指定的IP或IP段才可以清除URL缓存。
#allow 17.100.0.0/24;
#deny all;
proxy_cache_purge cache_one $host$1$is_args$args;
}
#设置不做缓存的内容,这里设置扩展名以.jsp、.php、.jspx结尾的动态应用程序不缓存。
location ~ .*\.(jsp|php|jspx)?$ {
proxy_set_header Host $host;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://127.0.0.1:8080;
}
access_log off;
}
server {
listen 8080;
server_name 127.0.0.1;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root /var/www/html/;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
3.测试proxy_cache实现的缓存功能:
启动Nginx后,查看Nginx的进程:
[root@nginx01 ~]# ps -ef | grep nginx
root 23641 1 0 10:37 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
www 23749 23641 0 10:45 ? 00:00:01 nginx: worker process
www 23750 23641 0 10:45 ? 00:00:01 nginx: worker process
www 23751 23641 0 10:45 ? 00:00:00 nginx: worker process
www 23752 23641 0 10:45 ? 00:00:01 nginx: worker process
www 23753 23641 0 10:45 ? 00:00:00 nginx: cache manager process
从输出可知,Ngin进程多了一个“cache manager”进程,这个进程就是用来管理缓存服务和文件的。
4.如何清除指定的URL缓存:
有时候修改网页内容,如果不想等到缓存文件过期后自动清理,还可以通过手动方式清理缓存文件,清理方式在上面介绍Nginx配置文件时已经做过说明,只需在清除缓存网页的URL地址前面增加purge即可。
例如:
要清除http://yan.blog.com/index.html这个页面的缓存文件,只需在浏览器重输入http://yan.blog.com/purge/index.html地址即可。
转载于:https://blog.51cto.com/6284444/2105882