为了使nginx + webpy + fastcgi 这一组合达到性能最优,决定配置nginx的fastcgi cache,本文将详述配置的步骤和所遇到的问题。 一. 安装nginx最新稳定版本和nginx_ngx_cache_purge模块我(即OutOfMemory.CN)使用的nginx版本是最新稳定版nginx 1.2.6, 首先需要在Linux安装此nginx版本。 首先需要切换到某个安装目录,执行下面命令下载nginx安装包: wget http://nginx.org/download/nginx-1.2.6.tar.gz 并解压tar.gz文件: tar -xvf ./nginx-1.2.6.tar.gz 按照上面步骤下载并解压nginx模块nginx_ngx_cache_purge的最新稳定版本,我用的是ngx_cache_purge-2.0 文件下载解压完毕之后就可以安装了,切换到nginx路径下,执行如下命令: ./configure --prefix=/data0/nginx-1.2.6/ --user=web --group=web --with-http_ssl_module --add-module=../ngx_cache_purge-2.0 --with-http_stub_status_module 这里configure配置了安装的路径,和nginx的用户以及用户组(需要预先创建好),和nginx fastcgi cache最为相关的是加上 --add-module=../ngx_cache_pruge-2.0 指定要添加purge缓存的模块。
然后执行 二. 配置nginx fastcgi cache 和purge首先在http范围内(您也可以根据需要添加到server配置内)添加下面配置: #fast cgi cache def fastcgi_cache_path /data0/nginx-1.2.6/cache levels=1:2 keys_zone=nginx_webpy_cache:1m inactive=1d; fastcgi_temp_path /data0/nginx-1.2.6/cache/temp; fastcgi_cache_key "$scheme$request_method$host$request_uri$is_args$args"; 这三行配置说明如下:
需要特别注意nginx运行用户必须有上面配置的缓存路径和临时路径的读写权限, 否则缓存不了 然后需要在location配置中根据需要添加相应的缓存配置 例如我的配置: location ~^ /code-snippet/ { fastcgi_param REQUEST_METHOD $request_method; fastcgi_param QUERY_STRING $query_string; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param SCRIPT_FILENAME $fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_script_name; fastcgi_pass 127.0.0.1:9002; #fastcgi cache def fastcgi_cache nginx_webpy_cache; #指定使用缓存共享内存的名字,和上面定义相对应 fastcgi_cache_valid 200 302 1h; #指定200和302要缓存的时长 fastcgi_cache_valid 301 1d; #指定301要缓存的时间 fastcgi_cache_valid any 10m; #指定其他状态号要缓存的时间 fastcgi_cache_min_uses 1; #指定缓存的最少使用次数 fastcgi_ignore_headers "Cache-Control" "Expires" "Set-Cookie"; #指定要忽略fast cgi cache输出的头 fastcgi_hide_headers "Set-Cookie"; #指定在输出缓存时要忽略的http相应头 fastcgi_cache_use_stale error timeout invalid_header http_500; #指定500的处理 fastcgi_cache_valid 60m; #指定一般性的缓存时间 add_header X-Cache $upstream_cache_status; #添加表示缓存是否命中的响应头 #end } 这里fastcgi cache相关的配置在注释#fastcgi cache def 和 #end之间,每一行都有对应的注释,这里要特别注意fastcgi_ignore_headers这个不配置会导致缓存的状态一直是MISS。 以上配置完毕后,就可以在浏览器中查看是否成功缓存了,但是只缓存还是不够的,我们还需要在需要的时候能够清除缓存,比如对于OutOfMemory.CN来说在用户编辑了代码之后,必须马上清除对应url的缓存,这样用户才可以马上看到修改后的结果。 如下是purge缓存相关的配置: location ~ /purge(/.*) { allow 127.0.0.1; deny all; fastcgi_cache_purge nginx_webpy_cache "$scheme$request_method$host$1$is_args$args"; } 这个配置使用了nginx_ngx_cache_purge模块,这个配置里面首先要指定purge url的规则为 /purge(/.*) purge后的括号内的正则表达式要在下面使用,在location里面的allow指定允许那些ip访问purge,deny all配置禁止其他所有ip访问此路径;
三. 做webpy fastcgi cache 时遇到的问题我做这个配置很曲折,经过了4天才完全解决问题,我遇到的问题如下:
就是这样子了,webpy + nginx + fastcgi + fastcgi cache 还是非常给力的!! (责任编辑:IT) |