nginx反向代理快取不起作用的問題
阿新 • • 發佈:2019-01-05
用nginx做反向代理,配置非常簡單,只需在/etc/nginx/nginx.conf中新增一個包含proxy_pass的server設定:
server { listen 80; listen [::]:80; server_name 映象伺服器主機名; location / { proxy_pass http://www.nuget.org; } }
而新增快取功能,配置稍微複雜些。
首先要建立一個用於存放快取檔案的資料夾,比如這裡用 /data/nuget-cache 。
mkdir /data/nuget-cache
然後在nginx.conf的http設定部分新增proxy_cache_path設定:
proxy_cache_path /data/nuget-cache levels=1:2 keys_zone=nuget-cache:20m max_size=50g inactive=168h;
* keys_zone指的是快取空間名稱。
* max_size指的是快取檔案可以佔用的最大空間。
* inactive指的是如果一個快取檔案多長時間不被訪問,就會被刪除。
接著在server設定部分新增proxy_cache與proxy_cache_valid設定:
server { listen 80; listen [::]:80; server_name 映象伺服器主機名; location / { proxy_pass http://www.nuget.org; proxy_cache nuget-cache; proxy_cache_valid 168h;} }
* proxy_cache設定的就是proxy_cache_path中keys_zone的值。
* proxy_cache_valid設定的是快取過期時間,比如這裡168小時過期。
這樣設定後執行nginx,發現只有少部分內容被快取,大部分內容不能被快取,比如下面的URL的響應內容就不能被快取:
http://www.myget.org/F/aspnetvnext/api/v2/FindPackagesById%28%29?id=%27System.Linq%27
檢視http響應頭(http headers),發現了下面2個http header:
Cache-Control: private Set-Cookie: ai_session=ad829b6c509946098fa7f8e32fada661|2015-06-24T03:52:38.2032109+00:00|2015-06-24T03:52:38.4219541 +00:00; expires=Wed, 24-Jun-2015 04:22:38 GMT; path=/
問題就是它們引起的,需要在nginx中通過proxy_ignore_headers設定忽略它們,設定方法如下:
server {
listen 80;
listen [::]:80;
server_name 映象伺服器主機名;
location / {
proxy_pass http://www.nuget.org;
proxy_cache nuget-cache;
proxy_cache_valid 168h;
proxy_ignore_headers Set-Cookie Cache-Control;
proxy_hide_header Cache-Control;
proxy_hide_header Set-Cookie;
}
}