nuget國內鏡像的解決辦法

不求人,在阿里雲上安一個nuget鏡像站,這樣就能愉快編程了。php

 

主要是利用nginx 的反向代理+緩存功能+響應文本的替換html

 

proxy_cache_path /data/nuget-cache levels=1:2 keys_zone=nuget-cache:20m max_size=10g inactive=168h;nginx

 

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;api

}緩存

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';
}ide

}優化

 

核心代碼介紹網站

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

相關文章
相關標籤/搜索