• web访问 FastDFS 方法思路


           由于余老师在 V4.05 以后的版本就把内置 HTTP服务去掉了,所以就算这篇你测试上传成功了,你也访问不了。
    推荐大家结合 Nginx 使用 fastdfs-nginx-module 模块,

    搭建好fastdfs 系统后 就可以搭建web访问功能了。

    大体思路有以下两种

    1.直接安装nginx关于fastdfs集合的扩展模块  fastdfs-nginx-module  
        或者直接安装apache
    关于fastdfs集合的扩展模块  fastdfs-apache-module  
       fastdfs-nginx-module 的作用:
           在每一台storage上部署Nginx及 fastdfs-nginx-module扩展模块,如果当前storage节点找不到文件时
    会向源storage主机发起redirect或proxy动作
     
    2.安装web软件后通过配置nginx实现了fastdfs-nginx-module的功能

    第一种(推荐).
    下载nginx  和   插件fastdfs-nginx-module-master.zip   这两个软件
    (如果nginx已经安装好了,需要重新编译一遍,编译时把插件装上)
    (如果nginx使用yum安装的,需要下载yum相同版本安装包,重新编译)

    这里从头开始安装:
    解压:
    # tar -zxvf nginx-1.13.5.tar.gz
    # unzip fastdfs-nginx-module-master.zip 

    安装nginx和fastdfs插件:
     ./configure --prefix=/usr/local/nginx  --add-module=/home/packages/fastdfs-nginx-module-master/src

    连续报错:
    报错: the HTTP rewrite module requires the PCRE library.……
    解决:
    yum install pcre-devel.x86_64
    报错: the HTTP gzip module requires the zlib library.……
    解决:yum install zlib-devel.x86_64

    编译成功:
    adding module in /home/packages/fastdfs-nginx-module-master/src
     + ngx_http_fastdfs_module was configured

    Configuration summary
      + using system PCRE library
      + OpenSSL library is not used
      + using system zlib library

      nginx path prefix: "/usr/local/nginx"
      nginx binary file: "/usr/local/nginx/sbin/nginx"
      nginx modules path: "/usr/local/nginx/modules"
      nginx configuration prefix: "/usr/local/nginx/conf"
      nginx configuration file: "/usr/local/nginx/conf/nginx.conf"
      nginx pid file: "/usr/local/nginx/logs/nginx.pid"
      nginx error log file: "/usr/local/nginx/logs/error.log"
      nginx http access log file: "/usr/local/nginx/logs/access.log"
      nginx http client request body temporary files: "client_body_temp"
      nginx http proxy temporary files: "proxy_temp"
      nginx http fastcgi temporary files: "fastcgi_temp"
      nginx http uwsgi temporary files: "uwsgi_temp"
      nginx http scgi temporary files: "scgi_temp"

    继续安装:
    # make
    # make install

    进入nginx安装目录,修改其配置文件:
    # cd /usr/local/nginx/conf
    # vi nginx.conf
    增加以下内容:
     location /M00 {
                root /home/yuqing/fastdfs/data;
                ngx_fastdfs_module;
            }


    新建一个软连接:
    # ln -s /home/yuqing/fastdfs/data  /home/yuqing/fastdfs/data/M00

    复制并修改mod_fastdfs.conf文件:
    # cp mod_fastdfs.conf /etc/fdfs/
    # vi /etc/fdfs/mod_fastdfs.conf
    修改了这里:
    tracker_server=10.0.0.42:22122

    (复制这两个文件到fdfs配置文件,要不无法访问nginx)
    # cp /home/fastdfs-5.11/conf/http.conf /etc/fdfs/
    # cp /home/fastdfs-5.11/conf/mime.types /etc/fdfs/


    重启nginx:
    # /usr/local/nginx/sbin/nginx -s stop;
    # /usr/local/nginx/sbin/nginx

    报错:浏览器无法访问
    查看nginx错误日志 如下
     ERROR - file: ini_file_reader.c, line: 631, include file "http.conf" not exists, line: "#include http.conf"
     ERROR - file: /home/packages/fastdfs-nginx-module-master/src/common.c, line: 163, load conf file "/etc/fdfs/mod_fastdfs.conf" fail, ret code: 2
    解决:# cp /home/fastdfs-5.11/conf/http.conf /etc/fdfs/

     ERROR - file: shared_func.c, line: 968, file /etc/fdfs/mime.types not exist
    解决:# cp /home/fastdfs-5.11/conf/mime.types /etc/fdfs/

    访问nginx 成功



    下面看一下 mod_fastdfs.conf文件:
    # connect timeout in seconds
    # default value is 30s
    connect_timeout=2
    连接超时时间

    # network recv and send timeout in seconds
    # default value is 30s
    network_timeout=30
    发送接受数据 超时时间

    # the base path to store log files
    base_path=/tmp
    日志文件 位置

    # if load FastDFS parameters from tracker server
    # since V1.12
    # default value is false
    load_fdfs_parameters_from_tracker=true
    是否从 tracket服务器读取信息

    如果不从tracket服务器读取信息,以下三个参数生效
    # storage sync file max delay seconds
    # same as tracker.conf
    # valid only when load_fdfs_parameters_from_tracker is false
    # since V1.12
    # default value is 86400 seconds (one day)
    storage_sync_file_max_delay = 86400
          当load_fdfs_parameters_from_tracker设置为false时,本参数生效
    同步文件最大延迟时间,与tracker.conf文件中参数相同
    默认是一天

    # if use storage ID instead of IP address
    # same as tracker.conf
    # valid only when load_fdfs_parameters_from_tracker is false
    # default value is false
    # since V1.13
    use_storage_id = false
        是否使用storage_id 

    # specify storage ids filename, can use relative or absolute path
    # same as tracker.conf
    # valid only when load_fdfs_parameters_from_tracker is false
    # since V1.13
    storage_ids_filename = storage_ids.conf
         storage_id的位置

    # 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=10.0.0.42:22122
    tracket服务器读取信息,这个参数生效
    tracket服务器地址、端口

    # the port of the local storage server
    # the default value is 23000
    storage_server_port=23000
        本storage server监听端口

    # the group name of the local storage server
    group_name=group1
          group组名

    # 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 = false
    url链接中是否包含 组名
    类似 /M00/00/00/xxx 和group1/M00/00/00/xxx
    如果选择true 即包含组名,需要修改nginx配置文件
    将  location /M00    改为     location /group1/M00 

    # path(disk or mount point) count, default value is 1
    # must same as storage.conf
    store_path_count=1
          存储路径数量,必须和 storage.conf文件一致

    # 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=/home/yuqing/fastdfs
    #store_path1=/home/yuqing/fastdfs1
         存储路径地址、必须和 storage.conf文件一致

    # standard log level as syslog, case insensitive, value list:
    ### emerg for emergency
    ### alert
    ### crit for critical
    ### error
    ### warn for warning
    ### notice
    ### info
    ### debug
    log_level=info
        日志级别

    # set the log filename, such as /usr/local/apache2/logs/mod_fastdfs.log
    # empty for output to stderr (apache and nginx error_log file)
    log_filename=
         设置日志的名称,为空则记录到 http服务的错误日志里

    # response mode when the file not exist in the local file system
    ## proxy: get the content from other storage server, then send to client
    ## redirect: redirect to the original storage server (HTTP Header is Location)
    response_mode=proxy
    当文件在本地不存在时怎样回应
    • proxy 代理,从其它存储服务器获取内容,然后发送给客户
    • redirect  重定向原始存储服务器的http头

    # the NIC alias prefix, such as eth in Linux, you can see it by ifconfig -a
    # multi aliases split by comma. empty value means auto set by OS type
    # this paramter used to get all ip address of the local host
    # default values is empty
    if_alias_prefix=
    ????
    多种别名用逗号分隔,空值表示自动设置系统类型
    这个参数用于得到本机的所有ip

    # use "#include" directive to include HTTP config file
    # NOTE: #include is an include directive, do NOT remove the # before include
    #include http.conf
       使用#include指令 包含http配置文件
        注意:#include  这是一个包含指令,不要删除 include前面的 #

    # if support flv
    # default value is false
    # since v1.15
    flv_support = true
       是否支持flv文件,默认不支持

    # flv file extension name
    # default value is flv
    # since v1.15
    flv_extension = flv
        flv文件的扩展名,默认是flv

    # set the group count
    # set to none zero to support multi-group on this storage server
    # set to 0  for single group only
    # groups settings section as [group1], [group2], ..., [groupN]
    # default value is 0
    # since v1.14
    group_count = 0
    设置组的数量
    设置没有0 ,支持多个group组在这个存储服务器上
    设置0 为只有一个组
    如果服务器上多个组,组的设置 就像这样 [group1], [group2], ..., [groupN]
    默认是0,一组


    # group settings for group #1
    # since v1.14
    # when support multi-group on this storage server, uncomment following section
    #[group1]
    #group_name=group1
    #storage_server_port=23000
    #store_path_count=2
    #store_path0=/home/yuqing/fastdfs
    #store_path1=/home/yuqing/fastdfs1
       组1的设置
       若本存储服务器支持多组,取消下面的注释


    # group settings for group #2
    # since v1.14
    # when support multi-group, uncomment following section as neccessary
    #[group2]
    #group_name=group2
    #storage_server_port=23000
    #store_path_count=1
    #store_path0=/home/yuqing/fastdfs
    组2的设置
    若本存储服务器支持多组,取消下面的注释



    二、直接使用 web访问
    这个比较简单,只需要把web根目录指定到 fastdfs的存储目录就可以了


    三、web访问fastdfs 的几种思路

    3.1  只使用 组名
    适用于图片量大、group组多、每个group组都有备份
    访问地址类似于   picture.xxx.com/groupx/M00/……jpg
    只需要一个域名;
    上传图片后 将返回的值 直接+域名  保存为图片名 :picture.xxx.com/groupx/M00/……jpg
    前端使用一个nginx做反向代理+负载均衡  配置如下:
    upstream group1{
       server group1_storage1:80;
       server group1_storage2:80;
    }
    upstream group2{
       server group2_storage1:80;
       server group2_storage2:80;
    }

    location /group1/M00{
    proxy_pass http://group1;
    }
    location /group2/M00{
    proxy_pass http://group2;
    }

    注意:group1 和 group2 中 机器要正确配置 nginx.conf  storage.conf 和 mod_fastdfs.conf 文件
    nginx.conf中
     location /group1/M00 {
                root /home/yuqing/fastdfs/data;
                ngx_fastdfs_module;
            }

     特别注意  mod_fastdfs.conf文件中  这两项 组名、url是否包含group名
    group_name=
    url_have_group_name =


    3.2 只使用 域名 (已部署生产环境)
    适用于图片较少,每个group组都是单机跑,没有备份的情况
    访问地址类似于   picturex.xxx.com/M00/……jpg
    需要多个域名;
    上传图片后 将返回的值分开后 结合域名 生成图片名   picturex.xxx.com/M00/……jpg
    前端使用一个nginx做反向代理  配置如下:
    upstream group1{
       server group1_storage1:80;
    }
    upstream group2{
       server group2_storage1:80;
    }

    location /group1/M00{
    proxy_pass http://group1;
    }
    location /group2/M00{
    proxy_pass http://group2;
    }

    注意:group1 和 group2 中 机器要正确配置 nginx.conf  storage.conf
    由于每组没有备份, mod_fastdfs.conf 也不用安装了
    nginx.conf中
     location /group1/M00 {
                root /home/yuqing/fastdfs/data;
            }


    3.3 域名和组名同时使用  
    适用于图片量大、业务量多、group组多、每个group组都有备份
    访问地址类似于   picturex.xxx.com/groupx/M00/……jpg
    只需要一个域名;
    上传图片后 将返回的值+改动域名  保存为图片名 :picturex.xxx.com/groupx/M00/……jpg
    使用多个域名对应一个nginx  做反向代理+负载均衡  配置如下:
     
    upstream group1{
       server group1_storage1:80;
       server group1_storage2:80;
    }
    upstream group2{
       server group2_storage1:80;
       server group2_storage2:80;
    }

    server {
            listen       80;
            server_name  picture1.xxx.com;
           ……
    location /group1/M00{
    proxy_pass http://group1;
    }
    location /group2/M00{
    proxy_pass http://group2;
    }
    }

    server {
            listen       80;
            server_name  picture2.xxx.com;
           ……
    }
    注意:group1 和 group2 中 机器要正确配置 nginx.conf  storage.conf 和 mod_fastdfs.conf 文件
    nginx.conf中
     location /group1/M00 {
                root /home/yuqing/fastdfs/data;
                ngx_fastdfs_module;
            }

     特别注意  mod_fastdfs.conf文件中  这两项 组名、url是否包含group名
    group_name=
    url_have_group_name =


  • 相关阅读:
    MySQL之事务
    TP5之查询那些事
    TP5之上传多张图片
    PhpStorm之设置字体大小
    Git入门
    TP5之自定义分页样式
    TP之安全机制
    Navicat Premium连接服务器数据库
    IEnumerable 与 IEnumerable<T>
    关于递归
  • 原文地址:https://www.cnblogs.com/centos2017/p/7896726.html
Copyright © 2020-2023  润新知