前言* Nginx已經具備Squid所擁有的Web緩存加速功能、清除指定URL緩存的功能。而在性能上,Nginx對多核CPU的利用,勝過Squid不少。另外,在反向代理、負載均衡、健康檢查、後端伺服器故障轉移、Rewrite重寫、易用性上,Nginx也比Squid強大得多。這使得一台Nginx可以同時作為“負載均衡伺服器”與“Web緩存伺服器”來使用。
一、 安裝nginx和ngx-purge:
ulimit -SHn 65535
cd /usr/local/nginx
tar zxvf ngx_cache_purge-1.4.tar.gz
cd nginx-1.6.1/
./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --add-module=../ngx_cache_purge-1.4
make && make install
cd ../
二、 Nginx Cache配置:
http { \\添加以下内容 ,不能定義在server{}上下文中 }
.......
#定義從後端伺服器接收的臨時檔案的存放路徑
proxy_temp_path /data/proxy_temp_dir;
#設定Web緩存區名稱cache_one,記憶體緩存空間100MB,1天沒有被通路的内容自動清除,硬碟緩存空間10GB。
proxy_cache_path /nginx/cache/first levels=1:2:1 keys_zone=cache_one:100m inactive=1d max_size=10g;
upstream backend_server {
server 10.1.1.1:8080 weight=1 max_fails=2 fail_timeout=30s;
server 10.1.1.2:8080 weight=1 max_fails=2 fail_timeout=30s;
}
server
{
listen 80;
server_name localhost;
index index.html index.htm;
root html;
location /
#如果後端的伺服器傳回502、504、執行逾時等錯誤,自動将請求轉發到upstream負載均衡池中的另一台伺服器,實作故障轉移。
proxy_next_upstream http_502 http_504 error timeout invalid_header;
proxy_cache cache_one;
#對不同的HTTP狀态碼設定不同的緩存時間
proxy_cache_valid 200 304 2h;
#以域名、URI、參數組合成Web緩存的Key值,Nginx根據Key值哈希,存儲緩存内容到二級緩存目錄内
proxy_cache_key $host$uri$is_args$args;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://127.0.0.1;
expires 1d;
}
location ~ /purge(/.*)
#設定隻允許指定的IP或IP段輸入正确的密碼才可以清除URL緩存。
auth_basic “Please Insert User And Password”;
auth_basic_user_file /tmp/htpasswd;
allow 127.0.0.1;
allow 10.1.1.0/24;
deny all;
proxy_cache_purge cache_one $host$1$is_args$args;
........
三、ginx Cache測試:
#啟動Nginx服務,/usr/local/nginx/sbin/nginx
#然後配置好resin端口設定為8080
#如果需要重新整理緩存的url位址為: http://10.1.1.10/purge/
如下圖:
四、如何清除緩存:
清除緩存有兩種方法,第一種是直接通過nginx.conf配置檔案定義的/purge虛拟目錄去清除,第二種方法可以通過shell腳本去批量清除:
附上Shell腳本清空緩存的内容:
<code>#! /bin/sh</code>
<code>#Auto Clean Nginx Cache Shell Scripts</code>
<code>#2013-06-12 wugk</code>
<code>#Define Path</code>
<code>CACHE_DIR=</code><code>/data/www/proxy_cache_dir/</code>
<code>FILE=</code><code>"$*"</code>
<code>#To determine whether the input script,If not, then exit 判斷腳本是否有輸入,沒有輸入然後退出</code>
<code>if</code>
<code> </code><code>[ </code><code>"$#"</code> <code>-</code><code>eq</code> <code>"0"</code> <code>];</code><code>then</code>
<code> </code><code>echo</code> <code>"Please Insert clean Nginx cache File, Example: $0 index.html index.js"</code>
<code> </code><code>sleep</code> <code>2 && </code><code>exit</code>
<code>fi</code>
<code> </code><code>echo</code> <code>"The file : $FILE to be clean nginx Cache ,please waiting ....."</code>
<code>#Wrap processing for the input file, for grep lookup,對輸入的檔案進行換行處理,利于grep查找比對相關内容</code>
<code>for</code> <code>i </code><code>in</code> <code>`</code><code>echo</code> <code>$FILE |</code><code>sed</code> <code>'s//\n/g'</code><code>`</code>
<code>do</code>
<code> </code><code>grep</code> <code>-ra $i ${CACHE_DIR}| </code><code>awk</code> <code>-F</code><code>':'</code> <code>'{print $1}'</code> <code>> </code><code>/tmp/cache_list</code><code>.txt</code>
<code> </code><code>for</code> <code>j </code><code>in</code> <code>`</code><code>cat</code><code>/tmp/cache_list</code><code>.txt`</code>
<code> </code><code>do</code>
<code> </code><code>rm</code> <code>-rf $j</code>
<code> </code><code>echo</code> <code>"$i $j is Deleted Success !"</code>
<code> </code><code>done</code>
<code>done</code>
<code></code>
本文轉自奔跑在路上部落格51CTO部落格,原文連結http://blog.51cto.com/qiangsh/1557047如需轉載請自行聯系原作者
qianghong000