在安装 fastdfs-nginx-module 模块之前,首先确定你的环境中已经成功安装了 nginx(源码安装) 与 fastdfs, 如果还没有安装, 请按照我写的其他两篇文章 Ubuntu 16.04 安装 Nginx(源码) 与 Ubuntu 16.04 下部署 FastDFS 5.08 完成安装然后再返回来继续.

由于 nginx 添加新模块需要重新编译, 所以需要知道你的 nginx 源码目录在哪里, 我的 nginx 源码目录为:

➜  nginx-1.13.0 pwd
/home/huoshan/software/nginx-1.13.0

下载 fastdfs-nginx-module

fastdfs-nginx-module 安装包可以在这里下载: https://sourceforge.net/projects/fastdfs/files/FastDFS%20Nginx%20Module%20Source%20Code/ 我选择目前最新的版本 1.16.targ.gz . 也可以通过命令行下载:

wget https://sourceforge.net/projects/fastdfs/files/FastDFS%20Nginx%20Module%20Source%20Code/fastdfs-nginx-module_v1.16.tar.gz

添加 fastdfs-nginx-module

先解压 fastdfs-nginx-module_v1.16.tar.gz

tar -xvf fastdfs-nginx-module_v1.16.tar.gz

查看现在 nginx 已经安装了哪些模块

/usr/local/nginx/sbin/nginx -V

image.png

config arguments: 后边就是 nginx 已经安装的模块, 由于我之前已经安装了 fastdfs-nginx-module 所以有 --add-module=/home/huoshan/software/fastdfs-nginx-module/src , 你的设备上打印出来应该是没有这段的.

接下来将 fastdfs-nginx-module 编译到 nginx 中, 进入到 nginx 源码目录 /home/huoshan/software/nginx-1.13.0

执行脚本 configure 后加之前安装的所有模块(也就是上边打印出来的 configure arguments: 后边所有) 再添加 fastdfs-nginx-module 作为参数

cd /home/huoshan/software/nginx-1.13.0
./configure --prefix=/usr/local/nginx --with-http_ssl_module --add-module=/home/huoshan/software/fastdfs-nginx-module/src

Note:

  • --prefix=/usr/local/nginx --with-http_ssl_module 是之前 nginx 已经安装的模块
  • --add-module=/home/huoshan/software/fastdfs-nginx-module/src 是我们要添加的新模块

重新编译Nginx

在 /home/huoshan/software/nginx-1.13.0 目录下:

make

执行该步骤有可能遇到如下编译错误:

In file included from /home/free/fastdfs-nginx-module/src/ngx_http_fastdfs_module.c:6:0:
/home/free/fastdfs-nginx-module/src/common.c:21:10: fatal error: fdfs_define.h: 没有那个文件或目录
#include "fdfs_define.h"
^~~~~~~~~~~~~~~
compilation terminated.
objs/Makefile:1236: recipe for target 'objs/addon/src/ngx_http_fastdfs_module.o' failed
make[1]: *** [objs/addon/src/ngx_http_fastdfs_module.o] Error 1
make[1]: 离开目录“/home/free/nginx-1.15.2”
Makefile:8: recipe for target 'build' failed
make: *** [build] Error 2

解决方法:创建以下软连接

ln -sv /usr/include/fastcommon /usr/local/include/fastcommon
ln -sv /usr/include/fastdfs /usr/local/include/fastdfs
ln -sv /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so

重新 make 编译即可.

Note:

  • 别执行 make install ,这样会覆盖掉之前 nginx 的安装.

备份旧 Nginx

cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old

新 Nginx 覆盖旧 Nginx

在 Nginx 源码目录下执行:

cp objs/nginx /usr/local/nginx/sbin/nginx

文件配置

复制 fastdfs-nginx-module 下配置 mod_fastdfs.conf 到 FastDFS 配置路径 /etc/fdfs/

cp src/mod_fastdfs.conf /etc/fdfs/

修改 /etc/fdfs/mod_fastdfs.conf 配置项:

base_path=/opt/fastdfs  #日志基路径
tracker_server=192.168.31.152:22122 #tracker server 地址
store_path0=/opt/fastdfs/storage  #数据存储路径
url_have_group_name = true #文件url是否包含 group name,默认为 false

复制 FastDFS 源码目录下(安装 FastDFS 时下载压缩包中) http.conf mime.types 到 /etc/fdfs

在源码路径下子路径 conf 中执行

cp http.conf mime.types /etc/fdfs/

OK, fastdfs中配置完成.

接下来在 Nginx 中配置.

在 http 中添加一个 server:

server {
 listen       80;
 server_name  localhost;
 
 #charset koi8-r;
 
 #access_log  logs/host.access.log  main;
 
 location ~ /group([1-9])/M00{
 ngx_fastdfs_module;
 }
 
 location / {
 root   html;
 index  index.html index.htm;
 }
 
 #error_page  404              /404.html;
 
 # redirect server error pages to the static page /50x.html
 #
 error_page   500 502 503 504  /50x.html;
 location = /50x.html {
 root   html;
 }
}

重新加载下 Nginx 配置:

/usr/local/nginx/sbin/nginx -s reload

OK, 配置完成.

测试

启动下 tracker 与 storage

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

如果 Nginx 没有启动, 也启动下

/usr/local/nginx/sbin/nginx

然后使用 fdfs_test 上传一个文件:

image.png

可以看到返回一个 example file url, 在浏览器中打开它

image.png

Q.E.D.