不求人,在阿里雲上安一個nuget鏡像站,這樣就能愉快編程了。
主要是利用nginx 的反向代理+緩存功能+響應文本的替換
proxy_cache_path /data/nuget-cache levels=1:2 keys_zone=nuget-cache:20m max_size=10g inactive=168h;
server{
listen 80;
server_name XXXXX;
location /packages/{
proxy_ignore_headers Set-Cookie Cache-Control;
proxy_hide_header Cache-Control;
proxy_hide_header Set-Cookie;
proxy_pass http://az320820.vo.msecnd.net;
proxy_cache nuget-cache;
proxy_cache_valid 200 302 168h;
}
location /{
proxy_ignore_headers Set-Cookie Cache-Control;
proxy_hide_header Cache-Control;
proxy_hide_header Set-Cookie;
#proxy_set_header Accept-Encoding "";
proxy_pass http://www.nuget.org;
proxy_cache nuget-cache;
proxy_cache_valid 200 302 168h;
subs_filter www.nuget.org XXXXXX;
#subs_filter az320820.vo.msecnd.net nuget.kwok.io;
subs_filter_types *;
set $t $sent_http_location;
more_set_headers -s 302 'Location:http://XXXXX/ng.php?url=$uri';
}
}
核心代碼介紹
1.利用nginx 反向代理 將個人域名的請求都指向nuget.org
2.nginx 使用subs_filter模塊(需要安裝第三方模塊) 將響應請求內容中所有nuget.org文本替換為自己的域名
3.nuget里包 最終的下載地址是通過302調整到CDN上的,這里我沒有很好的辦法通過nginx配置緩存。采用的方式 再次302 到自己的動態網站上,用php語言處理傳入的內容,再次302到設定的網址,該網址可以緩存內容。
(nuget Api返回的下載包地址)http://XXXXX/api/v2/package/EntityFramework/6.1.3=>(原本302 到http://az320820.vo.msecnd.net/packages/entityframework.6.1.3.nupkg,這樣nginx就無法緩存了,我們通過配置302到其他地方)=>http:/XXXXXX/ng.php?url=/api/v2/package/EntityFramework/6.1.3=>http://XXXXXX/packages/entityframework.6.1.3.nupkg=》(反向代理,下載並緩存包)
4.ng.php代碼
<?php
$a=$_REQUEST['url'];
$p=strtolower(implode('.', array_slice(explode('/', $a),-2)).'.');
header("Location:http://XXXXX/packages/".$p.nupkg);
?>
5.問題 各個接口的緩存時間策略的優化,CDN服務地址是否會頻繁變動
本文參考
http://www.cnblogs.com/dudu/p/4597351.html @dudu