详解用Nginx搭建CDN服务器方法

详解用Nginx搭建CDN服务器方法,第1张

详解用Nginx搭建CDN服务器方法(图文)

本文主要详细介绍了用Nginx搭建CDN服务器的方法,通过实例代码详细介绍,对大家的学习或工作有一定的参考价值。有需要的朋友下面跟边肖学习。

用Nginx的proxy_cache构建缓存服务器I:编译ngx_cache_purge

1.Nginx的Proxy_cache根据键值md5hash进行存储和缓存,支持任意键。比如可以根据“域名、URI、参数”组合密钥,还支持非200状态码,比如404/302等。

2.要利用Nginx的Proxy_cache,需要在Nginx中编译成ngx_cache_purge模块,执行:nginx-V,看看是否有ngx_cache_purge这个词。如果没有,就需要手动编译。
Nginx构建CDN并手动编译


3.这里用Oneinstack编译ngx_cache_purge模块作为 *** 作演示。如果你借鉴其他的LNMP包,基本流程也差不多。该命令如下所示:

cd/root/oneinstack/src#进入安装包目录 nginx-V tarxzfnginx-1.10.3.tar.gz#根据上面查看到的nginx版本选择解压包 wgethttp://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz tarzxvfngx_cache_purge-2.3.tar.gz cd/root/oneinstack/src/nginx-1.10.3 #下面的./configure后加的参数,你可以直接复制刚刚用nginx-V得到的参数,然后在最后加上–add-module=../ngx_cache_purge-2.3即可,参考: ./configure–prefix=/usr/local/nginx–user=www–group=www–with-http_stub_status_module–with-http_v2_module–with-http_ssl_module–with-http_gzip_static_module–with-http_realip_module–with-http_flv_module–with-http_mp4_module–with-openssl=../openssl-1.0.2k–with-pcre=../pcre-8.39–with-pcre-jit–with-ld-opt=-ljemalloc–add-module=../ngx_cache_purge-2.3 make mv/usr/local/nginx/sbin/nginx{,$(date+%m%d)} cpobjs/nginx/usr/local/nginx/sbin#oneinstack,其它的可以不用这个 *** 作 nginx-t servicenginxrestart

4.安装完成后,再次Nginx-V你可以看到Nginx已经成功编译成ngx_cache_purge。

二。使用Nginx的proxy_cacheII构建一个缓存服务器。修改Nginx配置文件

1.首先找到你的Nginx配置文件:nginx.conf(路径一般在/usr/local/Nginx/conf/Nginx.conf),在配置文件Http中添加以下代码:(注意要把路径修改成自己的路径)

proxy_connect_timeout5; proxy_read_timeout60; proxy_send_timeout5; proxy_buffer_size16k; proxy_buffers464k; proxy_busy_buffers_size128k; proxy_temp_file_write_size128k; proxy_cache_path/data/wwwroot/pic.freehao123.comlevels=1:2keys_zone=cache_one:200minactive=30dmax_size=5g; proxy_temp_path/data/wwwroot/pic.freehao123.com/temp;

2. *** 作如下:

3.然后,在虚拟主机的nginx.conf(路径通常是/usr/local/nginx/conf/vhost/pic.freeHao123.com.conf)中,将以下命令添加到服务器listen80和listen443sllhttp2:

location/{ proxy_passhttps://www.freehao123.com; proxy_redirectoff; proxy_set_headerHostwww.freehao123.com; proxy_cachecache_one; proxy_cache_valid200302304365d; proxy_cache_valid3011d; proxy_cache_validany1m; add_headerImages-Cache“$upstream_cache_statusfrom$host”; add_headerPragmapublic; add_headerCache-Control“public,must-revalidate,proxy-revalidate”; access_logoff;log_not_foundoff;expiresmax; }

4.保存并重新上传配置文件,然后执行:

nginx-t servicenginxrestart

5.先检查Nginx配置是否正确,没有问题就重启Nginx。

6.如果你想缓存gravatar头像,那么代码是:

location/avatar{ proxy_passhttp://cn.gravatar.com; proxy_redirectoff; proxy_set_headerHostcn.gravatar.com; proxy_cachecache_one; proxy_cache_valid200302304365d; proxy_cache_valid3011d; proxy_cache_validany1m; add_headerImages-Cache“$upstream_cache_statusfrom$host”; add_headerPragmapublic; add_headerCache-Control“public,must-revalidate,proxy-revalidate”; access_logoff;log_not_foundoff;expiresmax; }

7.现在打开你的二级域名:pic.freehao123.com,你可以看到图片已经被正确缓存。

8.下面是另一段Nginx缓存代码,实现效果同上。

#先在Nginx配置中写入以下命令: proxy_temp_file_write_size128k; proxy_temp_path/data/wwwroot/pic.ucblog.net/temp; proxy_cache_path/data/wwwroot/pic.ucblog.netlevels=1:2keys_zone=cache_one:500minactive=7dmax_size=5g; #再在虚拟主机的Nginx配置中写入以下命令: 先在serverlisten80和listen443代码前面加入: upstreamgravatar{ serversecure.gravatar.com:443; } #再在serverlisten80和listen443里面加入: location/{ proxy_pass_headerServer; proxy_set_headerHostcn.gravatar.com; proxy_set_headerAccept-Encoding”; proxy_redirectoff; proxy_set_headerX-Real-IP$remote_addr; proxy_set_headerX-Scheme$scheme; proxy_passhttps://gravatar; proxy_cachecache_one; proxy_cache_valid200304365d; proxy_cache_key$host$uri$is_args$args; expiresmax; }

9.在VPS主机上,可以看到proxy_cache生成的哈希文件,这意味着缓存已经成功。

三。使用Nginx的proxy_store构建镜像服务器:修改Nginx的配置方法

1.Nginx的proxy_store的功能是直接在本地硬盘上创建和读取静态文件,类似于七牛或另拍之类的镜像CDN功能。第一次访问会自动获取源站的静态图片等文件,后续访问直接从CDN服务器读取,加快了速度。

2、直接修改Nginx的虚拟主机配置文件(这里以img.freehao123.com.conf为演示),加入以下代码:2.直接修改Nginx的虚拟主机配置文件(这里以img.freehao123.com.conf为例演示),添加如下代码:

location/{ expires3d; proxy_set_headerAccept-Encoding”; root/data/wwwroot/img.freehao123.com; proxy_storeon; proxy_store_accessuser:rwgroup:rwall:rw; proxy_temp_path/data/wwwroot/img.freehao123.com/temp; if(!-e$request_filename){ proxy_passhttps://www.freehao123.com; } }

3、再次保存配置上传,然后重启Nginx。你可以看到img.freehao123.com请求的图片等静态文件已经成功从源站中获得到了。3.再次保存配置上传,然后重启Nginx。您可以看到,img.freehao123.com请求的图片等静态文件已从源站成功获取。

4.在VPS主机上的存储目录中,还可以看到proxy_store已经完整保存了图片等静态文件的目录,相当于一个网站的镜像存储CDN。

5.这里还有一个用途。效果同上。记得替换路径。代码如下:

upstreamhttp_tornado{ serverwww.freehao123.com:443; } server{ #省略其他配置 location~.*\.(gif|jpg|jpeg|png|bmp|swf|js|html|htm|css)${ root/opt/data/product/blog/cache; proxy_storeon; proxy_store_accessuser:rwgroup:rwall:rw; proxy_temp_path/opt/data/product/blog/cache; if(!-e$request_filename){ proxy_passhttp://http_tornado; } } }

四。Nginx的proxy_store和proxy_cache有什么区别?

1.镜像和缓存的区别。从上面的介绍我们也可以看出,proxy_store相当于镜像一个网站,图片等静态文件直接从CDN服务器上二次读取,大大减轻了源站的负担。Proxy_cache相当于cache,即把请求生成为一个Key,可以加速二次访问。


2.proxy_store适合静态,proxy_cache适合动态。Proxy_store是将图片完全保存在CDN服务器上,所以更适合图片的CDN加速,而proxy_cache是缓存生成的关键,更适合动态网站加速,可以用于负载均衡,减轻服务器负担。

五、设置镜像CDN服务器后怎么办?

1.第一,由于搭建镜像CDN服务器完全复制源站的文件和URL,为了避免被搜索引擎误认为复制重复站,我们可以在CDN站中添加Robots.txt,防止被搜索引擎收录。命令如下(图片允许,其他不允许抓取):

User-agent:Baiduspider Allow:/wp-content/uploads/*.jpg$ Allow:/wp-content/uploads/*.png$ Allow:/wp-content/uploads/*.gif$ Disallow:/ User-agent:360Spider Allow:/wp-content/uploads/*.jpg$ Allow:/wp-content/uploads/*.png$ Allow:/wp-content/uploads/*.gif$ Disallow:/ User-agent:Baiduspider-image Allow:/wp-content/uploads/*.jpg$ Allow:/wp-content/uploads/*.png$ Allow:/wp-content/uploads/*.gif$ Disallow:/ User-agent:360Spider-Image Allow:/wp-content/uploads/*.jpg$ Allow:/wp-content/uploads/*.png$ Allow:/wp-content/uploads/*.gif$ Disallow:/ User-agent:Sosospider Allow:/wp-content/uploads/*.jpg$ Allow:/wp-content/uploads/*.png$ Allow:/wp-content/uploads/*.gif$ Disallow:/ User-agent:sogouspider Allow:/wp-content/uploads/*.jpg$ Allow:/wp-content/uploads/*.png$ Allow:/wp-content/uploads/*.gif$ Disallow:/ User-agent:YodaoBot Allow:/wp-content/uploads/*.jpg$ Allow:/wp-content/uploads/*.png$ Allow:/wp-content/uploads/*.gif$ Disallow:/ User-agent:Googlebot Allow:/wp-content/uploads/*.jpg$ Allow:/wp-content/uploads/*.png$ Allow:/wp-content/uploads/*.gif$ Disallow:/ User-agent:Bingbot Allow:/wp-content/uploads/*.jpg$ Allow:/wp-content/uploads/*.png$ Allow:/wp-content/uploads/*.gif$ Disallow:/ User-agent:Slurp Allow:/wp-content/uploads/*.jpg$ Allow:/wp-content/uploads/*.png$ Allow:/wp-content/uploads/*.gif$ Disallow:/ User-agent:MSNBot Allow:/wp-content/uploads/*.jpg$ Allow:/wp-content/uploads/*.png$ Allow:/wp-content/uploads/*.gif$ Disallow:/ User-agent:googlebot-image Allow:/wp-content/uploads/*.jpg$ Allow:/wp-content/uploads/*.png$ Allow:/wp-content/uploads/*.gif$ Disallow:/ User-agent:googlebot-mobile Allow:/wp-content/uploads/*.jpg$ Allow:/wp-content/uploads/*.png$ Allow:/wp-content/uploads/*.gif$ Disallow:/ User-agent:yahoo-blogs/v3.9 Allow:/wp-content/uploads/*.jpg$ Allow:/wp-content/uploads/*.png$ Allow:/wp-content/uploads/*.gif$ Disallow:/ User-agent:psbot Allow:/wp-content/uploads/*.jpg$ Allow:/wp-content/uploads/*.png$ Allow:/wp-content/uploads/*.gif$ Disallow:/ User-agent:* Disallow:/

2.第二,做好Nginx防盗链。如果你的CDN服务器流量不够,建议做好防盗链措施,同时也能帮你减轻服务器负担。将以下代码添加到虚拟主机配置文件中:

location~.*\.(gif|jpg|jpeg|png|bmp|swf)$ { valid_referersnoneblockedfreehao123.com*.freehao123.com*.google.cn*.google.com*.google.com.hkimage.baidu.com*.baidu.com; if($invalid_referer){ rewrite^/https://www.freehao123.com; #return403; } }

3.第三,设置Nginx的默认图像。这主要是为了缓存Gravatar头像。当某个图片或文件在源服务器上不存在时,我们可以为Nginx设置一个默认的图片或链接,这样缓存看起来就很完美了。

location/avatar{ try_files$uri/avatar/set-avatar.png; } #或者使用: location/{ try_files$uri/set-avatar.png; }

4.效果见下图:

这篇关于如何用Nginx构建CDN服务器的详细文章到此结束。关于用Nginx构建CDN服务器的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望大家以后能多多支持我们!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/zz/774463.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-03
下一篇 2022-05-03

发表评论

登录后才能评论

评论列表(0条)

保存