前言
因为项目需要搭建自己的图片服务器,之前用的ftp,但是在了解了fdfs之后,想尝试一下这个分布式文件服务器,所以这就是起因了,废话少说,进入问题。
我使用的版本:
Centos 7.6
nginx-1.8.1
fastdfs-5.05
libfastcommon-1.0.7
fastdfs-nginx-module-1.20
问题
我这里安装fdfs和nginx都没有问题,单独测试都可以成功,在进行添加nginx模块的时候就出现了报错,具体报错如下:
/usr/local/FastDFS/fastdfs-nginx-module-master/src//common.c:597:16: error: implicit dec
laration of function ‘get_current_time_us’ [-Werror=implicit-function-declaration]
“%”PRIx64, get_current_time_us());
^
/usr/local/FastDFS/fastdfs-nginx-module-master/src//common.c:597:16: error: format ‘%lx’
expects argument of type ‘long unsigned int’, but argument 3 has type ‘int’ [-Werror=fo
rmat=]
/usr/local/FastDFS/fastdfs-nginx-module-master/src//common.c: In function ‘fdfs_http_req
uest_handler’:
/usr/local/FastDFS/fastdfs-nginx-module-master/src//common.c:1245:61: error: ‘FDFSHTTPPa
rams’ has no member named ‘support_multi_range’
(pContext->range_count > 1 && !g_http_params.support_multi_range))
^
cc1: all warnings being treated as errors
make[1]: [objs/addon/src/ngx_http_fastdfs_module.o] Error 1
make[1]: Leaving directory `/usr/local/FastDFS/nginx-1.8.1’
make: [build] Error 2
按照提示的信息意思是,在common.c
里面出现了变量类型不匹配,还有方法名找不到的错误,一番Google之后找不到类似的问题,一般出现的问题是common.c
的依赖文件找不到,但是我的已经安装完成,可以进行依赖,但是出现了变量类型不匹配的问题,所以有点坑。我觉得应该是版本的问题,版本没有对应好,所以不同的版本出现了更改不一致的情况。这个问题也是众多GitHub上的朋友吐槽的。
大家都希望作者鱼大可以给出对应的版本。按照发布版本的时间对应来看,我的nginx模块1.20是对应fdfs5.05的版本,应该是没有问题的,但是我依然尝试了别的版本,也出现了类似报错。我接着搜索关于fdfs nginx模块安装的问题,看到一篇文章,里面有一个模块的修复版本使用。
# 这里为啥这么长一串呢,因为最新版的master与当前nginx有些版本问题。
# wget https://github.com/happyfish100/fastdfs-nginx-module/archive/5e5f3566bbfa57418b5506aaefbe107a42c9fcb1.zip
我下载了这个版本改了后缀为test
# 添加模块
# ./configure --add-module=../fastdfs-nginx-module-test/src
make
编译之后没有报错,用命令查看显示模块添加成功。
我去GitHub上找到了这次提交,想看看fix了哪些bug
可以看到是修复文件ID无效时的HTTP状态,代码添加了一个if判断
这个修改了的是http的响应状态,但是为什么安装的时候common.c
就没有报错了,还是有点不太明白,这里面的依赖关系我也不清楚。
最终部署结构图(盗的图):可以按照下面的结构搭建环境。
总结
这次安装出现的问题前前后后拖了不少时间,尝试了很多版本都以失败告终,虽然这个问题解决了,但是问题被解决的原因还不是十分清晰。持续关注一下,希望能深入了解使用fdfs。