Chinaunix

标题: 最近几天折腾FastDFS的心得-接近崩溃 [打印本页]

作者: cgwxyz    时间: 2011-11-12 18:21
标题: 最近几天折腾FastDFS的心得-接近崩溃
在网上搜索了一通,看到它,感觉能适用于解决我现在的问题,决定尝尝鲜

先从精华贴里看了介绍的PPT,
搜索了一堆配置安装的资料,开始上马。
终于Tracker+2个storage都配置完了,
用这个fdfs_test上传文件,照样返回。然后两个storage也自动同步了,心里还挺美

开始折腾PHP的API。
下载了这个REAMME看了下
比如fastdfs_http_gen_token,生成一个反盗链的token,可这个玩意用在哪?怎么用,没人知道
根据示例,找到了上传的函数,开始编写上传的编码

然后因为想直接通过http的形式去访问,总通过API读去文件内容多费劲。开始折腾这个nginx的module.
安装完成之后,噩梦就开始了。
最初用的是nginx1.0.5的版本,下载了没有反应,一直就是提示404找不到文件,nginx_error日志里根本就不报错
因为是Nginx的conf文件写错了,改了改没有反应。

尝试比如把这个目标URL后加几个字,错误日志终于出来了,文件不存在
如果少几个字就提示 如 “[2011-11-12 17:17:09] ERROR - file: /usr/local/source/fastdfs-nginx-module/src/common.c, line: 355, url length: 10 < 16”

终于去看了这个扩展包里的README.作者在0.8.53上测试的。
于是赶紧去下一个0.8.53装上,结果还是一样。不带这么折腾的呀

现在的问题:
文件通过API上传后,返回的Group_name+file_name,如 group1,/M00/00/00***************,
是不是在按照先前的配置访问的URL就是 http://storage_ip/M00/00/00********.这样的组成形式是否正确?
如果不正确,那正确的格式又是什么样的?

希望作者不要有啥想法,纯属牢骚,最后一步了希望赶紧解决问题,让我好好体会下很好很强大的fastDFS.
哪位大神不吝赐教下,指点下迷津???
作者: happy_fish100    时间: 2011-11-12 18:55
回复 1# cgwxyz

文件通过API上传后,返回的Group_name+file_name,如 group1,/M00/00/00***************,
是不是在按照先前的配置访问的URL就是 http://storage_ip/M00/00/00********.这样的组成形式是否正确?
如果不正确,那正确的格式又是什么样的?


如果你nginx的端口为80,URL链接格式和你说的一样,如下所示:
http://storage_ip/M00/00/00/********
如果还不能正常访问,请检查一下nginx的error log。
作者: cgwxyz    时间: 2011-11-12 19:18
回复 2# happy_fish100
尝试了 我在直接用shell里直接用 fdfs_test上传文件,可以下载出来,但是用PHP的API上上传后,同样得方法就下载不出来了。整个过程里web的error没有新的日志。都是在access里提示404.

  1. $tracker = fastdfs_tracker_get_connection();
  2.        
  3.                 if (!fastdfs_active_test($tracker))
  4.                 {
  5.                         error_log("errno: " . fastdfs_get_last_error_no() . ", error info: " . fastdfs_get_last_error_info());
  6.                         exit(1);
  7.                 }
  8.                
  9.                 $storage = fastdfs_tracker_query_storage_store();
  10.                 echo '<br/>';
  11.                 var_dump($storage);
  12.                 echo '<br/>';
  13.                 $server = fastdfs_connect_server($storage['ip_addr'], $storage['port']);
  14.                 if (!$server)
  15.                 {
  16.                         error_log("errno1: " . fastdfs_get_last_error_no() . ", error info: " . fastdfs_get_last_error_info());
  17.                         exit(1);
  18.                 }
  19.                  
  20.                 if (!fastdfs_active_test($server))
  21.                 {
  22.                         error_log("errno: " . fastdfs_get_last_error_no() . ", error info: " . fastdfs_get_last_error_info());
  23.                         exit(1);
  24.                 }
  25.                $file_id = fastdfs_storage_upload_by_filename1($real_file, null, array('name'=>'dotest') '', $tracker, $storage);
  26.                          if ($file_id)
  27.                         {
  28.                                         echo 'file_id is:'.$file_id;
  29.                                         echo '<br/>';
  30.                         }else{
  31.                                         echo "fastdfs_storage_upload_slave_by_filename fail, errno: " . fastdfs_get_last_error_no() . ", error info: " . fastdfs_get_last_error_info() . "\n";
  32.                                         echo 'upload file error2';                                
  33.                         }
复制代码

作者: happy_fish100    时间: 2011-11-12 20:59
回复 3# cgwxyz

php上传文件成功了吗?请确认一下!
作者: cgwxyz    时间: 2011-11-12 22:04
回复 4# happy_fish100

确认PHPAPI文件上传成功了,fastdfs_storage_file_exist1($file_id)返true. 我也在/M00/00/00看到这个存在的文件了。
作者: cgwxyz    时间: 2011-11-14 10:48
回复 4# happy_fish100
今天又用PHP API尝试了一下,JPG GIF的图像文件上传成功后下载时一律都提示404找不到此文件,但是其他如zip.doc文档 上传后都可以直接下载出来的。有这样的限制吗?
作者: happy_fish100    时间: 2011-11-14 15:34
回复 6# cgwxyz

这不应该啊!你仔细检查一下URL是否拼写正确。
作者: cgwxyz    时间: 2011-11-14 17:36
回复 7# happy_fish100
是的呀。我已经尝试了好久了,我上传的exe,rar,zip,tar.gz,txt,c,conf,html 什么的文件上去后都可以直接下出来。但是像jpg,png,swf,js这些打不开了

URL我都是直接复制上传API返回的file_id后的/M00/00/00××××这样的形式来的,

但是我用API里的 fastdfs_storage_download_file_to_buff($group,$remote) 是可以读取出前面这些JPG,PNG 内容来的

我想应该是ngx_fastdfs_module的问题,我加了一些输出,有响应的这些rar的文件都可以走到 fdfs_http_request_handler() 这个函数里去,但是那些JPG都走不到这一步
作者: 乐啤露    时间: 2011-11-18 15:36
应该是nginx的配置文件里面有类似下面的处理造成的
  1.    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
  2.     {
  3.       expires      30d;
  4.     }

  5.     location ~ .*\.(js|css)?$
  6.     {
  7.       expires      1h;
  8.     }
复制代码

作者: cgwxyz    时间: 2011-11-27 18:34
回复 9# 乐啤露

忙其他的去了,想起了再回来,屏蔽了conf里的这几句,那些图像文件都可以直接下载出来了。看来问题确实是因为这个 缓存的配置引起的。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2