昨天尝试用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国内镜像的解决办法

解决nginx反向代理缓存不起作用的问题的更多相关文章

  1. nginx反向代理+缓存开启+url重写+负载均衡(带健康探测)的部署记录

    在日常运维工作中,运维人员会时常使用到nginx的反向代理,负载均衡以及缓存等功能来优化web服务性能. 废话不多说,下面对测试环境下的nginx反向代理+缓存开启+url重写+负载均衡(带健康探测) ...

  2. nginx反向代理缓存服务器的构建

    一:代理服务可简单的分为正向代理和反向代理: 正向代理:用于代理内部网络对Internet的连接请求(如VPN/NAT),客户端指定代理服务器,并将本来要直接发送给目标Web服务器的HTTP请求先发送 ...

  3. 解决nginx反向代理webservice的soap:address location问题

    原文:https://blog.csdn.net/mn960mn/article/details/50716768 一:首先来发布一个web service package com.ws.servic ...

  4. nginx反向代理缓存配置

    关于nginx的反向代理缓存配置,用的最多的就是CDN公司,目前CDN公司用纯nginx做缓存的已经很少了,基本都用tnginx(阿里的).openresty:但是这两款软件都是基于nignx开发的, ...

  5. 解决Nginx反向代理不会自动对特殊字符进行编码的问题 如gitblit中的~波浪线

    问题起因是利用Nginx做反向代理的时候,需要访问如下链接http://192.168.14.141/iserver/services/3D-0524hd/rest/realspace/datas/0 ...

  6. 解决nginx反向代理Mixed Content和Blockable问题

    nginx配置https反向代理,按F12发现js等文件出现Mixed Content,Optionally-blockable 和 Blockable HTTPS 网页中加载的 HTTP 资源被称之 ...

  7. nginx反向代理的配置优化

    作者:守住每一天 blog:liuyu.blog.51cto.combbs:bbs.linuxtone.orgmsn:liuyubj520#hotmail.comemail:liuyu105#gmai ...

  8. Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解

    转载:http://freeloda.blog.51cto.com/2033581/1288553 大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负 ...

  9. Nginx反向代理、负载均衡、页面缓存、URL重写及读写分离详解

    大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负载均衡 六.Nginx之页面缓存 七.Nginx之URL重写 八.Nginx之读写分离 注,操作系统 ...

随机推荐

  1. WebService到底是什么?

    一.序言 大家或多或少都听过WebService(Web服务),有一段时间很多计算机期刊.书籍和网站都大肆的提及和宣传WebService技术,其中不乏很多吹嘘和做广告的成分.但是不得不承认的是Web ...

  2. LINQ to SQL快速上手 step by step

    Step1:建立数据库      在使用Linq to Sql前,我们要将相应的数据库建好.在这个Demo中,使用的数据库是SQL Server Express 2005.      我们首先建立一个 ...

  3. Changing SharePoint Default port ( 80 ) to another port ( 79 ).

      Introduction In this How-To I will change my port from 80 to 79, probably because I want to host s ...

  4. Linux_08------Linux的系统管理

    分钟,在随机延迟0-45分钟时间 * 使用nice命令指定默认优先级,使用run-parts脚本执行/etc/cron.daily目录中的所有可执行文件. * */

  5. UVa 458 - The Decoder

    https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=94&page=s ...

  6. PHP基于SOAP实现webservice

    简单对象访问协议(SOAP)是一种轻量的.简单的.基于 XML 的协议,它被设计成在 WEB 上交换结构化的和固化的信息. SOAP 可以和现存的许多因特网协议和格式结合使用,包括超文本传输协议( H ...

  7. SQL Server数据库表重置自增主键号(通常是指ID)

    执行 DBCC CHECKIDENT ('table_name', NORESEED) 以确定列中的当前最大值 然后使用 DBCC CHECKIDENT ('table_name', RESEED,n ...

  8. Oracle 11g AWR和ADDM性能报告

    一.自动工作负载库(Automatic Workload Repository,AWR) 自动工作负载库(Automatic Workload Repository,AWR)是在Oracle公司提供的 ...

  9. nested exception is com.mysql.jdbc.PacketTooBigException: Packet for query is too large (1044 > 1024

    HTTP Status 500 - type Exception report message description The server encountered an internal error ...

  10. Selenium2+python自动化30-引入unittest框架

    from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.com ...