CentOS 6 安裝 Nginx Cache Reverse Proxy + Purge plugin

2015-05-07 CentOS

前一篇有安裝過 Nginx Reverse Proxy 在此篇將加入 Cache 機制,可以將一些靜態檔案快取在前端的 Nginx Reverse Proxy,加快使用者在抓取靜態檔案時的回應速度,也可以降低後端伺服器的 Loading

 

Nginx Cache Reverse Proxy 也可以廣泛用在最近盛行的 CDN 上面,佈署於離使用者最近的機房地區,讓使用者有最快的回應速度

 

此篇會替 Nginx 加入 ngx_cache_purge 模組,這個模組可以讓管理者手動清除已被快取的檔案,由於 Nginx 是採用靜態編譯的方式,不能像 Apache 用設定檔去動態加入模組,所以此篇會重新將 Nginx 編譯

 

當然,不需要讓 開發人員 清除快取的人就直接忽略編譯 ngx_cache_purge 的那一段。

也可以到 cache 目錄將檔案清除即可。

 

安裝 Nginx Cache Reverse Proxy + Purge Plugin

 

step1. 下載 Nginx + Purge 並編譯安裝

$ wget http://nginx.org/download/nginx-1.7.12.tar.gz http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz

編譯 Nginx 你會須要 pcre 及 openssl
$ yum install openssl-devel openssl pcre pcre-devel gd-devel

先將 ngx_cache_purge 解壓出來,再讓 Nginx 編譯指定 purge 路徑
$ tar zxvf ngx_cache_purge-2.3.tar.gz
$ tar zxvf nginx-1.7.12.tar.gz
$ cd nginx-1.7.12

$   ./configure --prefix=/usr/local/nginx --pid-path=/var/run/nginx.pid --add-module=/root/ngx_cache_purge-2.3 --with-http_ssl_module --with-http_stub_status_module --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --with-http_spdy_module --http-client-body-temp-path=/var/tmp/nginx/client/ --http-proxy-temp-path=/var/tmp/nginx/proxy --with-http_realip_module --with-http_image_filter_module --with-http_stub_status_module --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi --http-scgi-temp-path=/var/tmp/nginx/scgi

$ make && make install

如果有其他需要的模組請再自行加入,如 mp4 , gzip .. ,然後把一些 temp 目錄都指向到 /var/tmp/nginx 統一整理

 

 

step2. 設定 proxy cache 參數

建立cache目錄
$ mkdir /var/nginx/tmp /var/nginx/cache
$ chown -R nginx.nginx /var/nginx

設定
$ vim /usr/local/nginx/conf/nginx.conf

http {
..
proxy_temp_path /var/nginx/tmp;
proxy_cache_path /var/nginx/cache levels=1:2
                 keys_zone=zone_one:200m
                 inactive=1d
                 max_size=30g;
..
include /usr/local/nginx/conf.d/*.conf;

}
  • proxy_temp_path 用來存放臨時 temp 檔案
  • proxy_cache_path 是放 cache 檔案的地方
  • proxy_temp_path、proxy_cache_path 兩個目錄不可以跨 partitions,並且要有 nginx 寫入權限
  • key_zone 是 cache 名稱定義,作為 server {} 引用,可在記憶體快取 200M 空間
  • inactive 快取有效時間,超過即刪除。
  • max_size 占用硬碟快取空間 30G

上面的參數都依照每台主機的狀況再做調整,如 memory cache、disk cache

 

 

step3. 設定 server {} 設定檔,加入 cache 參數

Reverse Proxy 設定方式參考上一篇 Nginx Reverse Proxy 設定

$ vim /usr/local/nginx/conf.d/proxy.conf

server {
..
   location ~ /purge(/.*) {
   allow 127.0.0.1;
   allow 192.168.121.0/24;
   deny all;
   proxy_cache_purge one $host$1$is_args$args;
   }

   location ~* \.(html|htm|jpg|png|gif|jpeg|js|css)$ {
   proxy_buffering on;
   proxy_cache one;
   proxy_cache_valid 200 304 12h;
   proxy_cache_valid 301 302 1m;
   proxy_cache_valid any 1m;
   proxy_cache_key $host$uri$is_args$args;
   proxy_set_header Host $Host;
   proxy_set_header X-Forwarded-For $remote_addr;
   add_header Cache-status $upstream_cache_status;
   proxy_pass http://nginx.com;
   }
}

 

Purge 模組

  • /purge 提供 開發人員 刪除的路徑,允許本機和 192.168.121.0/24 存取
  • proxy_cache_purge 引用 keys_zone one

 

Cache 參數

  • 宣告要 cache 的項目 html|htm|jpg|png|gif|jpeg|js|css
  • proxy_cache_valid 針對 status code 分類快取存活的時間
  • 加入 add_header $upstream_cache_status,讓 HTTP Header 加入一項 cache 狀態

 

 

step4. 測試

先測試 Proxy 反向代理成功,順利瀏覽網站

瀏覽網站後就會有 cache 檔案存到 /var/nginx/cache,在裡面應該會有 0-9 a-z 排序的 cache 目錄表示檔案已經 cache 進來了。

 

再來測試 Purge 模組

例如有更新某個圖檔位於 http://shazi.info/test.jpg

在網址打上 http://shazi.info/purge/test.jpg 就可以看到 Successful purge 代表刪除快取檔案成功!

2015-05-07_001540

 

 

到這邊 Nginx Reverse Proxy Cache 已經設定完成了

 

 

由於在 step3 有加入 header 參數 $upstream_cache_status

所以最後要再來驗證一下 header 是否有正常顯示

$ curl -I http://shazi.info/test.jpg

Cache-status: HIT

 

HIT 代表有 cache 到該檔案,是由 Proxy Response 給 user 的

 

$upstream_cache_status 也可以加到 log,方便直接在 Log 查看或是進行統計

$ vim /usr/local/nginx/conf/nginx.conf

log_format main '$upstream_cache_status';

 

 

 

也有其他狀態,可參考以下官網資訊

nginx #upstream_cache_status 

 

 

 

給 Mr. 沙先生一點建議

彙整

分類

展開全部 | 收合全部

License

訂閱 Mr. 沙先生 的文章

輸入你的 email 用於訂閱