如果我們想通過 HTTP 訪問 FastDFS 中保存的圖片信息,需要借助其他工具實現(xiàn),Nginx 就是一個不錯的選擇,它是一個高性能的 HTTP 和反向代理 Web 服務(wù)器。關(guān)于 Nginx 更多的內(nèi)容請閱讀《一篇文章搞定 Nginx 反向代理與負載均衡 》。
那么問題來了:既然文件都上傳至 Storage 服務(wù)器了,在 Storage 服務(wù)器中直接安裝 Nginx 反向代理至文件資源路徑,好像就能實現(xiàn)瀏覽器直接訪問文件的效果。究竟是不是這樣玩的呢?繼續(xù)往下看。
其實真實環(huán)境中并不是這樣使用的,因為 FastDFS 是通過 Tracker 服務(wù)器將文件存儲在 Storage 服務(wù)器中,而且同組存儲服務(wù)器之間還需要進行文件復(fù)制,會有同步延遲的問題。
假設(shè) Tracker 服務(wù)器將文件上傳到了 192.168.10.102,上傳成功以后文件相關(guān)信息已經(jīng)返回給客戶端了。此時 FastDFS 的集群存儲機制會將這個文件同步到同組中的其他機器上進行存儲 192.168.10.103,在文件還沒有復(fù)制完成的情況下,客戶端如果用這個文件的相關(guān)信息在 192.168.10.103 上進行獲取,就會出現(xiàn)文件無法訪問的錯誤。
解決辦法就是使用 fastdfs-nginx-module,它可以重定向文件鏈接到源服務(wù)器進行獲取,避免客戶端由于復(fù)制延遲導(dǎo)致的文件無法訪問的錯誤。
配置 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 至服務(wù)器 /usr/local/src 目錄后并解壓。
unzip fastdfs-nginx-module-master.zip
修改配置
復(fù)制配置文件 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 編輯配置文件,主要關(guān)注以下部分。
# tracker 服務(wù)器的 IP 和端口
tracker_server = 192.168.10.101:22122
# url 地址是否包含組名/卷名
url_have_group_name = true
# 數(shù)據(jù)組/卷對應(yīng)的路徑地址
store_path0 = /fastdfs/storage/store
拷貝資源
復(fù)制 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 語言開發(fā)的,HTTP 模塊使用了 pcre 來解析正則表達式,且可以使用 zlib 對 HTTP 包的內(nèi)容進行 gzip 壓縮,Nginx 不僅支持 HTTP 協(xié)議,還支持 HTTPS,HTTPS 需要 openssl 提供支持,所以安裝 Nginx 之前必須先安裝它所依賴的環(huán)境。
yum install -y gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl-devel
安裝 Nginx
編譯并安裝。
# 切換至 nginx 的解壓目錄
cd /usr/local/src/nginx-1.18.0
# 創(chuàng)建 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 端口下添加以下內(nèi)容。關(guān)于 Nginx 啟動用戶的問題請根據(jù)自身實際環(huán)境進行配置。
location ~/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 實現(xiàn)文件服務(wù)器就到這里,其實目前的環(huán)境只是一個單節(jié)點的 FastDFS,如果要實現(xiàn)高可用,Tracker 和 Storage 都需要搭建多個節(jié)點形成集群環(huán)境,后續(xù)文章中會詳細的教大家搭建 FastDFS 的集群環(huán)境。下文我們先解決 JAVA 客戶端如何操作 FastDFS 實現(xiàn)文件上傳下載替換刪除。