上一篇文章《FastDFS 分布式文件系統詳解》中帶大家詳細了解它的核心概念,架構體系及 FastDFS 環境的搭建與使用。但是此時還無法通過 HTTP 對文件進行訪問,這篇文章將帶大家解決這個問題。
如果我們想通過 HTTP 訪問 FastDFS 中保存的圖片信息,需要借助其他工具實現,Nginx 就是一個不錯的選擇,它是一個高性能的 HTTP 和反向代理 Web 服務器。關於 Nginx 更多的內容請閱讀《一篇文章搞定 Nginx 反向代理與負載均衡》。
那么問題來了:既然文件都上傳至 Storage 服務器了,在 Storage 服務器中直接安裝 Nginx 反向代理至文件資源路徑,好像就能實現瀏覽器直接訪問文件的效果。究竟是不是這樣玩的呢?繼續往下看。
其實真實環境中並不是這樣使用的,因為 FastDFS 是通過 Tracker 服務器將文件存儲在 Storage 服務器中,而且同組存儲服務器之間還需要進行文件復制,會有同步延遲的問題。
假設 Tracker 服務器將文件上傳到了 192.168.10.102,上傳成功以后文件相關信息已經返回給客戶端了。此時 FastDFS 的集群存儲機制會將這個文件同步到同組中的其他機器上進行存儲 192.168.10.103,在文件還沒有復制完成的情況下,客戶端如果用這個文件的相關信息在 192.168.10.103 上進行獲取,就會出現文件無法訪問的錯誤。
解決辦法就是使用 fastdfs-nginx-module
,它可以重定向文件鏈接到源服務器進行獲取,避免客戶端由於復制延遲導致的文件無法訪問的錯誤。
配置 fastdfs-nginx-module
下載資源
Nginx 整合 FastDFS 時 Nginx 需要添加 fastdfs-nginx-module
模塊。直接通過 Github:https://github.com/happyfish100/fastdfs-nginx-module 下載壓縮包或者使用 git 命令下載,或者通過資源地址:https://sourceforge.net/projects/fastdfs/files/ 下載。
下載以后,上傳資源 fastdfs-nginx-module-master.zip
至服務器 /usr/local/src
目錄后並解壓。
unzip fastdfs-nginx-module-master.zip
修改配置
復制配置文件 mod_fastdfs.conf
到 /etc/fdfs
目錄中。
cp /usr/local/src/fastdfs-nginx-module-master/src/mod_fastdfs.conf /etc/fdfs/
vim /etc/fdfs/mod_fastdfs.conf
編輯配置文件,主要關注以下部分。
# tracker 服務器的 IP 和端口
tracker_server = 192.168.10.101:22122
# url 地址是否包含組名/卷名
url_have_group_name = true
# 數據組/卷對應的路徑地址
store_path0 = /fastdfs/storage/store
拷貝資源
復制 fastdfs
安裝包中的兩個配置文件 http.conf
和 mime.types
到 /etc/fdfs
目錄中。
cp /usr/local/src/fastdfs-master/conf/http.conf /etc/fdfs/
cp /usr/local/src/fastdfs-master/conf/mime.types /etc/fdfs/
安裝 Nginx
下載資源
下載 Nginx 並解壓。
# 下載 nginx 壓縮包
wget -P /usr/local/src http://nginx.org/download/nginx-1.18.0.tar.gz
# 解壓
tar -zxvf /usr/local/src/nginx-1.18.0.tar.gz -C /usr/local/src
安裝依賴
Nginx 是基於 C 語言開發的,HTTP 模塊使用了 pcre 來解析正則表達式,且可以使用 zlib 對 HTTP 包的內容進行 gzip 壓縮,Nginx 不僅支持 HTTP 協議,還支持 HTTPS,HTTPS 需要 openssl 提供支持,所以安裝 Nginx 之前必須先安裝它所依賴的環境。
yum install -y gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl-devel
安裝 Nginx
編譯並安裝。
# 切換至 nginx 的解壓目錄
cd /usr/local/src/nginx-1.18.0
# 創建 nginx 的安裝目錄
mkdir -p /usr/local/nginx
# 添加 fastdfs-nginx-module 模塊,指定 nginx 的安裝路徑
./configure --add-module=/usr/local/src/fastdfs-nginx-module-master/src --prefix=/usr/local/nginx/
# 編譯並安裝
make && make install
配置 Nignx
vim /usr/local/nginx/conf/nginx.conf
編輯配置文件,在 80 端口下添加以下內容。關於 Nginx 啟動用戶的問題請根據自身實際環境進行配置。
location<!--StartFragment-->\~<!--EndFragment-->/group[0-9]/ {
ngx_fastdfs_module;
}
測試
啟動 Nginx,命令為:/usr/local/nginx/sbin/nginx
此時客戶端上傳圖片以后得到文件名為:group1/M00/00/00/wKgKZl9tkTCAJAanAADhaCZ_RF0495.jpg
瀏覽器訪問:http://192.168.10.102/group1/M00/00/00/wKgKZl9tkTCAJAanAADhaCZ_RF0495.jpg 效果如下:
至此 Nginx 整合 FastDFS 實現文件服務器就到這里,其實目前的環境只是一個單節點的 FastDFS,如果要實現高可用,Tracker
和 Storage
都需要搭建多個節點形成集群環境,后續文章中會詳細的教大家搭建 FastDFS 的集群環境。下文我們先解決 Java 客戶端如何操作 FastDFS 實現文件上傳下載替換刪除。
本文采用 知識共享「署名-非商業性使用-禁止演繹 4.0 國際」許可協議
。
🤗 您的點贊
和轉發
是對我最大的支持。
📢 關注公眾號 哈嘍沃德先生
「文檔 + 視頻」每篇文章都配有專門視頻講解,學習更輕松噢 ~