nginx实现cdn加速的简单教程

摘要:nginx实现cdn加速的简单教程...

作者:LoveCode标签:nginx,cdn,cdn加速

linux利用nginx可以方便的实现CDN网站加速效果,不过对于没什么流量的小网站来说,实在是没什么用处。除非你是土豪。需要CDN加速的可以参考。

首先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.zxsdw.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;#其它的保存一分钟
}
CopyRight © 2017 荒山本的官方网站 粤ICP备16049175号 All Right Service 网站地图(xml) 网站地图(html)