搭建FastDFS + Nginx(含配置文件参考)

心之所向,身之所往,己不由心,身又岂能由己,心之所向,一鹿向羊

v2-fe6333bb93367bab52d252f441d35488_r.jpg

目录

  • 版本总览
  • 一、FastDFS
    • 1.1 安装所需依赖包
    • 1.2 安装libfastcommon
    • 1.3 安装fastdfs
    • 1.4 命令行
    • 1.5 测试
  • 二、Nginx
    • 2.1 安装nginx
    • 2.2 命令行
    • 2.3 测试

版本总览

  • libfastcommon-1.0.42
  • fastdfs-5.11
  • fastdfs-nginx-module-1.20
  • nginx-1.16.1

一、FastDFS

1.1 安装所需依赖包

yum install git gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib-devel openssl-devel -y

1.2 安装libfastcommon

cd libfastcommon-1.0.42/
./make.sh
./make.sh install
  • 可能报错:
./make.sh:行14: gcc: 未找到命令
./make.sh:行15: ./a.out: 没有那个文件或目录
cc -Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -g -O3 -c -o hash.o hash.c  
make: cc:命令未找到
make: *** [hash.o] 错误 127
  • 解决方案:
根据报错信息显示,应该为未安装gcc导致,故先安装gcc
yum -y install gcc automake autoconf libtool make
安装完成后,重新执行编译命令 ./make.sh 即可

1.3 安装fastdfs

  • github选择需要安装的release版本
    https://github.com/happyfish100/fastdfs/releases

  • 下载安装包
    wget https://github.com/happyfish100/fastdfs/archive/V5.11.tar.gz

  • 解压
    tar -zxvf V5.11.tar.gz

  • 编译
    ./make.sh

  • 安装
    ./make.sh install

可能报错:

致命错误 fastcommon/buffered_file_writer.h:没有那个文件或目录

解决方案:

降低版本重新编译(暂时这么做,没有深究)
  • 拷贝配置文件,修改配置
cd /etc/fdfs/
cp client.conf.sample client.conf
cp storage.conf.sample storage.conf
cp tracker.conf.sample tracker.conf
  • 修改client.conf
# the base path to store log files,日志以及数据存储位置
base_path=/home/work/fastdfs/fastdfs-data
 
# tracker_server can ocur more than once, and tracker_server format is
#  "host:port", host can be hostname or ip address tracker_server的ip端口
tracker_server=192.168.10.63:22122
  • 修改trackerd.conf
# the base path to store data and log files
base_path=/home/work/fastdfs/fastdfs-data
  • 修改storaged.conf
# the base path to store data and log files
base_path=/home/work/fastdfs/fastdfs-data
# store_path#, based 0, if store_path0 not exists, it's value is base_path
# the paths must be exist
store_path0=/home/work/fastdfs/fastdfs-data
# tracker_server can ocur more than once, and tracker_server format is
#  "host:port", host can be hostname or ip address
tracker_server=192.168.10.63:22122

1.4 命令行

  • 启动
sudo service fdfs_trackerd start
sudo service fdfs_storaged start
  • 重启
sudo /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
sudo /usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
  • 终止
sudo /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf stop
sudo /usr/bin/fdfs_storaged /etc/fdfs/storage.conf stop

注:
要是使用终止命令或者使用 kill -9 fdfs进程id 来终结fdfs_storaged服务的,然后用上面的启动命令是启动不了的,因为log日志问题,会出现一些错误

1.5 测试

  • 测试上传(命令格式,语句 + 配置文件 + 要上传的文件)
    fdfs_upload_file /etc/fdfs/client.conf client.conf
    成功后会返回如 group1/M00/00/00/wKgBOVvulymAC1_kAAAFspt4Ii458.conf 结构返回体

  • 测试下载
    fdfs_download_file /etc/fdfs/client.conf 上述操作返回的那一串

  • 测试删除
    fdfs_delete_file /etc/fdfs/client.conf 上述操作返回的那一串


二、Nginx

2.1 安装nginx

if test -n "${ngx_module_link}"; then
    ngx_module_type=HTTP
    ngx_module_name=$ngx_addon_name
    ngx_module_incs="/usr/include/fastdfs /usr/include/fastcommon"#修改
    ngx_module_libs="-lfastcommon -lfdfsclient"
    ngx_module_srcs="$ngx_addon_dir/ngx_http_fastdfs_module.c"
    ngx_module_deps=
    CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=64 -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='\"自己fdfs nginx模块src目录下的/mod_fastdfs.conf\"'"#修改
    . auto/module
else
    HTTP_MODULES="$HTTP_MODULES ngx_http_fastdfs_module"
    NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_fastdfs_module.c"
    CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon"#修改
    CORE_LIBS="$CORE_LIBS -lfastcommon -lfdfsclient"
    CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=64 -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='\"自己fdfs nginx模块src目录下的/mod_fastdfs.conf\"'"#修改
fi
  • 修改fdfs nginx模块src目录下mod_fastdfs.conf文件
# the base path to store log files
base_path=同上述fastdfs中配置的路径
 
# FastDFS tracker_server can ocur more than once, and tracker_server format is
#  "host:port", host can be hostname or ip address
# valid only when load_fdfs_parameters_from_tracker is true
tracker_server=192.168.10.63:22122
 
# if the url / uri including the group name
# set to false when uri like /M00/00/00/xxx
# set to true when uri like ${group_name}/M00/00/00/xxx, such as group1/M00/xxx
# default value is false
url_have_group_name = true
 
# store_path#, based 0, if store_path0 not exists, it's value is base_path
# the paths must be exist
# must same as storage.conf
store_path0=同上述fastdfs中配置的路径
  • nginx目录下执行如下命令配置
    ./configure --add-module=你的fdfs nginx路径/fastdfs-nginx-module-1.20/src/

  • nginx目录下编译安装(若不安装上述module,得先执行./configure

make
make install
  • 修改nginx配置,修改nginx安装目录下的conf/nginx.conf,增加自定义server,或者修改默认的都行
   server {
        listen 18000;
        server_name localhost;
 
        location ~/group[0-9]/{
            ngx_fastdfs_module;
        }
 
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

2.2 命令行

  • 启动nginx
cd /usr/local/nginx/sbin/
再执行命令
./nginx 开启
./nginx -s stop 此方式相当于先查出nginx进程id再使用kill命令强制杀掉进程
./nginx -s quit 此方式停止步骤是待nginx进程处理任务完毕进行停止
./nginx -s reload 配置生效需要重启nginx,不用先停止nginx再启动,即可将配置信息在nginx中生效。
  • 配置文件位置(注意,并不是安装目录下的conf,而在下述目录)
    /user/local/nginx/conf/

  • 日志文件位置
    /usr/local/nginx/logs

  • 可能报错:

缺少httpconf文件
  • 解决方案
复制fastdfs安装文件夹中的conf文件夹下的 http.conf 和 mime.types 文件,至自己路径/fastdfs-nginx-module-1.20/src 下,在重新执行 添加模块、编译、安装 一次,在启动nginx即可
  • 开机自启动
vim /etc/rc.local
新增
/usr/local/nginx/sbin/nginx
即可

2.3 测试

  • nginx测试,使用文件上传返回的文件id测试
    wget http://127.0.0.1:18000/上面测试上传文件返回的那一串

  • 集群配置

  • 前提是先搭建两个以上的fdfs服务

  • 每个服务stroage.conf增加两个tracker_server

# tracker_server can ocur more than once, and tracker_server format is
#  "host:port", host can be hostname or ip address
tracker_server=192.168.1.57:22122
tracker_server=192.168.1.211:22122
  • 每个服务的client.conf中配置两个tracker_server
# tracker_server can ocur more than once, and tracker_server format is
#  "host:port", host can be hostname or ip address
tracker_server=192.168.1.57:22122
tracker_server=192.168.1.211:22122
  • 同样nginx模块mod_fastdfs.conf
# FastDFS tracker_server can ocur more than once, and tracker_server format is
#  "host:port", host can be hostname or ip address
# valid only when load_fdfs_parameters_from_tracker is true
tracker_server=192.168.1.57:22122
tracker_server=192.168.1.211:22122
  • 集群测试
    配置ok后,重启每个服务的trackerd server和storaged server
    查看trackerd.log日志
[2018-11-19 14:14:56] INFO - file: tracker_relationship.c, line: 389, selecting leader...
[2018-11-19 14:14:58] INFO - file: tracker_service.c, line: 979, the tracker leader is 192.168.1.57:22122
  • 查看storaged.log日志
[2018-11-19 14:14:58] INFO - file: tracker_client_thread.c, line: 310, successfully connect to tracker server 192.168.1.57:22122, as a tracker client, my ip is 192.168.1.211
[2018-11-19 14:14:58] INFO - file: storage_sync.c, line: 2732, successfully connect to storage server 192.168.1.57:23000
[2018-11-19 14:15:28] INFO - file: tracker_client_thread.c, line: 1263, tracker server 192.168.1.57:22122, set tracker leader: 192.168.1.57:22122
  • 上传文件后,在通过nginx下载文件,测试即可。

  • nginx配置文件参考
    nginx.conf

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;
    
    # 声明别名,指向后台服务ip:port
    upstream ceson-api {
        server 127.0.0.1:9997;
    }

    # 监听21001端口
    server {
        listen       21001;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        #location / {
        #    root   html;
        #    index  index.html index.htm;
        #}
        
        # 匹配url中带 /ceson-api/ 的所有请求,匹配成功后进入
        location /ceson-api/ {
            # 将请求转发至 http://上面声明的别名/xxx/
            proxy_pass http://ceson-api/serever-api/;
            proxy_redirect off;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header X-Forwarded-Port $server_port;
            client_max_body_size 500m;
            client_body_buffer_size 128k;
            proxy_connect_timeout 90;
            proxy_send_timeout 90;
            proxy_read_timeout 90;
            proxy_buffer_size 4k;
            proxy_buffers 4 32k;
            proxy_busy_buffers_size 64k;
            proxy_temp_file_write_size 64k;
        }
        
        # 匹配url中带 /group1/M00 的所有请求,匹配成功后进入
        location /group1/M00{
            # 在此目录下找文件
            alias   /home/work/fastDFS/fastdfs-data;
        }
        
        # 匹配url中带 / 的所有请求,匹配成功后进入(也就是默认访问的主页门户网站之类)
        location / {
            root /home/work/static/ceson-web;
        }

        #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;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }
    
    server {
        listen       21002;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        #location / {
        #    root   html;
        #    index  index.html index.htm;
        #}
        
        location /ceson-api/ {
            proxy_pass http://ceson-api/server-api/;
            proxy_redirect off;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header X-Forwarded-Port $server_port;
            client_max_body_size 500m;
            client_body_buffer_size 128k;
            proxy_connect_timeout 90;
            proxy_send_timeout 90;
            proxy_read_timeout 90;
            proxy_buffer_size 4k;
            proxy_buffers 4 32k;
            proxy_busy_buffers_size 64k;
            proxy_temp_file_write_size 64k;
        }
        
        location / {
            root /home/work/static/menhu;
        }

        #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;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }

    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,923评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,154评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,775评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,960评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,976评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,972评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,893评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,709评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,159评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,400评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,552评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,265评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,876评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,528评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,701评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,552评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,451评论 2 352

推荐阅读更多精彩内容