<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    xylz,imxylz

    關注后端架構、中間件、分布式和并發編程

       :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      111 隨筆 :: 10 文章 :: 2680 評論 :: 0 Trackbacks

    使用Nginx的proxyCache緩存功能

    Nginx從0.7.48版本開始,支持了類似Squid的緩存功能。這個緩存是把URL及相關組合當作Key,用md5編碼哈希后保存在硬盤上,所以它可以支持任意URL鏈接,同時也支持404/301/302這樣的非200狀態碼。雖然目前官方的Nginx Web緩存服務只能為指定URL或狀態碼設置過期時間,不支持類似Squid的PURGE指令,手動清除指定緩存頁面,但是,通過一個第三方的Nginx 模塊,可以清除指定URL的緩存。

    Nginx的Web緩存服務主要由proxy_cache相關指令集和fastcgi_cache 相關指令集構成,前者用于反向代理時,對后端內容源服務器進行緩存,后者主要用于對FastCGI的動態程序進行緩存。兩者的功能基本上一樣。

    最新的Nginx 0.8.31版本,proxy_cache和fastcgi_cache已經比較完善,加上第三方的ngx_cache_purge模塊(用于清除指定 URL的緩存),已經可以完全取代Squid。我們已經在生產環境使用了 Nginx 的 proxy_cache 緩存功能超過兩個月,十分穩定,速度不遜于 Squid。

    在功能上,Nginx已經具備Squid所擁有的Web緩存加速功能、清除指定URL緩存的功能。而在性能上,Nginx對多核CPU的利用,勝過Squid不少。另外,在反向代理、負載均衡、健康檢查、后端服務器故障轉移、 Rewrite重寫、易用性上,Nginx也比Squid強大得多。這使得一臺Nginx可以同時作為“負載均衡服務器”與“Web緩存服務器”來使用。

    Nginx的基礎依賴等這里就不再安裝了,我們直接從Nginx開始。

    wget http://labs.frickle.com/files/ngx_cache_purge-1.0.tar.gz
    tar xvzf ngx_cache_purge
    -1.0.tar.gz
    wget http
    ://nginx.org/download/nginx-0.8.31.tar.gz
    tar zxvf nginx
    -0.8.31.tar.gz
     cd nginx
    -0.8.31/
    ./configure --user=nginx --group=nginx --add-module=../ngx_cache_purge-1.0 --prefix=/home/nginx \
        
    --with-http_stub_status_module
    make 
    & make install

    以上就安裝成功了,下面就是設置/home/nginx/conf/nginx.conf文件了。
    下面的命令實在http模塊里面,但是又在server模塊之上。

    proxy_cache_path  /tmp/nginx_cache  levels=1:2   keys_zone=cache_one:200m inactive=10m max_size=5m


    levels指定該緩存空間有兩層hash目錄,第一層目錄是1個字母,第二層為2個字母,保存的文件名就會類似/tmp/nginx_cache/0/da/9cebc9546cefbf52275a01317d96cda0 ;keys_zone為這個空間起個名字,比如上面的cache_one,200m指空間大小為200MB;inactive的10m指緩存默認時長10分鐘;max_size的5m是指單個文件超過5m的就不緩存;clean_time指定一分鐘清理一次緩存。

    接下來就是在server模塊里面配置cache了。

    proxy_cache_valid  200 304 1h;
    proxy_cache_valid  
    301 302 1h;
    proxy_cache cache_one;
    proxy_cache_valid any 1m;
    # 其它文件保存1分鐘
    # hash key

    proxy_cache_key $host$uri$is_args$args;

    上面的例子是說HTTP CODE為200,304,301,302的都緩存一個小時,使用的緩存名稱是cache_one,就是在http里面定義的緩存名稱。其它類型的緩存時間是1分鐘。緩存的文件名是主機名+地址+參數。比如說我們進去看看我們的緩存文件,在目錄/tmp/nginx_cache中:

    [root@xylz nginx_cache]# ll /tmp/nginx_cache/
    總用量 56K
    drwx
    ------ 3 nginx nginx 4.0K  1月 28 21:48 0
    drwx
    ------ 3 nginx nginx 4.0K  1月 28 21:50 1
    drwx
    ------ 3 nginx nginx 4.0K  1月 28 22:04 4
    drwx
    ------ 3 nginx nginx 4.0K  1月 28 22:09 5
    drwx
    ------ 3 nginx nginx 4.0K  1月 28 21:49 6
    drwx
    ------ 5 nginx nginx 4.0K  1月 28 21:49 7
    drwx
    ------ 3 nginx nginx 4.0K  1月 28 21:49 8
    drwx
    ------ 4 nginx nginx 4.0K  1月 28 22:09 9
    drwx
    ------ 3 nginx nginx 4.0K  1月 28 21:49 a
    drwx
    ------ 5 nginx nginx 4.0K  1月 28 21:52 b
    drwx
    ------ 3 nginx nginx 4.0K  1月 28 21:50 c
    drwx
    ------ 5 nginx nginx 4.0K  1月 28 21:48 d
    drwx
    ------ 4 nginx nginx 4.0K  1月 28 21:52 e
    drwx
    ------ 4 nginx nginx 4.0K  1月 28 21:49 f
    [root
    @xylz nginx_cache]# ll /tmp/nginx_cache/f/
    總用量 8.0K
    drwx
    ------ 2 nginx nginx 4.0K  1月 28 22:09 2a
    drwx
    ------ 2 nginx nginx 4.0K  1月 28 22:02 8b
    [root
    @xylz nginx_cache]# ll /tmp/nginx_cache/f/2a/
    總用量 4.0K
    -rw------- 1 nginx nginx 2.2K  1月 28 22:09 aaf88d70a381d91b298d3a05f06572af

    最后我們使用ngx_purge_module來開放一個地址出來允許手動清除緩存。

            location ~ /purge(/.*) {
                proxy_cache_purge    cache_one   
    $host$1$is_args$args;
                }


    在上面中$1就表示我們要清除的地址(uri,如果有參數,需要參數)。

    好了我們來看一個效果。

    www.imxylz.info GET /p/227.html HTTP/1.0 200 9951 0.252 0.252
    www
    .imxylz.info GET /p/227.html HTTP/1.0 200 9951 0.000 -
    www
    .imxylz.info GET /p/227.html HTTP/1.0 200 9951 0.000 -

    可以看到除了第一次使用了252毫秒以外,第二次第三次都沒有花費后端apache服務器的時間,而且每次發送的字節內容是固定的。實際上這里/p/227.html是wordpress動態生成的內容,默認地址應該是?id=227,只不過我將URL重寫了,便于搜索引擎爬去而已。

    然后我們使用地址/purge/p/227.html來清除緩存。

    Successful purge
                Key 
    : www.imxylz.info/p/227.html
                Path
    : /tmp/nginx_cache/9/66/dfea2886862c4eec9ef855215c563


    然后再訪問就可以看到沒有緩存了。

    www.imxylz.info GET /p/227.html HTTP/1.0 200 9951 0.262 0.262


    當然了,如果想php/jsp等不使用緩存,那么就配一個location,同時不配置proxy_cache即可。location的條件可以如下:

        location ~ .*\.(php|jsp|cgi)?$
                {
                proxy_set_header Host  
    $host;
                proxy_set_header X
    -Forwarded-For  $remote_addr;
                proxy_pass http
    ://backend_server;
                }




    ©2009-2014 IMXYLZ |求賢若渴
    posted on 2010-01-29 16:09 imxylz 閱讀(24129) 評論(2)  編輯  收藏 所屬分類: nginx

    評論

    # re: 使用Nginx的proxyCache緩存功能 2015-05-15 14:00 wd
    nginx支持302這種非200狀態碼,但是當有302經過nginx,它緩存的是什么?是源文件還是鏈接?我從瀏覽器輸入的時候還是會收到302啊。  回復  更多評論
      

    # re: 使用Nginx的proxyCache緩存功能 2015-05-15 14:30 wd

    瀏覽器收到302之后,就直接去源鏈接下載了,消息都不經過nginx了,然后怎么緩存呢?  回復  更多評論
      


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     

    ©2009-2014 IMXYLZ
    主站蜘蛛池模板: 成av免费大片黄在线观看| 亚洲色一区二区三区四区| 99久久免费国产精品热| 久久精品国产亚洲AV不卡| 曰批全过程免费视频观看免费软件| 国产成人免费a在线视频app| 337P日本欧洲亚洲大胆艺术图 | jlzzjlzz亚洲乱熟在线播放| 中美日韩在线网免费毛片视频| 亚洲Av无码乱码在线观看性色| 国产精品手机在线亚洲| 亚洲国产婷婷综合在线精品| 国产区在线免费观看| 久久青草亚洲AV无码麻豆| 99精品一区二区免费视频| 亚洲av无码不卡久久| 日韩激情淫片免费看| gogo免费在线观看| 亚洲福利在线视频| 很黄很黄的网站免费的| 亚洲欧美成人av在线观看| 亚洲婷婷国产精品电影人久久| 91精品全国免费观看青青| 亚洲国产精品综合一区在线| 嫩草影院在线免费观看| 一级一级毛片免费播放| 婷婷久久久亚洲欧洲日产国码AV| 亚色九九九全国免费视频| 狠狠入ady亚洲精品| 久久精品国产精品亚洲艾| 很黄很色很刺激的视频免费| 美女被暴羞羞免费视频| 亚洲AV无码成人精品区蜜桃| 福利免费观看午夜体检区| 日本高清不卡中文字幕免费| 麻豆亚洲AV永久无码精品久久| 毛片免费在线播放| 两个人看的www高清免费视频| 亚洲午夜视频在线观看| 国产禁女女网站免费看| 免费观看成人久久网免费观看|