Nginx作為web緩存服務器
從0.7.48版本開始,Nginx支持類似Squid的緩存功能。Nginx的web緩存服務主要由proxy_cache相關命令集合fastcgi_cache相關命令集構成,前者用於反向代理時對后端內容源服務器進行緩存,后者主要用於對FastCGI的動態程序進行緩存。此外,如果不想使用Nginx自帶的緩存功能,也可使用第三方模塊ngx_slowfs_cache來實現緩存服務器的配置。
- 在nginx下安裝緩存服務器
這里使用Nginx自帶的緩存模塊,通過proxy命令來實現數據的緩存,所以在編譯的時候要加上ngx_cache_purge模塊,這個第三方模塊是清理Nginx緩存的一個插件。
在網上下載ngx_cache_purge插件的最新版本,然后重新編譯安裝nginx。
./configure --prefix=/usr/local/nginx --without-http_memcached_module --user=www --group=www --with-http_stub_status_module --with-openssl=/usr/ --with-pcre=/usr/local/src/pcre-8.31 --add-module=/usr/local/src/ngx_cache_purge-2.3(文件解壓后存放的位置)
- 配置Nginx緩存服務器
Nginx緩存服務器的配置主要通過proxy_cache相關命令來實現。
proxy_cache_path /backup/proxy_cache_dir levels=1:2 keys_zone=cache_one:4096m inactive=1d max_size=3g;
- poxy_cache_path:用於設置緩存的目錄,后面跟緩存路徑。最好將緩存目錄放在一個獨立的硬盤上。
- levels=1:2:levels用來設置目錄深度,這里是兩層目錄深度,第一層是一個字符,第二層是兩個字符。
- keys_zne:用來設置web緩存區名稱,這里的cache_one后面的4096,表示內存緩存空間大小為4GB
- inactive:表示自動清除緩存文件的時間,這里的“d”表示1天沒有被訪問的內容自動清除,還可以使用分鍾和小時計數,5m,5h。
- max_size:表示硬盤緩存空間可使用的最大值,默認情況下經訪問的文件常將被放到內存中進行緩存,而在內存緩存空間不足時,Nginx會將不經常訪問的數據從內存寫到磁盤。
proxy_temp_path /backup/proxy_temp_dir;
- 用於指定臨時緩存文件的存儲路徑,這里需要注意的是,兩個存放緩存文件的目錄必須在同一磁盤分區。
location / {
root html;
index index.html index.htm index.php;
proxy_cache cache_one; #反向代理緩存設置命令,語法為“proxy_cache zone|off“,默認為off,需要將proxy_cache命令放在location字段,這樣匹配以此location的url才能被緩存。
proxy_cache_valid 200 304 12h; #對不懂HTTP狀態碼設置不同的緩存時間
proxy_cache_key $host$uri$is_args$args; #這個命令是設置以什么樣的參數得到緩存的文件名,默認為”$scheme$proxy_host$request_uri”,表示以協議,主機名,請求uri(包括參數)做MD5得出緩存的文件名。這里以域名,URI,參數組合成Web緩存的key值,nginx會根據key哈希,存儲緩存內容到二級緩存目錄內
}
下面配置手動清除緩存策略:
location ~ /purge(/.*) {
allow 127.0.0.1;
allow 192.168.1.0/24;
deny all;
proxy_cache_purge cache_one $host$1$is_args$args;
}
這里設置可以清除緩存的ip和網段,下面說的是清除的內容
location ~ \.php?$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html/$fastcgi_script_name;
include fastcgi_params;
}
以.php結尾的文件不用緩存
手動清除緩存的方法
http://192.168.1.120/index.html 訪問
http://192.168.1.120/purge/index.html 清除緩存策略
t
- 驗證我們的緩存服務是否成功啟動
[root@Goun conf]# ps -ef | grep nginx
root 9390 1 0 20:52 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
www 9392 9390 0 20:52 ? 00:00:00 nginx: worker process
www 9393 9390 0 20:52 ? 00:00:00 nginx: cache manager process
進程nginx:cache manager process這個進程是用來管理緩存服務和文件的。