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:2 keys_zone=cache_one:200m inactive=1d max_size=30g;
- upstream backend_server {
- server 192.168.0.237:80 weight=1 max_fails=2 fail_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配置并未生效;目前还不明白是什么问题;
参考张宴博客地址:
http://blog.s135.com/nginx_cache/
转载于:https://blog.51cto.com/yjw1983/780576