利用Nginx的proxy_cache搭建缓存服务器一:
编译ngx_cache_purge

  • 1、Nginx 的 Proxy_cache 是根据 Key 值 md5 哈希存储缓存,支持任意的 Key,例如你可以根据” 域名、URI、参数” 组合成 key,也支持非 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
tar xzf nginx-1.10.3.tar.gz #根据上面查看到的nginx版本选择解压包wget http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz
tar zxvf ngx_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.3makemv /usr/local/nginx/sbin/nginx{,$(date +%m%d)}
cp objs/nginx /usr/local/nginx/sbin #oneinstack,其它的可以不用这个操作nginx -t
service nginx restart
  • 4、安装完成后,再次 nginx -V 你就可以看到 Nginx 已经成功编译进了 ngx_cache_purge 了。

二、利用 Nginx 的 proxy_cache 搭建缓存服务器二:
修改 Nginx 配置文件

  • 1、先找到你的 Nginx 配置文件:nginx.conf(路径一般是在 / usr/local/nginx/conf/nginx.conf),在配置文件 Http 中加入以下代码:(注意修改路径为你自己的路径)

proxy_connect_timeout 5;
proxy_read_timeout 60;
proxy_send_timeout 5;
proxy_buffer_size 16k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;
proxy_cache_path /data/wwwroot/pic.freehao123.com levels=1:2 keys_zone=cache_one:200m inactive=30d max_size=5g;
proxy_temp_path /data/wwwroot/pic.freehao123.com/temp;
  • 2、操作如下图:

3、然后在你的虚拟主机的 nginx.conf(路径一般是 / usr/local/nginx/conf/vhost/pic.freehao123.com.conf),在 server listen 80 和 listen 443 ssl http2 都加入下面命令:

location /{
proxy_pass https://www.freehao123.com;
proxy_redirect off;
proxy_set_header Host www.freehao123.com;
proxy_cache cache_one;
proxy_cache_valid 200 302 304 365d;
proxy_cache_valid 301 1d;
proxy_cache_valid any 1m;
add_header Images-Cache “$upstream_cache_status from $host”;
add_header Pragma public;
add_header Cache-Control “public, must-revalidate, proxy-revalidate”;
access_log off; log_not_found off; expires max;
}

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

nginx -t
service nginx restart

5、先执行检查 Nginx 配置是否正确,确认没有问题的就是重启 Nginx 了。

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

location /avatar{
proxy_pass http://cn.gravatar.com;
proxy_redirect off;
proxy_set_header Host cn.gravatar.com;
proxy_cache cache_one;
proxy_cache_valid 200 302 304 365d;
proxy_cache_valid 301 1d;
proxy_cache_valid any 1m;
add_header Images-Cache “$upstream_cache_status from $host”;
add_header Pragma public;
add_header Cache-Control “public, must-revalidate, proxy-revalidate”;
access_log off; log_not_found off; expires max;
}

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

8、这里再给出另一个 Nginx 缓存代码,实现效果和上面是一样的。

#先在Nginx配置中写入以下命令:
proxy_temp_file_write_size 128k;
proxy_temp_path /data/wwwroot/pic.ucblog.net/temp;
proxy_cache_path /data/wwwroot/pic.ucblog.net levels=1:2 keys_zone=cache_one:500m inactive=7d max_size=5g;#再在虚拟主机的Nginx配置中写入以下命令:
先在server listen 80 和listen 443代码前面加入:
upstream gravatar {server secure.gravatar.com:443;
}
#再在server listen 80 和listen 443 里面加入:
location / {proxy_pass_header Server;proxy_set_header Host cn.gravatar.com;proxy_set_header Accept-Encoding ”;proxy_redirect off;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Scheme $scheme;proxy_pass https://gravatar;proxy_cache cache_one;proxy_cache_valid 200 304 365d;proxy_cache_key $host$uri$is_args$args;expires max;
}

9、在 VPS 主机上,你可以看到 proxy_cache 生成的哈希文件,就表示缓存已经成功了。

三、利用 Nginx 的 proxy_store 搭建镜像服务器:
修改 Nginx 配置方法

1、Nginx 的 proxy_store 作用是直接把静态文件在本地硬盘创建并读取,类似于七牛或者又拍这样的镜像 CDN 功能,首次访问会自动获取源站的静态图片等文件,之后的访问就是直接从 CDN 服务器读取,加快了速度。2、直接修改 Nginx 的虚拟主机配置文件(这里以 img.freehao123.com.conf 为演示),加入以下代码:

location / {
expires 3d;
proxy_set_header Accept-Encoding ”;
root /data/wwwroot/img.freehao123.com;
proxy_store on;
proxy_store_access user:rw group:rw all:rw;
proxy_temp_path /data/wwwroot/img.freehao123.com/temp;
if ( !-e $request_filename) {
proxy_pass https://www.freehao123.com;
}
}

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

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

5、这里还有一个使用,效果和上面是一样的,记得替换好路径,代码如下:

upstream http_tornado {server www.freehao123.com:443;
}server {# 省略其他配置location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|html|htm|css)$ {root /opt/data/product/blog/cache;proxy_store on;proxy_store_access user:rw group:rw all:rw;proxy_temp_path /opt/data/product/blog/cache;if ( !-e $request_filename) {proxy_pass  http://http_tornado;}}
}

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

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

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

五、搭建镜像 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: sogou spider
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_referers none blocked freehao123.com *.freehao123.com *.google.cn *.google.com *.google.com.hk image.baidu.com *.baidu.com;
if ($invalid_referer) {
rewrite ^/ https://www.freehao123.com;
#return 403;
}
}
  • 3、第三,设置好 Nginx 默认图片。这个主要是针对缓存 Gravatar 头像的,当源站服务器不存在某一个图片或者文件时,我们可以给 Nginx 设置一个默认的图片或者链接,这样缓存看起来就完美了。

location /avatar {try_files $uri /avatar/set-avatar.png;}#或者使用:
location /{try_files $uri /set-avatar.png;}
  • 4、效果见下图:


文章出自:《免费资源部落》    部分内容参考张戈博客\cheyo.net\ttt.tt版权所有。

链接:

https://www.freehao123.com/nginx-cdn/

关注我!Java从此不迷路!

【玩点不一样】你用别人CDN资源多了,有没有想过自己也搭建一个CDN玩玩?相关推荐

  1. 怎样用CDN防篡改、抗攻击、控内容?一份CDN安全指南请查收

    5大安全产品全面升级,抢先了解:https://developer.aliyun.com/topic/securityapril 预约观看发布会:https://yq.aliyun.com/live/ ...

  2. 免费CDN资源白嫖手把手教学 (加速乐使用教程,腾讯云CDN使用教程)

    「前言」 网站加载速度优化过程中,不可避免的会用上 CDN 来加速资源的请求速度.但是市面上的 CDN 资源一般都是要收费的,而且价格还不便宜,对于小公司站长来讲,这将是一笔不小的开销.不过还是有一些 ...

  3. halo博客:如何用又拍云搭建加速CDN

    hey,这里是梦中小城的小站,欢迎阅读(•͈⌔•͈⑅)♡ 前期准备 网站因没有部署CDN被DDOS过(比如本人) 了解CDN是什么?CDN介绍(点击阅读)按照我的理解就是将服务器IP给另个服务商提供的 ...

  4. 奇安信cdn配置教程_PicGo+jsDelivr+GitHub搭建免费cdn加速的图床

    PicGo+jsDelivr+GitHub搭建免费cdn加速图床.下面是我写的教程. https://www.sakura521.cn/2020/03/13/picgocdn.html​www.sak ...

  5. axios 注册拦截器 cdn引用_PicGo+jsDelivr+GitHub搭建免费cdn加速的图床

    PicGo+jsDelivr+GitHub搭建免费cdn加速图床.下面是我写的教程. https://www.sakura521.cn/2020/03/13/picgocdn.html​www.sak ...

  6. 移动和云环境下的报文传输流程--理解DNS解析、CDN资源下发、公网传输流程、数据中心网络

    DNS解析 手机打开app时,首先需要解析网站的域名. 在手机运营商所在的互联网区域中,有一个本地DNS,手机向本地DNS请求解析DNS.如果本地DNS有缓存,则直接返回:如果本地DNS没有缓存,则递 ...

  7. 通过AccessKey调用阿里云CDN接口刷新CDN资源案例

    通过AccessKey远程调用阿里云CDN接口,快速实现自动化集成部署. CdnService.java package com.nfky.cdn; import com.aliyuncs.Defau ...

  8. 如何搭建自己CDN服务器

    转自: https://blog.csdn.net/qq_35461287/article/details/55050583 如何搭建自己CDN服务器 目前在免费CDN市场上,360因为"免 ...

  9. 如何使用 Backblaze 和 Cloudflare 搭建免费 CDN - 让白-piao进行到底

    Backblaze 和 Cloudflare 之间的合作伙伴关系可以将内容存储在 Backblaze 的 B2 存储服务上,并根据需要自动将其馈送到 Cloudflare 的 CDN.本文通过使用 C ...

最新文章

  1. arcgis for android离线编辑,ArcGIS for Android离线数据编辑实现原理
  2. core data 学习笔记
  3. AndroidStudio使用第三方jar包报错(Error: duplicate files during packaging of APK)
  4. 史上赚钱最快的十位商业奇才,他1年赚10亿美金!
  5. OC Foundation框架—字符串
  6. 《信息检索》第8讲 毕业论文学习指导(资源及预习材料)
  7. HALCON关于显示的函数与介绍(持续更新)
  8. ArrayList clone()– ArrayList深拷贝和浅拷贝
  9. V$LICENSE表结构
  10. 【hadoop】19.MapReduce-手机流量统计
  11. 認識新一代標準色域Rec.BT.2020
  12. android ListView的怪异现象
  13. 如何做IT项目PoC测试
  14. cursor android,Android Cursor用法
  15. Failed opening .rdb for saving: Permission denied
  16. 高通按键驱动(gpio) + 耳机插入检测
  17. 网易杭研 java 校招_09网易杭研校园招聘面试题
  18. interProScan的使用
  19. 树莓派触摸屏翻转显示以及触摸翻转
  20. 【css】解决z-index失效或者不起作用

热门文章

  1. html怎么加漂浮物,仿天涯底部固定漂浮导航
  2. 哪家建站系统的模板比较好?
  3. 短信发送验证码实现验证
  4. Appium真机运行测试用例讲解
  5. Java Lambda 表达式-Steam之两个list间交集、并集、差集
  6. Java8 Stream 分页-多字段排序-筛选
  7. PyQt5高级界面控件之QTableWidget(四)
  8. Hisi平台CCM调试-细调
  9. @Autowired注入、构造器注入、setter注入的使用方式?区别?
  10. Identifying Patch Correctness in Test-Based Program Repair--基于测试的程序修复中补丁正确性的识别