昨天尝试用nginx搭建nuget镜像服务器,镜像服务器需要两个功能:1)反向代理;2)内容缓存。

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

}
}

【参考资料】

Understanding the nginx proxy_cache_path directive

Nginx Caching

【相关链接】

nuget国内镜像的解决办法

最新文章

  1. 今天在看UWP蓝牙的例子
  2. Theano2.1.9-基础知识之条件
  3. JavaScript的理解记录(1)
  4. 深入对比数据科学工具箱:Python和R之争
  5. hdu 2065
  6. leetcode 118 Pascal's Triangle ----- java
  7. 【转】使用spring @Scheduled注解执行定时任务
  8. WINDOWS批处理命令使用大全
  9. Servlet实现文件的下载
  10. myeclipse 环境配置优化,不断跟新整理中
  11. MySQL、SQLServer2000(及SQLServer2005)和ORCALE三种数据库实现分页查询的方法
  12. AJax的异步请求
  13. 和团队齐头并进——敏捷软件开发的Scrum的学习
  14. 网站开发进阶(三)Windows NAT端口映射
  15. 模拟实现 DBUtils 工具 , 技术原理浅析
  16. 关于git的简单操作
  17. [C++]数据结构-排序:插入排序之直接插入排序
  18. Lua 中 pairs 和 ipairs 的区别
  19. 【Python】解析Python的缩进规则
  20. element-ui <el-input> +<el-tree>使用

热门文章

  1. 学习打造自己的DEBUG_NEW
  2. python计算机视觉——黑板客老师课程学习
  3. SCI写作经验交流,别人的经验借鉴下,很有用的!
  4. Spring 通过工厂配置Bean
  5. 禅道Linux一键安装版
  6. jQuery2
  7. AngularJS学习--- AngularJS中模板链接和图像 ng-src step6
  8. shell脚本实现数据库自动备份和删除备份
  9. 获取滚动条ScrollBar宽度
  10. windows2003 iis+dedecms 4.0701版本,登录后台显示空白