zoukankan      html  css  js  c++  java
  • 用Nginx做静态文件的CDN

    这是上个月一次搭建多个静态文件节点的实践,转载自我的博客,欢迎交流。


    鉴于监管环境和网站速度之间的矛盾,目前的网络架构方式如下:1、web动态页面(含数据库)架设在位于美国西海岸的数据中心;2、静态文件,例如css、js、exe、图片存放在国内几台windows服务器上。
    如果你的网站是商用、盈利性的网站,而没有技术能力搭建CDN,请使用第三方CDN服务。

    存在的问题有:1、静态文件同步问题;2、缓存刷新问题。
    第一个问题使用nginx得到解决。使用proxy_store功能,在文件不存在的时候请求源服务器,并保存。文件存在时直接读取本机文件。
    squid等方案因为再学习一个新工具需要成本;而nginx的实际使用情况并不逊色于squid等软件。所以不予考虑。这就是所谓老大拍脑袋决定方案吧。
    第二个问题,参考第四届D2上口碑网分享的经验:CDN上静态文件不提供删除功能。其实也未尝不可。当然也可以使用相应nginx扩展接口甚至php文件来清除缓存,也不是很复杂。

    安装
    如果你的系统是linux的,可忽略第一步,看第二步:配置方式
    1、安装Nginx
    windows在生产环境安装nginx最好使用服务的方式。如果根据网上提供的instsrv.exe注册服务方案,具有若干缺陷。比如 nginx.exe作为主进程启动另一个进程,而instsrv.exe只能监控一个进程。这里推荐俄罗斯人写的一款小工具NG_SRVINST
    地址:http://ng_srvinst.att.kiev.ua/
    使用很简单,解压到任意文件夹后,修改ng_srv.xml内Nginx的路径,比如

    1. <service>     
    2. <id>nginx</id>     
    3.   <name>nginx</name>     
    4.   <description>nginx</description>     
    5.   <executable>E: ginx ginx.exe</executable>     
    6.   <logpath>E:wwwrootlogfiles</logpath>     
    7.   <logmode>roll</logmode>     
    8.   <depend></depend>     
    9.   <startargument>-p E: ginx</startargument>     
    10.   <stopargument>-p E: ginx -s stop</stopargument>     
    11. </service>  
    复制代码

    然后ng_srv.exe install就安装好了。2、配置方式proxy
    首先修改HOSTS内的域名指向源服务器的ip,然后,见配置文件。把wucha.sg替换为你的域名即可。(或者只修改proxy_pass http://源服务器的ip; 也是可以的)

    1. server {   
    2. server_name  wucha.sg;   
    3. root E:/wwwroot;   
    4. set $index 'index.html';   
    5. set $store_file $request_filename;   
    6. if ($uri ~ /$ ){   
    7.   set $store_file $request_filename$index;   
    8.   rewrite (.*) $1index.html last;   
    9. }   
    10. location / {   
    11.   root "E:/wwwroot";   
    12.   index index.html;   
    13.   proxy_store on;   
    14.   proxy_temp_path "E:/wwwroot";   
    15.   proxy_set_header Host wucha.sg;   
    16.   proxy_set_header X-Real-IP $remote_addr;   
    17.   if ( !-e $request_filename ) {   
    18.    proxy_pass http://wucha.sg;   
    19.   }   
    20. }   
    21. }   
    复制代码


    启动nginx服务,试试访问一个文件,然后看看proxy_temp_path下有没有生成文件。这一步我遇上了点问题,就是测试txt文件死活不生成。最后访问一个大于70KB的js生成了,再访问txt也生成了。
    要注意的是nginx服务的权限要有读写临时文件夹的权限,还有root和proxy_temp_path最好在同一个文件夹下(未考证,但是位于不同分区会导致错误。)
    如果你看到文件夹内一串数字,并且文件尺寸在不断在增长,那是nginx在下载文件时生成的临时文件。大功告成,可以用dnspod之类的服务来做简单cdn。要发布文件,只需上传到源服务器,即能在所有做了配置的服务器上访问。

    转自:http://bbs.phpchina.com/forum.php?mod=viewthread&tid=205046

  • 相关阅读:
    解决关于 在android studio 出现的 DELETE_FAILED_INTERNAL_ERROR Error while Installing APK 问题
    oracle 时间日期常用语句及函数
    微信小程序 网络请求之re.request 和那些坑
    微信小程序 网络请求之设置合法域名
    开发中常用js记录(三)
    oracle 锁表 and 解锁
    微信小程序 JS动态修改样式
    微信小程序 获得用户输入内容
    微信小程序 引用其他js里的方法
    微信JSAPI支付回调
  • 原文地址:https://www.cnblogs.com/pricks/p/3842674.html
Copyright © 2011-2022 走看看