FastDFS+Nginx动态缩略

方案需求:

1、使用两台服务器,其中一台做tracker和storage,另一台仅仅做storage

2、在两台storage中进行轮巡存储,每台服务器设置一个group,分别为group1和group2

改文档中的环境,ip地址为:

tracker和storage1:192.168.199.160

storage2:192.168.199.231

[ 记得操作前,关闭防火墙和selinux

systemctl stop firewalld

sed -i 's@SELINUX=enforcing@SELINUX=disabled@g' /etc/selinux/config

setenforce 0

]

一:首先对第一台storage进行配置,tracker也在这台服务器中,group为group1

1、安装依赖包和开发工具

yum -y install pcre* pcre-* gcc-c++ gcc* zlib zlib-devel openssl openssl-devel gc-devel gd gd-devel git

2、安装lib套件:libfastcommon

cd /usr/local/src

git clone https://github.com/happyfish100/libfastcommon.git

cd libfastcommon

./make.sh && ./make.sh install

3、设置软链接

# ln -s /usr/lib64/libfastcommon.so /usr/lib/

# ln -s /usr/lib64/libfastcommon.so /usr/local/lib/

# ln -s /usr/lib64/libfastcommon.so /usr/local/lib64/

# ln -s /usr/lib64/libfdfsclient.so /usr/lib/

# ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/

# ln -s /usr/lib64/libfdfsclient.so /usr/local/lib64/

4、安装fastdfs

# cd /usr/local/src/fastdfs

# ./make.sh && ./make.sh install

# cp -r /usr/local/src/fastdfs-master/conf/* /etc/fdfs/

配置tracker配置文件

# cd /etc/fdfs/ && vim tracker.conf

bind_addr=192.168.199.160 # 绑定tracker的地址,tracker和storage为同一台服务器

port=22122 # 端口

base_path=/data/server/fastdfs

store_lookup=0 # 0为轮巡

store_group=group1 # 该服务器为group1

store_server=0 # 0为轮巡

use_storage_id = true # 这里使用组id而不是ip地址

id_type_in_filename = id

配置storage配置文件

# vim /etc/fdfs/storage.conf

group_name=group1

bind_addr=192.168.199.160

port=23000

base_path=/data/server/fastdfs_storage

store_path0=/data/server/fastdfs_storage

tracker_server=192.168.199.160:22122

配置client配置文件

# vim /etc/fdfs/client.conf

base_path=/data/server/fastdfs_client

tracker_server=192.168.199.160:22122

use_storage_id = ture

创建相关目录

# mkdir /data/server/fastdfs

# mkdir /data/server/fastdfs_storage

# mkdir /data/server/fastdfs_client

# mkdir /data/server/fastdfs_tracker

启动tracker

# /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start

启动storage

# /usr/bin/fdfs_storaged /etc/fdfs/storage.conf start

5、安装nginx

创建相关目录:mkdir /data/server/nginx

5.1、解压fastdfs_nginx_module,然后编译安装nginx,加上此模块一起编译

# cd /usr/local/src/

# tar -zxvf fastdfs_nginx_module.tar.gz

安装

# tar -zxvf nginx.tar.gz

# cd nginx/

开始编译,安装相关模块

./configure --prefix=/data/server/nginx \

--add-module=/usr/local/src/fastdfs-nginx-module/src \

--with-http_gunzip_module \

--with-pcre \

--with-http_image_filter_module \

--with-http_stub_status_module

[

编译安装nginx时遇到的问题:

问题一:

In file included from /data/server/fastdfs-nginx-module/src/ngx_http_fastdfs_module.c:6:0:

/data/server/fastdfs-nginx-module/src/common.c:21:25: 致命错误:fdfs_define.h:没有那个文件或目录

#include "fdfs_define.h"

答案:

编译中断。

原因:编译安装nginx的fastdfs插件的头文件没有找到,由于编译nginx时候系统会到/usr/local/include,而编译安装fastdfs-nginx-module时则默认保存在了/usr/include目录。

修复:ln -s /usr/include/fast* /usr/local/include/

]

# -------------------------------------

解决方法一:

# ln -s /usr/include/fast* /usr/local/include/

解决方法二,修改配置文件中一个地方(建议用此方法,最好在编译前先修改好,就不会出错了):

# vim /usr/local/src/fastdfs-nginx-module/src/config

CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"

然后重新进行上一步./configure 步骤。

开始编译

# make

如果没有问题就开始install

# make install

5.2、编辑nginx配置文件

# vim /data/server/nginx/conf/nginx.conf

添加:

location /photo {

rewrite "/photo/path=M00/(\w+)/(\w+)/x=(\d+)&(\d+)/(.+).(png|jpg|gif)" /group1/M00/$1/$2/$5_$3x$4.$6;

}

location ~* /group1/M00/(\w+)/(\w+)/(.+)_(\d+)x(\d+)\.(png|jpg|gif) {

root "/data/server/nginx/html/";

ngx_fastdfs_module;

set $iw "$4";

set $ih "$5";

image_filter resize $iw $ih;

image_filter_buffer 2M;

try_files /group1/M00/$1/$2/$3.$6 /404.html;

}

location /group1/M00 {

root "/date/server/nginx/html/";

ngx_fastdfs_module;

}

location = /favicon.ico {

log_not_found off;

access_log off;

}

5.3、创建目录及软件链

# mkdir /data/server/nginx/html/group1

# ln -s /data/server/fastdfs_storage/data /data/server/nginx/html/group1/M00

[ 注意 /data/srever/fastdfs_storage/data 最后一个data不能有 / ]

5.4、修改mod_fastdfs.conf

先复制文件到/etc/fdfs目录下:

# cp /usr/local/src/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/

# vim /etc/fdfs/mod_fastdfs.conf

use_storage_id = true

tracker_server=192.168.199.160:22122

url_have_group_name = true

group_name=group1

store_path0=/data/server/fastdfs_storage

[group1]

group_name=group1

storage_server_port=23000

store_path_count=1

store_path0=/data/server/fastdfs_storage