• 【没事找乐】Apache对大文件的支持 - [Web]2009-01-31

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://opendream.blogbus.com/logs/34473018.html

    最近使用测试机器下载了4G左右720p高清电影,顺便跑个apache做下载服务,好在家download,结果在家下载缺提示403错误,登陆服务器查询日志,发现如下错误日志:

    Symbolic link not allowed:/var/www/test.mkv

    我是在测试机器上做了个软链接链接到真实的文件存放地址,莫非是文件权限问题,查询文件权限,WEB用户想用读权限.

    将真实文件cp到apache document目录,下载又提示如下:

    (75)Value too large for defined data type: access to /test.mkv failed

    访问httpd.apache.org,在首页Apache 2.2.11 Released摘要中提到了 Large File Support,查询2.2版本最新特性,发现以下内容:

    Large File Support
    httpd is now built with support for files larger than 2GB on modern 32-bit Unix systems. Support for handling >2GB request bodies has also been added.

    查询自己apache版本号,2.0.52,看来2.0.52在32位系统上不支持大于2GB的文件。

    刚好闲着没事,验证下这个结果,并确定2GB真实大小(dd中有GB若干字样,但有GB 1000*1000*1000, G 1024*1024*1024)

    #echo 1024*1024*1024*2 |bc 

    2147483648

    #dd if=/dev/zero of=/var/www/test.bin bs=1MB count=2KB    //创建一个2,000,000,000字节大小文件

    #wget --spider http://www.pengyao.org/test.bin

    .......

    长度:2,000,000,000 (2.0G) [text/plain]
    200 OK

    #echo 1 >> test.bin             //文件大小已经为2,000,000,002个字节

    #wget --spider http://www.pengyao.org/test.bin

    长度:2,000,000,002 (2.0G) [text/plain]
    200 OK

    看来这里apache里边提到的GB和dd中提到的GB(1000*1000*1000)并不相同,而是1024*1024*1024

    #dd if=/dev/zero/ of=/var/www/test.bin bs=1M count=2K

    #stat test.bin

       File: ‘test.bin’

       Size: 2147483648      Blocks: 4198408    IO Block: 4096   一般文件

        .........

    #wget --spider http://www.pengyao.org/test.bin

       ........

    已发出 HTTP 请求,正在等待回应... 403 Forbidden
    19:21:05 错误 403:Forbidden。

    查看apache日志:

    (75)Value too large for defined data type: access to /test.bin failed

    看来2G的文件也不被支持

    同时为了验证是不是2G一下文件都支持,切割test.bin文件

    #split -b 2147483647 test.bin

    #wget --spider http://www.pengyao.org/xaa

    ......

    长度:2,147,483,647 (2.0G) [text/plain]
    200 OK

    那么2,147,483,649个字节以上的文件是不是都不能下载哪?

    #echo 1 >> xaa

    #wget --spider http://www.pengyao.org/xaa

    ......

    已发出 HTTP 请求,正在等待回应... 403 Forbidden
    19:31:21 错误 403:Forbidden。

     

    结论: Apache 2.0版本以下(含2.0)在32位操作系统中不支持大于2G文件(含2G),如果需要下载大于2G的文件,可以将该文件切割都小于2G下载或者使用apche 2.2或者以上版本

    PS: 网络中提到一种apache编译方法,编译前先export CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64",然后编译,使用64位进行编译,但此方法暂未验证是否有效.

    该内容均属于茶余饭后,没事找乐的文章,如果有异议,请留言或者发送E-mail,谢谢


    收藏到:Del.icio.us