本文将详细介绍在 CentOS 7 操作系统上,如何搭建一个基于 FastDFS 分布式文件存储系统,并整合 Nginx 模块以实现高性能、高可用的外网图片及文件服务器。该方案适用于需要存储和快速访问大量静态资源(如图片、文档、视频片段)的 Web 应用或移动应用后端服务。
一、环境准备与基础软件安装
- 系统与网络要求
- 一台或多台运行 CentOS 7 的服务器(最低配置1核2G,生产环境建议更高)。
- 所有服务器间网络互通,并确保防火墙(firewalld)或安全组规则开放后续所需的端口(如 22122, 23000, 80, 8888 等)。
- 拥有 root 或 sudo 权限。
- 建议配置静态 IP 或可解析的主机名。
2. 安装基础依赖
`bash
yum install -y gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib-devel openssl-devel wget vim git
`
- 下载必要组件
- FastDFS:核心存储系统。
- libfastcommon:FastDFS 依赖的公共函数库。
- fastdfs-nginx-module:使 Nginx 能够直接访问 FastDFS 存储文件的扩展模块。
* Nginx:高性能 Web 服务器,用于提供 HTTP 访问和负载均衡。
`bash
cd /usr/local/src
wget https://github.com/happyfish100/libfastcommon/archive/master.zip -O libfastcommon.zip
wget https://github.com/happyfish100/fastdfs/archive/master.zip -O fastdfs.zip
wget https://github.com/happyfish100/fastdfs-nginx-module/archive/master.zip -O fastdfs-nginx-module.zip
wget http://nginx.org/download/nginx-1.20.1.tar.gz
unzip libfastcommon.zip
unzip fastdfs.zip
unzip fastdfs-nginx-module.zip
tar -zxvf nginx-1.20.1.tar.gz
`
二、安装与配置 FastDFS
1. 安装 libfastcommon
`bash
cd /usr/local/src/libfastcommon-master
./make.sh && ./make.sh install
`
2. 安装 FastDFS
`bash
cd /usr/local/src/fastdfs-master
./make.sh && ./make.sh install
# 安装后,配置文件在 /etc/fdfs/,可执行文件在 /usr/bin/,默认数据存储路径在 /home/yuqing/fastdfs/
`
3. 配置 Tracker Server(跟踪服务器,建议至少一台)
`bash
cd /etc/fdfs
cp tracker.conf.sample tracker.conf
vim tracker.conf
`
主要修改项:
`ini
basepath=/data/fastdfs/tracker # Tracker 数据和日志存放路径
bindaddr=0.0.0.0 # 允许所有 IP 连接,或指定服务器内网 IP
port=22122 # Tracker 服务端口(需开放)
http.serverport=8080 # 可选,Tracker 内置的 HTTP 服务端口
`
创建目录并启动服务:
`bash
mkdir -p /data/fastdfs/tracker
/usr/bin/fdfstrackerd /etc/fdfs/tracker.conf start
# 设置开机自启
echo "/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start" >> /etc/rc.local
chmod +x /etc/rc.d/rc.local
`
4. 配置 Storage Server(存储服务器,建议至少两台)
`bash
cd /etc/fdfs
cp storage.conf.sample storage.conf
vim storage.conf
`
主要修改项:
`ini
groupname=group1 # 组名,多台 Storage 可同组
basepath=/data/fastdfs/storage # Storage 数据和日志存放路径
storepath0=/data/fastdfs/storage/files # 实际文件存储路径,可配置多个
trackerserver=
bindaddr=0.0.0.0 # 或指定服务器内网 IP
port=23000 # Storage 服务端口(需开放)
http.serverport=8888 # Storage 内置 HTTP 服务端口(通常由 Nginx 替代)
`
创建目录并启动服务:
`bash
mkdir -p /data/fastdfs/storage /data/fastdfs/storage/files
/usr/bin/fdfsstoraged /etc/fdfs/storage.conf start
echo "/usr/bin/fdfsstoraged /etc/fdfs/storage.conf start" >> /etc/rc.local
`
在 Tracker 服务器上检查 Storage 是否注册成功:
`bash
/usr/bin/fdfs_monitor /etc/fdfs/client.conf
`
三、安装与配置 Nginx 整合 FastDFS
1. 编译安装带 fastdfs-nginx-module 的 Nginx
`bash
cd /usr/local/src/nginx-1.20.1
./configure --prefix=/usr/local/nginx \
--add-module=/usr/local/src/fastdfs-nginx-module-master/src \
--with-httpsslmodule \
--with-httpstubstatus_module
make && make install
`
2. 配置 fastdfs-nginx-module
`bash
cp /usr/local/src/fastdfs-nginx-module-master/src/modfastdfs.conf /etc/fdfs/
vim /etc/fdfs/modfastdfs.conf
`
主要修改项:
`ini
trackerserver=
url
storepath0=/data/fastdfs/storage/files # 与 storage.conf 中的一致
groupname=group1 # 组名
`
3. 配置 Nginx 以支持文件访问
在 Storage 服务器上,编辑 Nginx 配置文件:
`bash
vim /usr/local/nginx/conf/nginx.conf
`
在 http { 块内添加一个 server 配置:
`nginx
server {
listen 80; # 或指定其他端口,需确保外网可访问
servername yourdomain.com或服务器公网IP; # 你的域名或公网IP
location ~ /group[0-9]/ { # 匹配 FastDFS 文件路径
ngxfastdfsmodule; # 调用 fastdfs-nginx-module
}
可选:配置一个简单的状态页或健康检查
location /status {
stubstatus on;
accesslog off;
allow 127.0.0.1;
deny all;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
`
4. 启动 Nginx 服务
`bash
/usr/local/nginx/sbin/nginx
# 设置开机自启(可创建 systemd 服务文件)
echo "/usr/local/nginx/sbin/nginx" >> /etc/rc.local
`
四、测试与使用
1. 客户端测试上传
在任意一台服务器上配置客户端并测试:
`bash
cd /etc/fdfs
cp client.conf.sample client.conf
vim client.conf
# 修改 basepath 和 trackerserver
测试上传:bash
echo "This is a test file." > test.txt
/usr/bin/fdfsuploadfile /etc/fdfs/client.conf test.txt
# 返回类似:group1/M00/00/00/wKgKZF9rT2aANzRsAAAADvC6VUc.txt
`
2. 通过外网 HTTP 访问文件
使用上一步返回的文件 ID,构造 URL 通过浏览器或 curl 访问:
`
http://your_domain.com或服务器公网IP/group1/M00/00/00/wKgKZF9rT2aANzRsAAAADvC6VUc.txt
`
如果配置了域名,应确保域名 DNS 解析到 Storage 服务器的公网 IP,并且服务器防火墙/安全组开放了 80 端口。
五、进阶配置与优化建议
- 高可用与负载均衡
- Tracker 集群:部署多个 Tracker,并在
storage.conf和client.conf中配置所有tracker_server。
- Storage 集群与分组:部署多个 Storage 服务器到同一组(group)实现冗余,或配置不同组(如 group1, group2)进行容量扩展。
- Nginx 负载均衡:在 Storage 服务器前再部署一层 Nginx 作为负载均衡器,将请求分发到多个 Storage 的 Nginx 服务上。
- 安全性
- 使用防火墙限制除必要端口(80, 22122, 23000)外的所有访问。
- 考虑为 Nginx 配置 SSL/TLS(HTTPS)以加密传输。
- 可以在 Nginx 层面配置访问令牌、Referer 防盗链等。
- 性能与存储
- 将
store_path0指向高性能存储介质(如 SSD)。
- 调整 Linux 内核参数(如文件描述符数量、网络参数)。
- 根据访问模式,合理配置 Nginx 缓存。
六、应用软件服务集成
在您的应用程序(如 Java Spring Boot、Python Django、PHP 等)中集成 FastDFS 客户端:
- 引入客户端 SDK:根据编程语言选择官方或社区维护的 FastDFS 客户端库。
- 配置客户端:在应用配置文件中指定 Tracker 服务器地址列表。
- 文件操作:
- 上传:调用客户端 API 上传文件,获得文件 ID(如
group1/M00/00/00/xxx.jpg)。
- 存储:将文件 ID 存入您的业务数据库。
- 访问/下载:通过拼接
http://你的Nginx域名或IP/+文件ID生成完整的可访问 URL,前端直接使用此 URL 展示图片或提供下载链接。
- 删除:通过客户端 API 根据文件 ID 删除文件(注意权限控制)。
通过以上步骤,您就成功搭建了一个外网可访问、具备基本高可用能力的 FastDFS + Nginx 图片/文件服务器,并可以将其集成到您的应用软件服务中,高效管理海量静态资源。