21
May
2012

nginx反向代理实现cdn的几个例子解析

至于怎么安装nginx我不多说,大家看网上的资料应该就没问题了。

首先aaa.com是浏览者访问的域名,web.aaa.com:88是指被访问的真实网站所在域名。

1.来看看大多数情况:

server{
    listen          80;
    server_name   aaa.com;
    location / {
        proxy_pass              http://web.aaa.com:88;
        proxy_redirect          off;
        proxy_set_header        X-Real-IP       $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        }
}

这种情况的实用范围很广但也有它的局限性,一般用来建立镜像站点,当然这没有任何意义。

2.高级一点的,为什么说高级呢?因为网上这种方法介绍的很少:

 server{
    listen          80;
    server_name   aaa.com;
    location / {
    proxy_set_header   X-Real-IP   $remote_addr;
    proxy_set_header   X-Forwarded-For   $proxy_add_x_forwarded_for;
    proxy_set_header   Host aaa.com; #定义主机头,如果目标站点已经绑定供浏览的域名则使用$host
    proxy_pass         http://web.aaa.com:88; #被代理网站的IP地址
    proxy_set_header   Accept-Encoding "";
        }
}

这样设置与第一种有什么区别呢?第一种方法返回给后端服务器的是web.aaa.com的主机头地址,而这种方法返回给服务器的是aaa.com的主机头。都可以用来实现端口转换或web端口穿透。

3.假如我国外有一个网站ip:1.1.1.1用域名www.aaa.com访问,我在国内有一台服务器ip:2.2.2.2想用来缓存这个网站,加上智能dns实现简单的cdn效果如何设置呢?
首先设置智能dns国外线路解析到国外的网站ip:1.1.1.1,国内线路解析到国内缓存服务器ip:2.2.2.2,那么配置代码是:

 server{
    listen          80;
    server_name   www.aaa.com;
    location / {
    proxy_set_header   X-Real-IP $remote_addr;
    proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header   Host www.aaa.com; #定义主机头,如果目标站点已经绑定供浏览的域名则使用$host
    proxy_pass         http://1.1.1.1; #被代理网站的IP地址
    proxy_set_header   Accept-Encoding "";
        }
}

但以上配置还没开启缓存功能,以下是开缓存,在配置文件中加入如下所示的内容:

http {
 proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=STATIC:10m inactive=24h max_size=1g;
 #设置缓存目录,缓存周期,缓存大小等。
 server {
 location / {
 proxy_pass http://1.1.1.1; #被缓存服务器ip
 proxy_set_header Host $host; #定义主机头,可用实际网址替换$host
 proxy_cache STATIC;
 proxy_cache_valid 200 1d; #缓存状态200 时间1天
 proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
}
 }
}

完整的例子

proxy_cache_path /www/web/cache levels=1:2 keys_zone=STATIC:10m inactive=24h max_size=1g; 
  server{
    listen          80;
    server_name   www.aaa.com;
    location / {
    proxy_set_header   X-Real-IP $remote_addr;
    proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header   Host www.aaa.com;
    proxy_pass         http://1.1.1.1; #被代理网站的IP地址
    proxy_set_header   Accept-Encoding "";
    proxy_cache STATIC;
    proxy_cache_valid 200 1d; #缓存状态200 时间1天
    proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
               }
        }

扩展阅读:
nginx新开发的proxy_cache功能

  从nginx-0.7.44版开始,nginx支持了类似squid较为正规的cache功能,目前还处于开发阶段,支持相当有限,这个缓存是把链接用md5编码hash后保存,所以它可以支持任意链接,同时也支持404/301/302这样的非200状态。

  配置:

  首先配置一个cache空间:

  proxy_cache_path /path/to/cache levels=1:2 keys_zone=NAME:10m inactive=5m max_size=2m clean_time=1m;
  注意这个配置是在server标签外,levels指定该缓存空间有两层hash目录,第一层目录是1个字母,第二层为2个字母,保存的文件名就会类似/path/to/cache/c/29/b7f54b2df555-5555d382f4809d65029c;keys_zone为这个空间起个名字,10m指内存使用大小为10MB;inactive的5m指缓存默认时长5分钟;max_size的2m是指最大缓存空间;clean_time指定一分钟清理一次缓存(某些版本不适应)。

  location / {
 
  proxy_pass http://www.sudone.com/;
 
  proxy_cache NAME;#使用NAME这个keys_zone
 
  proxy_cache_valid 200 302 1h;#200和302状态码保存1小时
 
  proxy_cache_valid 301 1d;#301状态码保存一天
 
  proxy_cache_valid any 1m;#其它的保存一分钟
 
  }
上一篇:在Win8中默认通过桌面版ie10打开链接的方法 下一篇:Nofollow反向链接批量检测工具

评论列表:

发表评论: