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的設置
若本存儲服務器支持多組,取消下面的註釋



2、直接使用 web訪問
這個比較簡單,只須要把web根目錄指定到 fastdfs的存儲目錄就能夠了


3、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 =
相關文章
相關標籤/搜索