Java-175 FastDFS 6.15.0+Nginx 动态模块实战:源码编译到访问,从0到1详细安装流程

TL;DR

  • 场景:在 CentOS/RHEL 上从源码编译 FastDFS,接入 fastdfs-nginx-module,经 URL 直链分发文件。
  • 结论:按“libfastcommon → libserverframe → FastDFS → Nginx 动态模块”顺序构建,三端配置对齐即可稳定跑通。
  • 产出:可复现命令流、最小化 nginx.conf 与 mod_fastdfs.conf、上传与访问闭环 + 常见坑定位表。

Java-175 FastDFS 6.15.0+Nginx 动态模块实战:源码编译到访问,从0到1详细配置流程

版本矩阵

组件版本/来源已验证说明
操作系统CentOS/RHEL(yum 系列)以 yum/Development Tools 构建链条为前提;其他发行版需替换包管理器。
libfastcommonv1.0.81(tag)make && make install 后执行 ldconfig,确保库路径生效。
libserverframev1.2.9(tag)与 libfastcommon 匹配版本编译,避免符号缺失。
FastDFSv6.15.0(tag)安装产生 /etc/fdfs/* 与 /usr/bin/fdfs_*,用于 tracker/storage/client。
Nginxnginx-<检测版本>(nginx -v)使用同版本源码 --with-compat 构建动态模块,避免符号不匹配。
fastdfs-nginx-modulemaster(按仓库最新)以动态模块方式 make modules 产出 ngx_http_fastdfs_module.so 并 load_module。

安装配置

依赖配置

yum install git gcc gcc-c++ make automake vim wget libevent -y
sudo yum -y groupinstall "Development Tools"
sudo yum -y install libaio-devel

等待安装配置:
yum 更新组件

安装依赖如下所示:
yum 更新完毕

libfastcommon

拉取项目进行编译:

mkdir /opt/servers/fastdfs
cd /opt/servers/fastdfs
git clone https://github.com/happyfish100/libfastcommon.git
cd libfastcommon/
git checkout V1.0.81
./make.sh clean && ./make.sh && sudo ./make.sh install
sudo ldconfig

执行结果如下所示:
libfastcommon

libserverframe

cd /opt/servers/fastdfs
git clone https://github.com/happyfish100/libserverframe.git
cd libserverframe
git checkout V1.2.9
./make.sh clean && ./make.sh && sudo ./make.sh install
sudo ldconfig

对应的流程如下所示:
libserverframe

编译fastdfs

cd /opt/servers/fastdfs
git clone https://github.com/happyfish100/fastdfs
cd fastdfs
git checkout V6.15.0
./make.sh clean && ./make.sh && sudo ./make.sh install

等待编译处理:
编译fastdfs

配置文件

tracker

mkdir /opt/fastdfs
vim /etc/fdfs/tracker.conf

如下所示:
tracker.conf

storage

vim /etc/fdfs/storage.conf
tracker_server=h121.wzk.icu:22122

对应内容如下所示:
storage.conf

启动服务

/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart

测试上传

vim /etc/fdfs/client.conf
tracker_server=h121.wzk.icu:22122

client.conf
我们随意准备一张图片:

/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /root/wzk.png

上传图片
我们拿到的这串编码:

group1/M00/00/00/Cgo0JmkUQiyANGypAAuyxfp39gQ586.png

Nginx模块

整体架构

这里如果要访问的话,我们需要准备 fastdfs-nginx-module:
fastdfs-nginx-module 整体架构

安装Nginx

yum install nginx
nginx -v

Nginx安装配置

编译模块

需要补一些基础依赖

yum -y install pcre pcre-devel zlib zlib-devel openssl openssl-devel

然后我们继续操作:

/opt/servers/fastdfs
git clone https://github.com/happyfish100/fastdfs-nginx-module.git
cd fastdfs-nginx-module
cd src
vim mod_fastdfs.conf

我们需要修改一些内容,这里的配置需要和上边的 tracker 和 storage 的配置是一样的:

# 注意这个地方有很多需要改的 多检查一下
tracker_server=h121.wzk.icu:22122
url_have_group_name = true
store_path0 = /opt/fastdfs
group_count = 1
[group1]
group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/opt/fastdfs

然后我们进行编译处理:

NGINX_VER=$(nginx -v 2>&1 | sed -n 's/.*nginx\/\([0-9.]\+\).*/\1/p')
cd /opt/servers/fastdfs
curl -O http://nginx.org/download/nginx-$NGINX_VER.tar.gz
tar zxf nginx-$NGINX_VER.tar.gz
cd nginx-$NGINX_VER
./configure --with-compat --add-dynamic-module=../fastdfs-nginx-module/src
make modules

对应的内容如下所示:
查看整体吗

配置目录

mkdir -p /etc/nginx/modules /usr/lib64/nginx/modules
cp objs/ngx_http_fastdfs_module.so /etc/nginx/modules/ || true
cp objs/ngx_http_fastdfs_module.so /usr/lib64/nginx/modules/ || true

配置Nginx

vim /etc/nginx/nginx.conf
# 在最顶部
load_module /etc/nginx/modules/ngx_http_fastdfs_module.so;

Nginx module 配置

拷贝FastDFS的配置模板:

cp /opt/servers/fastdfs/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/

我们修改 Nginx 中配置:

http {
# 确保能加载到 FastDFS 的 mime.types(可与系统自带 mime.types 并存)
include /etc/fdfs/mime.types;
server {
listen 8888;
server_name _;
# 典型的匹配:/groupX/M00/... 由模块接管
location ~/group[0-9]+/M00 {
ngx_fastdfs_module;
}
}
}

对于 /etc/fdfs/mime.types,我们可以快速随便写一个:

cat > /etc/fdfs/mime.types <<'EOF'
types {
text/html                             html htm shtml;
text/css                              css;
text/xml                              xml;
text/plain                            txt;
text/mathml                           mml;
application/javascript                js;
application/json                      json map;
application/xml                       xsl;
image/gif                             gif;
image/jpeg                            jpeg jpg;
image/png                             png;
image/webp                            webp;
image/svg+xml                         svg svgz;
image/tiff                            tif tiff;
image/vnd.microsoft.icon              ico;
image/x-icon                          cur;
application/pdf                       pdf;
application/zip                       zip;
application/x-gzip                    gz;
audio/mpeg                            mp3;
audio/ogg                             ogg;
video/mp4                             mp4;
video/webm                            webm;
application/msword                    doc;
application/vnd.openxmlformats-officedocument.wordprocessingml.document  docx;
application/vnd.ms-excel              xls;
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet        xlsx;
application/vnd.ms-powerpoint         ppt;
application/vnd.openxmlformats-officedocument.presentationml.presentation pptx;
application/octet-stream              bin exe dll;
application/x-font-ttf                ttf;
font/woff                             woff;
font/woff2                            woff2;
}
EOF

PS:HTTP模块是只能有一个的,所以注意一下
编写 Nginx 配置文件

FastDFS配置

vim /etc/fdfs/mod_fastdfs.conf

依然是修改 tracker_server:
mod_fastdfs.conf
以及修改 url_have_group_name 为 true:
修改 mod_fastdfs.conf 内容

测试访问

h121.wzk.icu 指向的是内部的这个地址,已经可以顺利访问了。

访问对应的图片结果

错误怎么办

我建议直接查看:

cat /var/log/nginx/error.log

你看我之前遇到了一些问题,(还有很多),都是和之前的模块相关的,调整、编译就好了:
/var/log/nginx/error.log

错误速查

症状根因定位修复
Nginx 启动失败:undefined symbol/module not found模块与 Nginx 源码版本不匹配,或未启用 --with-compat用同版本 Nginx 源码重编模块,开启 --with-compat,确认 load_module 路径正确
访问 /group1/M00/... 返回 404url_have_group_name=false 或 group 名/路径不一致核对 mod_fastdfs.confstorage.conf,设 url_have_group_name=true,统一 group_namestore_path*
访问 403SELinux/权限限制或目录属主错误暂停/放宽 SELinux(测试用 setenforce 0),修正目录权限属主与运行用户
上传失败:connect to tracker failtracker_server 配置错误或 22122/23000 未放行修正 tracker 地址,放通 22122/23000,保证内网 DNS 可解析域名
模块编译报 pcre/zlib/ssl not found构建依赖缺失yum install pcre-devel zlib-devel openssl-devel 后重试 make modules
运行时报找不到 libfastcommon.so未执行 ldconfig 或库未在标准路径执行 ldconfig -pgrep fastcommon
tracker/storage 启动即退出base_path/store_path 不存在或权限不足创建并授权目录(mkdir -pchown -R),确保磁盘可写
能访问但返回空白/下载异常mime.types 未加载或被其他 server/location 抢匹配http{}include /etc/fdfs/mime.types,用 ~/group[0-9]+/M00 正则匹配
Nginx 配置报 “重复 http 块”误新增多个 http{}保持单一 http{},其内再 server{}include
多组存储跨组 404group_count[groupX] 未完整配置按真实组数填 group_count 并补全每组块,端口/路径一致

其他系列

AI篇持续更新中(长期更新)

AI炼丹日志-29 - 字节跳动 DeerFlow 深度研究框斜体样式架 私有部署 测试上手 架构研究,持续打造实用AI工具指南!
AI研究-127 Qwen2.5-Omni 深解:Thinker-Talker 双核、TMRoPE 与流式语音
AI模块直达链接

Java篇持续更新中(长期更新)

Java-174 FastFDS 从单机到分布式文件存储:实战与架构取舍
MyBatis 已完结,Spring 已完结,Nginx已完结,Tomcat已完结,分布式服务已完结,Dubbo已完结,MySQL已完结,MongoDB已完结,Neo4j已完结,FastDFS 正在更新,深入浅出助你打牢基础!
Java模块直达链接

大数据板块已完成多项干货更新(300篇):

包括 Hadoop、Hive、Kafka、Flink、ClickHouse、Elasticsearch 等二十余项核心组件,覆盖离线+实时数仓全栈!
大数据-278 Spark MLib - 基础介绍 机器学习算法 梯度提升树 GBDT案例 详解
大数据模块直达链接

posted @ 2025-12-15 12:59  gccbuaa  阅读(14)  评论(0)    收藏  举报