天天看點

Nginx+Proxy_cache高速緩存配置

前言* 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 &amp;&amp; </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>&gt; </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

繼續閱讀