nuget國內鏡像的解決辦法


不求人,在阿里雲上安一個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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM