分类 CDN 下的文章

OpenCDN流量采集bug修复

OpenCDN节点端Nginx把节点流量信息以下面这种格式输出到管道bandwidth.pipe。

nginx.conf
log_format  bandwidth   '[$time_local] $host $body_bytes_sent $upstream_cache_status';

vhost配置
access_log /usr/local/opencdn/pipe/bandwidth.pipe bandwidth;

在管道的另一段读取流量信息,然后输出到下面的文件里(shell守护)
/usr/local/opencdn/stream/域名/
-| year_month_day_hour_minute
比如
/usr/local/opencdn/stream/www_firefoxbug_net
2013_Sep_30_12_10

管控端采集流量就是通过守护,以http://%s:%s/ocdn/stream?token=%s&domain=%s来抓取流量,处理后导入数据库。

之前OpenCDN产生一个小需求,使用CDN加速的小伙伴们添加了一个域名比如是aaa.com,但是他还加了别名,xxx.aaa.com(可以是二级域名)。OpenCDN节点端会在Nginx的vhost配置server_name加一个aliasname。但是小伙伴访问都是用这个aliasname访问的。而根据上面的逻辑管控端就没有办法采集到aliasname的流量。
怎么办?在节点端加对域名的流量路径加个软链接就可以,那么aliasname访问的流量也会记录到原站点的流量下。

中间还遇到一个小问题

$ mkdir test1
$ ln -s test1 test2
$ [ -L test2 ] ; echo $?
0
$ [ -L test2/ ] ; echo $?
1

为什么测试目录链接文件加/和没加/有区别呢?得@smallfish指点,大概明白了。软链接是新建一个inode节点的,这个inode节点对应的block记录的是原目录的路径,从软链接到原目录路径其实是比正常访问多一层的。我想linux的设计就是加/来区别吧,没加/那么就是读取普通的目录文件一样,加了/就是change到原路径里去了。

Nginx Cache中$request_filename

对于Nginx的$request_filename变量指的就是请求的资源路径。在原先OpenCDN节点端配置里面是这样的。

location ~ .*\.(png|html|htm|ico|jpg|jpeg|bmp|gif|js|css)$ {
        ## 忽略浏览器的缓存
        proxy_ignore_headers Cache-Control;
        proxy_ignore_headers Expires;

        proxy_cache cache_one;
        proxy_cache_valid 200 304 1h;

        proxy_cache_key $host$uri$is_args$args;
        expires 1h;
        ## 此处为host锁定,可定制有无
        proxy_set_header        Host    $host;

        add_header OpenCDN-Cache "$upstream_cache_status";

       if (!-f $request_filename) {
                proxy_pass http://ocdn_www.firefoxbug.net;
                break;
        }
}

- 阅读剩余部分 -