rails应用在passenger + nginx服务器下使用proxy_cache及proxy_cache_purge模块的方法

    最近一直在研究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

你可能感兴趣的:(nginx)