Nginx反向代理和快取服務和手動清除快取模組purge的配置
阿新 • • 發佈:2019-01-05
proxy_set_header :將客戶端的資訊傳送給後端伺服器,客戶端的IP、host等資訊傳給後端伺服器,否則後端伺服器獲取到的將只是反代伺服器的資訊
proxy_pass:指定後端伺服器地址,可以為具體的域名網址,也可以為upstream指定的伺服器群集名稱
proxy_cache:指定需要使用的快取池,當然在使用之前必須使用proxy_cache_path定義一個快取池
proxy_temp_paht:不知道幹什麼用的,只知道配置的路徑要跟proxy_cache_path在同一個分割槽
proxy_cache_path:設定快取檔案存放的路徑,proxy_cache_path path levels=1:2 keys_zone=zone_name:500m inactive=100d max_size=100g;
proxy_cache_min_uses:
proxy_cache_valid:設定對不同返回狀態碼的URL設定不同的快取時間
proxy_cache_key:設定對快取檔案儲存的檔名
proxy_cache_purge:設定對某個快取的手動清除(非nginx自帶模組,需手動安裝配置)
安裝nginx的時候已經安裝了purge模組,如果第一次編譯nginx的時候沒有裝purge模組,則需要重新編譯,(記得將conf/nginx.conf及sbin/nginx先備份下,以防萬一),重新編譯好後不要執行make install,以防破壞現有的工作內容!!
以下是反代+快取的例項程式碼並逐行解釋
http{
..........
proxy_temp_path /www/proxy_image/proxy_temp_path;
proxy_cache_path /www/proxy_image/proxy_cache_path levels=1:2 keys_zone=image_cache:500m inactive=100d max_size=10g;
..............
server{
listen 80;
server_name image.test.com; //設定客戶端訪問的主機頭為http://image.test.com
location /
{
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr; //設定將客戶端資訊傳送至後端伺服器
proxy_pass http://image_r.test.com; //指定後端伺服器為http://image_r.test.com (由於後端伺服器只有一臺,故未使用upstream)
}
location ~ /purge(/.*) //配置purge模組用於手動清除快取
{
allow 192.168.40.4; //配置允許執行purge的IP地址,未被允許的地址執行purge則將跳轉403頁面,也可以設定一個IP段如192.168.1.1/24
deny all;
proxy_cache_purge image_cache $host$1$is_args$args; //配置清除image_cache這個快取池中的快取資料,$1匹配purge後的url欄位,其餘部分與proxy_cache_key所設定的相一致
}
location ~ .*\.(gif|jpg|png|bmp|swf)$ //配置對特殊檔案的處理
{
proxy_cache image_cache; //配置對特殊檔案使用快取池image_cache
proxy_cache_valid 200 304 12h; //配置對幾個特殊狀態碼的快取時間,未定義的狀態碼全部只快取1分鐘
proxy_cache_valid 301 302 1m;
proxy_cache_valid any 1m;
proxy_cache_key $host$uri$is_args$args; //配置快取檔案儲存時的檔名,這個必須要與proxy_cache_purge模組搭配
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr; //設定將客戶端資訊傳送至後端伺服器
proxy_pass http://image_r.test.com; //配置後端伺服器
}
}
...............
}
注意點:
1、一個server段內可以有N個location。但是!每個檔案訪問對location的匹配是有先後順序的!只要一旦匹配成功就馬上終止對其他location的匹配。所以在對不同檔案做不同的location處理的時候要搞清楚順序。以下是各種location的匹配順序:
(location =) > (location 完整路徑 >) >(location ^~ 路徑) >(location ~* 正則) >(location 路徑)
在本例中,之前將purge那段location放於最後面,導致測試清除快取的時候出現404頁面,原因是訪問的http://image.test.com/purge/*.*時先被 location ~ .*\.(gif|jpg|png|bmp|swf)$ 所匹配,而導致出現404頁面。