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

  • 相关阅读:
    HDU 5585 Numbers
    HDU 3308 LCIS
    POJ 2991 Crane
    POJ 1436 Horizontally Visible Segments
    POJ 3667 Hotel
    HaiHongOJ 1003 God Wang
    【SDOI 2008】 递归数列
    5月19日省中提高组题解
    【HDU 1588】 Gauss Fibonacci
    【POJ 3233】Matrix Power Series
  • 原文地址:https://www.cnblogs.com/pricks/p/3842674.html
Copyright © 2011-2022 走看看