最近一直在研究mysql_proxy和spockproxy的源码,该写了spockproxy的代码,主要是为数据库的水平分布而开发的,第一阶段的任务已经完成了。今天下午完成了测试,顺便学习了c++。正好有时间看下nginx下如何使用proxy_cache及proxy_cache_purge模块。
1、passenger的安装 gem install passenger。
2、下载nginx,passenger目前集成的是nginx-0.8.53.
cd /opt/ wget http://nginx.org/download/nginx-0.8.53.tar.gz tar xvzf nginx-0.8.53.tar.gz
3、下载 ngx_cache_purge,记住这个解压后的目录为/opt/ngx_cache_purge下面会用。
wget http://download.github.com/FRiCKLE-ngx_cache_purge-1.2-6-g99b4f0f.tar.gz tar xvzf FRiCKLE-ngx_cache_purge-1.2-6-g99b4f0f.tar.gz mv FRiCKLE-ngx_cache_purge-1.2-6-g99b4f0f ngx_cache_purge
4、编译为一下几个步骤
(a)、passenger-install-nginx-module
(b)、按照Enter继续。
(c)、 出现下面的画面,然后选择2,自定义编译Nginx。
(d)、等待下载完pcre,系统会让你选择nginx的源码的位置即为刚才解压的目录位置:/opt/nginx-0.8.53
(e)、选择nginx安装的目录,默认为/opt/nginx/,然后会出现如下的界面,然后输入脚本添加模块 --add-module='/opt/ngx_cache_purge' 这里是刚才nginx_cache_purge模块的地址。
(f)、这样一路enter就可以成功了。
-----------------------------------------------nginx 配置-------------------------------------------------------------------
下面看下自己的配置。
#user www; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { passenger_root /usr/local/lib/ruby/gems/1.8/gems/passenger-3.0.0; passenger_ruby /usr/local/bin/ruby; # proxy_temp_path /opt/nginx/cache/cache; proxy_cache_path /opt/nginx/cache/ levels=1:2 keys_zone=tmpcache:10m inactive=1d max_size=10g; include mime.types; default_type application/octet-stream; upstream my_server_pool { server 127.0.0.1:3000 weight=1; } #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; server { listen 80; server_name localhost; index index.html index.htm; #charset koi8-r; #access_log logs/host.access.log main; location / { proxy_set_header Host $host; proxy_set_header X-Forwarded-For &remote_addr; proxy_pass http://my_server_pool; } location ~ /purge(/.*) { proxy_cache_purge tmpcache $host$1$is_args$args; allow all; } location ~ .*/.(gif|jpg|jpeg|png|bmp|js|css)$ { proxy_cache tmpcache; proxy_cache_valid 200 304 12h; proxy_cache_valid 301 302 1m; proxy_cache_valid any 1m; proxy_cache_key $host$uri$is_args$args; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; proxy_pass http://my_server_pool; } } }
和书中不同,我把
location ~ /purge(/.*) {
proxy_cache_purge tmpcache $host$1$is_args$args;
allow all;
}
提到了location ~ .*/.(gif|jpg|jpeg|png|bmp|js|css)$ 前面。
看下我成果。
1、缓存后的目录,在config中通过proxy_cache_path设置为/opt/nginx/cache目录了。
2、清空缓存,输入http://124.126.42.12/purge/images/22x22/projects.png,清空
---这样nginx既可以支持passenger又可以支持proxy_cache了,这样之前的配置还可以使用,只需要添加写的proxy_cache模块及nginx_cache_purge的配置即可了。
---------------------------------------------------------------------------------------------------------------------------------------------------
参考资料
ngx_cache_purge源代码 :https://github.com/FRiCKLE/ngx_cache_purge/
nginx proxy_cache的模块介绍 :http://wiki.nginx.org/HttpProxyModule