在網站架構初期,一般將用戶上傳的圖片,附件等資料,保存在相應服務器下,但隨着網站數據量的增長,圖片服務器漸漸成爲整個網站的短板,緣次催生了使用fastfds的想法。html
FastDFS是一個開源的輕量級分佈式文件系統,它對文件進行管理,功能包括:文件存儲、文件同步、文件訪問(文件上傳、文件下載)等,解決了大容量存儲和負載均衡的問題。nginx
在大多數業務場景中,每每須要爲FastDFS存儲的文件提供http下載服務,而儘管FastDFS在其storage及tracker都內置了http服務, 但性能表現卻不盡如人意;因此fastDFS增長了基於當前主流web服務器的擴展模塊(包括nginx/apache),其用意在於利用web服務器直接對本機storage數據文件提供http服務,以提升文件下載的性能git
FastDFS內置防盜鏈系統防止別人經過一些技術手段繞過本站的資源展現頁面,盜用本站的資源,讓繞開本站資源展現頁面的資源連接失效。github
其加密過程爲:密匙=加密函數(文件名 + 時間 + 密碼). 最後生成的地址形如:http://ip:port/group1/M00/00/00/wKgAV1giDreAR9SvAAN88BNmIM8434.jpg?token=7cdb525ee2a43c4c4df5b40eacd7310f&ts=1478660360web
FastDFS服務端有兩個角色:跟蹤器(tracker)和存儲節點(storage)。跟蹤器主要作調度工做,在訪問上起負載均衡的做用。 apache
說明: 在每一臺storage服務器主機上部署Nginx及FastDFS擴展模塊,由Nginx模塊對storage存儲的文件提供http下載服務, 僅噹噹前storage節點找不到文件時會向源storage主機發起redirect或proxy動做。 注:圖中的tracker可能爲多個tracker組成的集羣;且當前FastDFS的Nginx擴展模塊支持單機多個group的狀況vim
storage_id:指storage server的id,從FastDFS4.x版本開始,tracker能夠對storage定義一組ip到id的映射,以id的形式對storage進行管理。而文件名寫入的再也不是storage的ip而是id,這樣的方式對於數據遷移十分有利。 storage_sync_file_max_delay:指storage節點同步一個文件最大的時間延遲,是一個閾值;若是當前時間與文件建立時間的差距超過該值則認爲同步已經完成。 anti_steal_token:指文件ID防盜鏈的方式,FastDFS採用token認證的方式進行文件防盜鏈檢查。服務器
libfastcommon git clone https://github.com/happyfish100/libfastcommon.git fastdfs https://github.com/happyfish100/fastdfs/releases nginx http://nginx.org/en/download.html FastDFS Nginx Module Source Code https://sourceforge.net/projects/fastdfs/files/FastDFS%20Nginx%20Module%20Source%20Code/
//說明:libfastcommon是fastDFS的依賴包,所以先裝libfastcommon # cd libfastcommon # ./make.sh # ./make.sh install //libfastcommon.so 默認安裝到了/usr/lib64/libfastcommon.so,而FastDFS主程序設置的lib目錄是/usr/local/lib,所以須要設置軟連接(若是已存在,能夠忽略)。 # ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so # ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so
# cd FastDFS # ./make.sh # ./make.sh install # ll /usr/bin/fdfs_* //查看/etc/fdfs文件,若是存在則安裝成功
# vim tracker.conf disabled=false #啓用配置文件 port=22122 #設置 tracker 的端口號 base_path=/data/fastdfs/tracker #設置 tracker 的數據文件和日誌目錄(需預先建立) http.server_port=8080 #設置 http 端口號 注:這個http.server_port=8080 指的是在tracker服務器上啓動http服務進程,如:apache或者nginx 啓動時所監聽的端口,這個彷佛是能夠不用管的,由於tracker自己就沒有安裝http服務
# fdfs_trackerd /etc/fdfs/tracker.conf restart
# netstat -antp | grep trackerd
# less /data/fastdfs/tracker/logs/trackerd.log
# vim storage.conf disabled=false#啓用配置文件 group_name=group1 #組名,根據實際狀況修改 port=23000 #設置 storage 的端口號 base_path=/data/fastdfs #設置 storage 的根目錄用於存儲數據和日誌(需預先建立) store_path_count=1 #存儲路徑個數,須要和 store_path 個數匹配 store_path0=/data/fastdfs/storage #存儲路徑 tracker_server=10.10.10.124:22122 #tracker 服務器的 IP 地址和端口號 http.server_port=8080 #設置storage上啓動的http服務的端口號,如安裝的nginx的端口號
# fdfs_storaged /etc/fdfs/storage.conf restart
# netstat -antp | grep storage
# less /data/fastdfs/storage/logs/storaged.log
# fdfs_monitor /etc/fdfs/storage.conf # fdfs_monitor /etc/fdfs/client.conf 若是查看到ACTIVE,則說明成功
# cd nginx-1.10.1 # cp -rf /usr/include/fast* /usr/local/include/ # ./configure --prefix=/usr/local/nginx --add-module=../fastdfs-nginx-module/src # make # make install # vim /usr/local/nginx/conf/nginx.conf //修改成以下: listen 8080; location ~/group1/M00 { root /data/fastdfs/storage/data; ngx_fastdfs_module; } //說明:安裝過程當中可能由於依賴軟件沒有安裝而報錯,須要安裝,安裝命令以下: yum install pcre* yum install zlib*
# vim /etc/fdfs/mod_fastdfs.conf base_path=/data/fastdfs #保存日誌目錄 tracker_server=10.10.10.124:22122 #tracker 服務器的 IP 地址以及端口號 storage_server_port=23000 #storage 服務器的端口號 group_name=group1 #當前服務器的 group 名 url_have_group_name = true #文件 url 中是否有 group 名 store_path_count=1 #存儲路徑個數,須要和 store_path 個數匹配 store_path0=/data/fastdfs/storage #存儲路徑 http.need_find_content_type=true #從文件擴展名查找文件類型 ( nginx 時 爲true) group_count = 1 #設置組的個數 [group1] group_name=group1 storage_server_port=23000 store_path_count=1 store_path0=/data/fastdfs/storage
# vim /etc/fdfs/http.conf http.anti_steal.check_token=true #開啓token認證
# /usr/local/nginx/sbin/nginx (第一次開啓的命令) # /usr/local/nginx/sbin/nginx –s reload(重啓的命令)
less /usr/local/nginx/logs/error.log