nginx是个很厉害的web-server除了做日常的web-server外还兼职做了缓存服务器。我参照张宴老师的博客做了回nginx缓存的实验。当然目前还是有些问题没有解决。安装我参照的http://youzao.blog.51cto.com/3946111/737273 网友的。
一、安装pcre
# tar zxvf pcre-8.20.tar.gz
# cd pcre-8.20
# ./configure
# make
# make install
二、安装nginx
tar zxvf ngx_cache_purge-1.4.tar.gz
# tar zxvf nginx-1.1.10.tar.gz
# cd nginx-1.1.10
# ./configure --user=www --group=www --add-module=../ngx_cache_purge-1.4 --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
# make
# make install
# mkdir -p /data/proxy_temp_dir
# mkdir -p /data/proxy_cache_dir
三、配置nginx
user www www;
worker_processes 8;
error_log /data/logs/nginx_error.log crit;
pid /usr/local/nginx/nginx.pid;
#Specifies the value for maximum file descriptors that can be opened by this process.
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_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 300m;
sendfile on;
tcp_nopush on;
keepalive_timeout 60;
tcp_nodelay on;
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_temp_path /data/proxy_temp_dir;
proxy_cache_path /data/proxy_cache_dir levels=1:2keys_zone=cache_one:200minactive=1dmax_size=30g;
upstream backend_server {
server 192.168.0.237:80 weight=1max_fails=2fail_timeout=30s;
}
server
{
listen 80;
server_name www.5926.com;
location /
{
proxy_next_upstream http_502 http_504 error timeout invalid_header;
proxy_cache cache_one;
proxy_cache_valid 200 304 12h;
proxy_cache_key $host$uri$is_args$args;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://backend_server;
expires 1d;
}
location ~ /purge(/.*)
{
allow 127.0.0.1;
allow 192.168.0.0/24;
deny all;
proxy_cache_purge cache_one $host$1$is_args$args;
}
location ~ .*\.(php|jsp|cgi)?$
{
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://backend_server;
}
access_log /data/logs/access_log.log combined;
}
}
四、启动nginx
[root@nginx_cache ~]# /etc/init.d/nginx start
nginx start ok
五、访问指定的测试页,验证缓存的生效;
访问测试页http://192.168.0.231/test.html
查看是否已生成缓存
[root@nginx_cache ~]# ll /data/proxy_cache_dir/
total 32
drwx------ 3 www www 4096 Feb 15 14:41 2
drwx------ 3 www www 4096 Feb 15 14:39 3
drwx------ 3 www www 4096 Feb 15 14:58 8
drwx------ 3 www www 4096 Feb 15 14:27 c
此处注意将缓存目录的权限服务nginx的www账户。我在测试的时候,未付权限发现缓存文件未生成;
此时,修改测试页内容。并使用别的机器访问,发现访问的内容没有变化,证明缓存生效了。
使用purge来清除缓存生成md5值;具体方法在修改后的页面路径前添加purge;
此处可以看到显示purge成功;
再用别的电脑去访问,发现以前的缓存已经去掉生成了新的缓存文件;
当然在生产环境下,这种纯靠手工更新的方式肯定是行不通的;所以可以通过curl等命令结合shell写脚本进行页面的更新;
遇到的问题:
参照张宴老师的博客,发现缓存服务器自身只能起到缓存及负载均衡的作用,但是自身的web-server配置并未生效;目前还不明白是什么问题;