V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
如果你希望学习 CDN 相关知识,那么建议你可以遍历以下软件的说明文档。
NGINX
cURL
Andy1999
V2EX  ›  CDN

自建了一些 CDN 节点,特地来分享一下

  •  
  •   Andy1999 · 2015-12-19 16:03:39 +08:00 via iPhone · 7802 次点击
    这是一个创建于 3260 天前的主题,其中的信息可能已经有所发展或是发生改变。
    欲想组建自己的 CDN 节点,需要以下东西:
    1.服务器( vps )
    2.Nginx
    3.钱( x
    服务器都是 ss 服务器因此对大陆地区速度不错
    我选择了这些服务器 SLHK SLJP IDCFJP VultrJP ConoHaSG EnzuUS-Los DOUS-Sfo
    服务端的配置为改写的 lnmp 一键包去除 MySQL 和 PHP 部分,配上 Nginx 的关键字替换和 purge 模块实现。
    目前已经能够远程刷新 Cache 但是不能批量提交,要一个节点一个节点清理掉比较复杂。
    能查看当前页面的状态,利用 Nginx 自带的信息可以告诉你这个文件是 HIT 还是 MISS 甚至是 ByPASS 这类。
    参考 URL
    http://www.nnya.cat/images/2015/12/07/b0c282068e6494bfbc26db76e79d6df9.jpg

    不知道怎么实现$url?$key 这类方案来消除缓存。如果大家有什么好的建议 /意见都请提出来。
    45 条回复    2015-12-20 12:47:23 +08:00
    tms
        1
    tms  
       2015-12-19 16:18:16 +08:00
    写个集中控制界面。带统计功能就完美了。
    Andy1999
        2
    Andy1999  
    OP
       2015-12-19 16:21:33 +08:00
    @tms Nginx 查了很多资料,没找到有统计功能的
    估计是分析 access log 来生成?
    cevincheung
        3
    cevincheung  
       2015-12-19 16:24:21 +08:00
    @Andy1999 flumeng 采集日志
    Andy1999
        4
    Andy1999  
    OP
       2015-12-19 16:26:07 +08:00
    @cevincheung 还是需要第三方软件来的咯。。。 VPS 压力太大了吧
    plqws
        5
    plqws  
       2015-12-19 16:26:30 +08:00
    感觉这些机房线路的速度并不理想…上海电信用户如是说道
    Andy1999
        6
    Andy1999  
    OP
       2015-12-19 16:29:29 +08:00
    @plqws

    看看是不是 DNS 解析到北美去了
    boter
        7
    boter  
       2015-12-19 16:30:16 +08:00 via iPhone
    话说 andy 是高中生么,:)
    Andy1999
        8
    Andy1999  
    OP
       2015-12-19 16:31:36 +08:00
    @boter 是的
    qiuai
        9
    qiuai  
       2015-12-19 16:33:41 +08:00
    山东联通,访问到的 IP 是 SLHK.
    boter
        10
    boter  
       2015-12-19 16:36:05 +08:00 via iPhone
    @Andy1999 有时间倒饬真不错,我们上高中时直接作为囚犯围起来了
    Andy1999
        11
    Andy1999  
    OP
       2015-12-19 16:46:27 +08:00
    @boter 也没有什么时间。。。基本都是抽空弄的
    GPU
        12
    GPU  
       2015-12-19 16:50:56 +08:00
    图片挂了
    Andy1999
        13
    Andy1999  
    OP
       2015-12-19 16:51:23 +08:00
    @GPU 能给一下截图吗
    GPU
        14
    GPU  
       2015-12-19 16:52:03 +08:00
    103.192.177.27
    shyling
        15
    shyling  
       2015-12-19 16:53:28 +08:00 via iPad
    if ( $args = "key") {
    ngx_purge......
    or
    rewrite /purge/$uri;
    }

    另外图片 404
    GPU
        16
    GPU  
       2015-12-19 16:55:16 +08:00
    manhere
        17
    manhere  
       2015-12-19 16:56:27 +08:00 via iPhone
    何不搞搞 apache traffic server 试试?
    tms
        18
    tms  
       2015-12-19 16:56:49 +08:00
    @Andy1999 反正统计是异步的,压力不是很大。搞个中心服务器接收存储统计数据和分发 purge 指令。
    Andy1999
        19
    Andy1999  
    OP
       2015-12-19 17:27:10 +08:00
    @manhere CDN 不应该就是用 Nginx/Squid 的吗
    @tms 好 我试试看
    @shyling 谢谢
    @GPU hostus 被 D=-=
    ryd994
        20
    ryd994  
       2015-12-19 17:45:48 +08:00 via Android
    @shyling if is evil 没有绝对必要不要用
    @Andy1999 proxy_cache_key 就好了,如果已知无法缓存的,用 proxy_no_cache 和 proxy_cache_bypass
    另外请教 idcf 怎么买?电话验证怎么过?
    49
        21
    49  
       2015-12-19 17:51:49 +08:00
    感觉这些线路也很一般啊 →_→ 国外不考虑抽风因素喵_(:3 」∠)_
    Azure A1 中国做 CDN 应该是最划算的吧, 100Mbps 带宽, 1T 流量。\ (´ ・ω・`)/
    Andy1999
        22
    Andy1999  
    OP
       2015-12-19 17:51:57 +08:00   ❤️ 1
    @ryd994 用日本人的身份买
    Andy1999
        23
    Andy1999  
    OP
       2015-12-19 17:52:21 +08:00
    @49 买不起 穷
    ryd994
        24
    ryd994  
       2015-12-19 18:21:12 +08:00 via Android
    @Andy1999 果然还是要有个日本朋友么=、=
    Andy1999
        25
    Andy1999  
    OP
       2015-12-19 18:22:12 +08:00
    @ryd994 在日本也行
    shyling
        26
    shyling  
       2015-12-19 18:27:08 +08:00
    @ryd994 本来想说自己写 nginx 模块实现,想了想算了= =,用 nginx.conf 基本的语句没想到其他方法
    ryd994
        27
    ryd994  
       2015-12-19 18:29:08 +08:00 via Android
    @shyling 多读文档
    shyling
        28
    shyling  
       2015-12-19 18:53:15 +08:00
    @ryd994 你可以直接说啊?
    ryd994
        29
    ryd994  
       2015-12-19 19:00:32 +08:00
    @shyling 我说过了啊…………看上面
    proxy_cache_key 就好了,如果已知无法缓存的,用 proxy_no_cache 和 proxy_cache_bypass
    shyling
        30
    shyling  
       2015-12-19 19:14:14 +08:00
    @ryd994 .....我说的是最后一个啊= =,命令式清除缓存
    ryd994
        31
    ryd994  
       2015-12-19 19:24:05 +08:00
    @shyling 抱歉看错了,那样确实没什么好办法
    chinabrowser
        32
    chinabrowser  
       2015-12-19 21:19:33 +08:00
    我这 ownCloud 的 CDN 就用了三个
    IDCF+SL JP+ConoHa SG
    能保证我们这个地区看在线 1080P 流畅
    chinabrowser
        33
    chinabrowser  
       2015-12-19 21:20:50 +08:00
    @chinabrowser 准确的说也不是 CDN 就是用 iptables 转发了下 80 和 443
    反正都是动态页面 弄 nginx 反而浪费 U
    a1058021348
        34
    a1058021348  
       2015-12-19 21:29:36 +08:00
    默默的歪楼。。
    记得你以前有 ss 的网站。。。或者相关的群。。。?方便说么。。想用下你们家的

    a1058021348##gmail.com
    Andy1999
        35
    Andy1999  
    OP
       2015-12-19 21:54:28 +08:00 via iPhone
    Showfom
        36
    Showfom  
       2015-12-19 22:01:56 +08:00
    @chinabrowser 静态页面缓存下来啊,不然你 CDN 的意义何在?
    Andy1999
        37
    Andy1999  
    OP
       2015-12-19 22:20:24 +08:00 via iPhone
    @Showfom 缓存下来就无视 cookies 啦
    wangluowangwang
        38
    wangluowangwang  
       2015-12-19 23:09:05 +08:00 via Android
    没 bgp 多线路的中间下载节点。没有的话就得考虑源站到所有加速服务器之间的连接性能。


    cdn 是庞大的投资。
    Andy1999
        39
    Andy1999  
    OP
       2015-12-20 00:03:02 +08:00 via iPhone
    @wangluowangwang BGP 在上海宜山机房托管了 1U 无线+MLPShinet
    不过就靠这个也没多大用 我只想做海外加速
    iCodex
        40
    iCodex  
       2015-12-20 00:44:24 +08:00
    为何不用 varnish 。。。
    Andy1999
        41
    Andy1999  
    OP
       2015-12-20 00:59:28 +08:00 via iPhone
    @iCodex 不会玩 有参考文档吗
    Daniel65536
        42
    Daniel65536  
       2015-12-20 01:23:10 +08:00   ❤️ 1
    > 目前已经能够远程刷新 Cache 但是不能批量提交,要一个节点一个节点清理掉比较复杂。
    用 post_action 可以解决问题, post_action 可以让你的 nginx 服务器在完成了某个请求后向某个地址发送 GET 或者 POST ,你可以配置 CDN 的某核心主机在你远程访问了 purge 之后代替你向其他节点发送同样的请求。

    比较奇怪的是 post_action 根本没法在 nginx.org 的文档里找到……但是这个功能确实又存在……

    用法大概是:
    location / {
    expires 1d;
    try_files $uri $uri/ =404;
    post_action @tracker;
    }

    location @tracker {
    internal;
    proxy_method GET;
    proxy_pass http://example.com;
    proxy_pass_request_headers off;
    proxy_pass_request_body off;
    }
    这样子。

    我目前是用这个来给 Google Analytics 发信息,从后台做统计……
    akw2312
        43
    akw2312  
       2015-12-20 04:11:08 +08:00 via Android
    @ryd994 idcf 電話認證 中國電話只能人工
    日本電話和 台灣固話 也可以直接過
    (但是台灣手機不行 我也是傻了…我懷疑他的系統根本沒有對接好………)
    喔另外一個電話可以驗證多次
    ryd994
        44
    ryd994  
       2015-12-20 09:17:34 +08:00   ❤️ 1
    @Daniel65536 关于 post_action , Maxim 的原话是“故意没写文档”
    因为这个选项的各种副作用太复杂,不了解 nginx 内部的人乱用很有可能会有不希望的结果。
    你这个用法就属于不建议的用法。因为(至少在上一个问类似问题的人的时候) post_action 的执行是 blocking 的,所以在这段请求的时间里,这个 worker 进程是卡死的。 nginx 现在引入了 multi-thread ,所以这个问题可能已经不是很严重了。
    xiaodaigou
        45
    xiaodaigou  
       2015-12-20 12:47:23 +08:00 via iPhone
    分享了什么。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1186 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 18:24 · PVG 02:24 · LAX 10:24 · JFK 13:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.