Nginx+FastDFS搭建圖片服務器........................................................................................ 1
1. 環境.............................................................................................................................. 7
1.1. centos7.................................................................................................................. 7
1.1.1. yum install -y gcc-c++ #需要依賴gcc....................................................... 7
1.1.2. yum install -y pcre #用於支持rewrite模塊 pcre-8.32-17...................... 8
1.1.3. yum install -y libevent #FastDFS依賴libevent庫 libevent-2.0.21-4.el7.x86_64 8
1.1.4. yum install -y zlib zlib-devel #用於支持gzip模塊 zlib-1.2.7-17.el7.x86_64 8
2. 依賴............................................................................................................................. 8
2.1. libfastcommon-master.zip #libfastcommon包含了FastDFS運行所需要的一些基礎 8
2.1.1. https://github.com/happyfish100/libfastcommon/releases......................... 8
2.2. fastdfs-nginx-module-master.zip.......................................................................... 8
2.2.1. https://codeload.github.com/happyfish100/fastdfs-nginx-module/zip/master 8
2.3. FastDFS版本:fastdfs-5.11.zip............................................................................ 8
2.3.1. https://github.com/happyfish100/fastdfs/archive/V5.11.zip........................ 8
2.4. Nginx版本:nginx-1.14.tar.gz............................................................................. 8
2.4.1. http://nginx.org/en/download.html.............................................................. 8
3. 安裝依賴..................................................................................................................... 8
3.1. libfastcommon...................................................................................................... 8
3.1.1. 安裝libfastcommon...................................................................................... 8
3.1.1.1. unzip libfastcommon-1.0.39.zip............................................................. 9
3.1.1.2. mv libfastcommon-1.0.39 /usr/local/libfastcommon............................ 9
3.1.1.3. cd /usr/local/libfastcommon/................................................................ 9
3.1.1.4. ./make.sh #編譯..................................................................................... 9
3.1.1.5. ./make.sh install #安裝.......................................................................... 9
3.1.1.6. # 檢查確認/usr/lib64 和 /usr/lib 目錄下都生成了 libfastcommon.so (有些版本可能/usr/lib下不會生成) ls /usr/lib64 | grep libfastcommon.so ls /usr/lib | grep libfastcommon.so 9
3.2. tracker.................................................................................................................. 9
3.2.1. 安裝tracker.................................................................................................. 9
3.2.1.1. unzip fastdfs-5.11.zip.............................................................................. 9
3.2.1.2. mv fastdfs-5.11 /usr/local/FastDFS........................................................ 9
3.2.1.3. cd /usr/local/FastDFS/............................................................................ 9
3.2.1.4. ./make.sh && ./make.sh install #編譯之後接著進行安裝.................. 9
3.2.1.5. #確認安裝成功,沒有報錯後,拷貝配置文件到/etc/fdfs...................... 9
3.2.1.6. cp /usr/local/FastDFS/conf/* /etc/fdfs/................................................. 9
3.2.1.7. #,進入/etc/fdfs 目錄, 如果沒有tracker.conf就拷貝一份tracker.conf.sample 去掉sample 9
3.2.1.8. cp tracker.conf.sample track.conf......................................................... 9
3.2.2. 配置tracker................................................................................................ 10
3.2.2.1. 配置tracker.conf................................................................................. 10
3.2.2.1.1. vi track.conf # 修改以下配置....................................................... 10
3.2.2.1.1.1. base_path=/home/fastdfs #基礎目錄,以後的data 和日誌目錄都會放在此目錄下 http.server_port=80 #配置http服務端口,這個端口跟後面nginx的監聽端口對應 10
3.2.2.1.2. 創建目錄........................................................................................ 10
3.2.2.1.2.1. mkdir /home/fastdfs............................................................... 10
3.2.3. 啟動tracker................................................................................................ 10
3.2.3.1. /usr/bin/fdfs_trackerd /etc/fdfs/track.conf restart............................. 10
3.2.4. 檢查是否啟動成功..................................................................................... 10
3.2.4.1. #檢查是否啟動成功:默認端口22122 ps -ef | grep fdfs................... 10
3.2.4.2. #檢查/home/fastdfs下是否生成data / logs 兩個目錄 ls /home/fastdfs/ 10
3.3. storage............................................................................................................... 10
3.3.1. 安裝storage................................................................................................ 10
3.3.1.1. cd /etc/fdfs........................................................................................... 10
3.3.1.1.1. #如果沒有storage.conf 拷貝一份storage.conf.sample 命名為storage.conf cp storage.conf.sample storage.conf..................................................................... 11
3.3.1.1.2. #配置storage.conf vi storage.conf #修改如下配置..................... 11
3.3.1.1.2.1. group_name=group1 #配置組名,同一個組的storage 互為備份 11
3.3.1.1.2.2. base_path=/home/fastdfs #基礎目錄.................................... 11
3.3.1.1.2.3. #store存放文件的位置(store_path), 可以配置多個, 記得創建路徑 store_path0=/home/fdfs_storage................................................................. 11
3.3.1.1.2.4. #如果有多個掛載磁盤則定義多個store_path,如下 #store_path1=..... #store_path2=............................................................................................... 11
3.3.1.1.2.5. #配置tracker服務器:IP,阿里雲服務器如果需要外部訪問請配置公網ip, 不要使用私有ip tracker_server=192.168.112.130:22122.............................................. 11
3.3.1.1.2.5.1. 子主題 1.......................................................................... 11
3.3.1.1.2.5.1.1. #如果有多個tracker則配置多個tracker.............. 11
3.3.1.1.2.5.1.2. #tracker_server=192.168.112.131:22122................. 11
3.3.1.1.2.6. #配置http端口...................................................................... 11
3.3.1.1.2.6.1. http.server_port=80......................................................... 11
3.3.2. 創建fdfs-storage目錄............................................................................. 11
3.3.2.1. mkdir -p /home/fdfs_storage................................................................ 12
3.3.3. 啟動storage.............................................................................................. 12
3.3.3.1. /usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart......................... 12
3.3.4. 檢查是否啟動成功................................................................................... 12
3.3.4.1. fdfs_monitor /etc/fdfs/storage.conf..................................................... 12
3.3.5. 查看fdfs狀態........................................................................................... 12
3.3.5.1. ps -ef | grep fdfs.................................................................................... 12
3.3.6. 查看目錄是否創建,/home/fdfs_storage/data 應該會自動生成256個文件夾 12
3.3.6.1. ls /home/fdfs_storage/data.................................................................. 12
4. 測試上傳文件........................................................................................................... 12
4.1. 自帶測試客戶端............................................................................................... 12
4.1.1. cd /etc/fdfs................................................................................................ 12
4.1.2. cp client.conf.sample client.conf.............................................................. 12
4.1.3. 修改client.conf......................................................................................... 12
4.1.3.1. vi client.conf.......................................................................................... 12
4.1.3.1.1. base_path=/home/fastdfs.............................................................. 12
4.1.3.1.2. tracker_server=192.168.112.130:22122........................................ 12
4.1.4. 測試上傳圖片........................................................................................... 12
4.1.4.1. /usr/bin/fdfs_test /etc/fdfs/client.conf upload /download/123.jpg..... 13
4.1.4.1.1. 成功提示........................................................................................ 13
4.1.5. 檢查文件是否存在................................................................................... 13
4.1.5.1. cd /home/fdfs_storage/data/00/00 #查看是否存在........................... 13
4.1.6. 目前還不行進行下載............................................................................... 13
5. FastDFS 和Nginx整合............................................................................................. 13
5.1. fastdfs-nginx-module......................................................................................... 13
5.1.1. 解壓和安裝............................................................................................... 13
5.1.1.1. 解壓....................................................................................................... 13
5.1.1.1.1. unzip fastdfs-nginx-module-master.zip.......................................... 13
5.1.1.2. 遷移到指定目錄................................................................................... 13
5.1.1.2.1. mv fastdfs-nginx-module-master /usr/local/fastdfs-nginx-module 13
5.1.1.3. 修改config文件................................................................................... 13
5.1.1.3.1. # 將文件中的所有 /usr/local/ 路徑改為 /usr/ , #如果後面步驟中編譯nginx報錯把下面兩項做以下修改 ngx_module_incs="/usr/include/fastdfs /usr/include/fastcommon/" CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/". 13
5.1.1.4. 拷貝配置文件到/etc/fdfs..................................................................... 13
5.1.1.4.1. cp mod_fastdfs.conf /etc/fdfs/ #修改 /etc/fdfs/mod_fastdfs.conf ; vi /etc/fdfs/mod_fastdfs.conf #======修改以下內容======== base_path=/home/fastdfs #保存日誌的路徑 tracker_server=192.168.112.130:22122 #track_server配置的服務端口 url_have_group_name=true #url中是否包含group名稱 store_path0=/home/fdfs_storage #指定文件存儲路徑(必須和storage.conf配置相同).................................................................................. 14
5.1.1.5. 檢查/usr/lib 和usr/lib64下是否有 libfdfsclient.so........................... 14
5.1.1.5.1. ls /usr/lib | grep libfdfsclient.so ls /usr/lib64 | grep libfdfsclient.so 14
5.1.1.6. 創建nginx/client目錄.......................................................................... 14
5.1.1.6.1. mkdir -p /var/temp/nginx/client.................................................... 14
5.2. 安裝nginx......................................................................................................... 14
5.2.1. 解壓到指定目錄....................................................................................... 14
5.2.1.1. tar -zxvf nginx-1.14.0.tar.gz -C /usr/local/............................................ 14
5.2.2. 編譯nginx,加入fastdfs模塊................................................................... 14
5.2.2.1. #進入解壓目錄, 日誌目錄可自己定義,主要是add-modoule cd /usr/local/nginx-1.14.0 #添加模塊 ./configure --prefix=/usr/local/nginx --add-module=/usr/local/fastdfs-nginx-module/src 14
5.2.3. 編譯並安裝............................................................................................... 15
5.2.3.1. #在nginx1.14.0目錄下執行 make && make install.......................... 15
5.2.4. 修改編譯後nginx配置............................................................................ 15
5.2.4.1. vi /usr/local/nginx/conf/nginx.conf #======添加配置=========== server { listen 80; server_name 192.168.112.130; location /group1/M00/ { root /home/fdfs_storage/data; ngx_fastdfs_module; } }................................................................................... 15
5.2.5. 啟動nginx................................................................................................. 15
5.2.5.1. /usr/local/nginx/sbin/nginx................................................................... 15
5.2.6. 檢查是否啟動成功................................................................................... 15
5.2.6.1. ps -ef | grep nginx................................................................................. 15
5.2.7. 測試上傳圖片........................................................................................... 15
5.2.7.1. /usr/bin/fdfs_test /etc/fdfs/client.conf upload /download/123.jpg..... 15
5.2.8. 查看nginx的日誌.................................................................................... 15
5.2.8.1. tail -f -n 100 /var/log/nginx/access.log................................................ 15
6. 項目中如何使用fastdfs........................................................................................... 15
6.1. 導入jar............................................................................................................. 16
6.1.1. maven........................................................................................................ 16
6.1.1.1.
6.2. 配置文件........................................................................................................... 16
6.2.1. fdfs.conf..................................................................................................... 16
6.2.1.1. # 連接tracker服務器超時時長 connect_timeout = 10 # socket連接超時時長 network_timeout = 30 # 文件內容編碼 charset = UTF-8 # tracker服務器端口 http.tracker_http_port = 80 http.anti_steal_token = no #密碼 http.secret_key = 123456 # tracker服務器IP和端口(可以寫多個) tracker_server = 192.168.58.128:22122............................................................... 16
7. 測試代碼................................................................................................................... 16
7.1. 新建項目........................................................................................................... 17
7.1.1. demo.......................................................................................................... 17
7.1.1.1. public class FastdfsTest { @Test public void testUpload() throws Exception { //1、把FastDFS提供的jar包添加到工程中 //2、初始化全局配置。加載一個配置文件。 ClientGlobal.init("F:\wolf-shop\src\main\resources\fdfs.conf"); //3、創建一個TrackerClient對象。 TrackerClient trackerClient = new TrackerClient(); //4、創建一個TrackerServer對象。 TrackerServer trackerServer = trackerClient.getConnection(); //5、聲明一個StorageServer對象,null。 StorageServer storageServer = null; //6、獲得StorageClient對象。 StorageClient storageClient = new StorageClient(trackerServer, storageServer); //7、直接調用StorageClient對象方法上傳文件即可。 String[] result = storageClient.upload_file("F:\redis_demo\src\main\resources\logo.png", "png", null); StringBuilder sb = new StringBuilder("http://192.168.112.130/"); sb.append(result[0]).append("/").append(result[1]); System.out.println("圖片訪問地址: "+sb.toString()); } }.............................................................................................. 17
8. 權限控制................................................................................................................... 17
8.1. 服務端開啟token驗證.................................................................................... 17
8.1.1. 修改http.conf........................................................................................... 18
8.1.1.1. 修改http.conf # vim /etc/fdfs/http.conf 設置為true表示開啟token驗證 http.anti_steal.check_token=true 設置token失效的時間單位為秒(s) http.anti_steal.token_ttl=1800 密鑰,跟客戶端配置文件的fastdfs.http_secret_key保持一致 http.anti_steal.secret_key=FASTDFS1234567890 如果token檢查失敗,返回的頁面 http.anti_steal.token_check_fail=/ljzsg/fastdfs/page/403.html........................... 18
8.2. 配置客戶端....................................................................................................... 18
8.2.1. # token 防盜鏈功能 fastdfs.http_anti_steal_token=true # 密鑰 fastdfs.http_secret_key=FASTDFS1234567890......................................................... 18
8.3. 客戶端生成token............................................................................................. 18
8.3.1. 訪問文件需要帶上生成的token以及unix時間戳,所以返回的token是token和時間戳的拼接 18
8.3.1.1. package com.example.nginxdfs.test; import org.csource.common.MyException; import org.csource.fastdfs.*; import org.junit.Test; import java.io.UnsupportedEncodingException; import java.security.NoSuchAlgorithmException; import java.time.Instant; public class FastdfsTest { @Test public void testUpload() throws Exception { //1、把FastDFS提供的jar包添加到工程中 //2、初始化全局配置。加載一個配置文件。 ClientGlobal.init("F:\\gitDemo\\nginxdfs\\src\\main\\resources\\fdfs.conf"); //3、創建一個TrackerClient對象。 TrackerClient trackerClient = new TrackerClient(); //4、創建一個TrackerServer對象。 TrackerServer trackerServer = trackerClient.getConnection(); //5、聲明一個StorageServer對象,null。 StorageServer storageServer = null; //6、獲得StorageClient對象。 StorageClient storageClient = new StorageClient(trackerServer, storageServer); //7、直接調用StorageClient對象方法上傳文件即可。 String[] result = storageClient.upload_file("F:\\gitDemo\\nginxdfs\\src\\main\\resources\\1.jpg", "png", null); StringBuilder sb = new StringBuilder("http://10.2.45.57/"); sb.append(result[0]).append("/").append(result[1]); String httpSecretKey="FastDFS1234567890charleslai"; String lastUrl= getToken(sb.toString(),httpSecretKey); System.out.println("圖片訪問地址: "+sb.toString()+"?"+lastUrl); } /** * 獲取訪問服務器的token,拼接到地址後面 * * @param getFilename 文件路徑 group1/M00/00/00/wKgzgFnkTPyAIAUGAAEoRmXZPp876.jpeg * @param httpSecretKey 密鑰 * @return 返回token,如: token=078d370098b03e9020b82c829c205e1f&ts=1508141521 */ public static String getToken(String getFilename, String httpSecretKey){ // unix seconds int ts = (int) Instant.now().getEpochSecond(); // token String token = "null"; try { token = ProtoCommon.getToken(getFilename, ts, httpSecretKey); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (MyException e) { e.printStackTrace(); } StringBuilder sb = new StringBuilder(); sb.append("token=").append(token); sb.append("&ts=").append(ts); return sb.toString(); } }.......................................................................................... 18
1. 環境
1.1. centos7
1.1.1. yum install -y gcc-c++ #需要依賴gcc
1.1.2. yum install -y pcre #用於支持rewrite模塊 pcre-8.32-17
1.1.3. yum install -y libevent #FastDFS依賴libevent庫 libevent-2.0.21-4.el7.x86_64
1.1.4. yum install -y zlib zlib-devel #用於支持gzip模塊 zlib-1.2.7-17.el7.x86_64
2. 依賴
2.1. libfastcommon-master.zip #libfastcommon包含了FastDFS運行所需要的一些基礎
2.1.1. https://github.com/happyfish100/libfastcommon/releases
2.2. fastdfs-nginx-module-master.zip
2.2.1. https://codeload.github.com/happyfish100/fastdfs-nginx-module/zip/master
2.3. FastDFS版本:fastdfs-5.11.zip
2.3.1. https://github.com/happyfish100/fastdfs/archive/V5.11.zip
2.4. Nginx版本:nginx-1.14.tar.gz
2.4.1. http://nginx.org/en/download.html
3. 安裝依賴
3.1. libfastcommon
3.1.1. 安裝libfastcommon
3.1.1.1. unzip libfastcommon-1.0.39.zip
3.1.1.2. mv libfastcommon-1.0.39 /usr/local/libfastcommon
3.1.1.3. cd /usr/local/libfastcommon/
3.1.1.4. ./make.sh #編譯
3.1.1.5. ./make.sh install #安裝
3.1.1.6. # 檢查確認/usr/lib64 和 /usr/lib 目錄下都生成了 libfastcommon.so (有些版本可能/usr/lib下不會生成)
ls /usr/lib64 | grep libfastcommon.so
ls /usr/lib | grep libfastcommon.so
3.2. tracker
3.2.1. 安裝tracker
3.2.1.1. unzip fastdfs-5.11.zip
3.2.1.2. mv fastdfs-5.11 /usr/local/FastDFS
3.2.1.3. cd /usr/local/FastDFS/
3.2.1.4. ./make.sh && ./make.sh install #編譯之後接著進行安裝
3.2.1.5. #確認安裝成功,沒有報錯後,拷貝配置文件到/etc/fdfs
3.2.1.6. cp /usr/local/FastDFS/conf/* /etc/fdfs/
3.2.1.7. #,進入/etc/fdfs 目錄, 如果沒有tracker.conf就拷貝一份tracker.conf.sample 去掉sample
3.2.1.8. cp tracker.conf.sample track.conf
3.2.2. 配置tracker
3.2.2.1. 配置tracker.conf
3.2.2.1.1. vi track.conf # 修改以下配置
3.2.2.1.1.1. base_path=/home/fastdfs #基礎目錄,以後的data 和日誌目錄都會放在此目錄下
http.server_port=80 #配置http服務端口,這個端口跟後面nginx的監聽端口對應
3.2.2.1.2. 創建目錄
3.2.2.1.2.1. mkdir /home/fastdfs
3.2.3. 啟動tracker
3.2.3.1. /usr/bin/fdfs_trackerd /etc/fdfs/track.conf restart
3.2.4. 檢查是否啟動成功
3.2.4.1. #檢查是否啟動成功:默認端口22122
ps -ef | grep fdfs
3.2.4.2. #檢查/home/fastdfs下是否生成data / logs 兩個目錄
ls /home/fastdfs/
3.3. storage
3.3.1. 安裝storage
3.3.1.1. cd /etc/fdfs
3.3.1.1.1. #如果沒有storage.conf 拷貝一份storage.conf.sample 命名為storage.conf
cp storage.conf.sample storage.conf
3.3.1.1.2. #配置storage.conf
vi storage.conf #修改如下配置
3.3.1.1.2.1. group_name=group1 #配置組名,同一個組的storage 互為備份
3.3.1.1.2.2. base_path=/home/fastdfs #基礎目錄
3.3.1.1.2.3. #store存放文件的位置(store_path), 可以配置多個, 記得創建路徑
store_path0=/home/fdfs_storage
3.3.1.1.2.4. #如果有多個掛載磁盤則定義多個store_path,如下
#store_path1=.....
#store_path2=......
3.3.1.1.2.5. #配置tracker服務器:IP,阿里雲服務器如果需要外部訪問請配置公網ip, 不要使用私有ip
tracker_server=192.168.112.130:22122
3.3.1.1.2.5.1. 子主題 1
3.3.1.1.2.5.1.1. #如果有多個tracker則配置多個tracker
3.3.1.1.2.5.1.2. #tracker_server=192.168.112.131:22122
3.3.1.1.2.6. #配置http端口
3.3.1.1.2.6.1. http.server_port=80
3.3.2. 創建fdfs-storage目錄
3.3.2.1. mkdir -p /home/fdfs_storage
3.3.3. 啟動storage
3.3.3.1. /usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
3.3.4. 檢查是否啟動成功
3.3.4.1. fdfs_monitor /etc/fdfs/storage.conf
3.3.5. 查看fdfs狀態
3.3.5.1. ps -ef | grep fdfs
3.3.6. 查看目錄是否創建,/home/fdfs_storage/data 應該會自動生成256個文件夾
3.3.6.1. ls /home/fdfs_storage/data
4. 測試上傳文件
4.1. 自帶測試客戶端
4.1.1. cd /etc/fdfs
4.1.2. cp client.conf.sample client.conf
4.1.3. 修改client.conf
4.1.3.1. vi client.conf
4.1.3.1.1. base_path=/home/fastdfs
4.1.3.1.2. tracker_server=192.168.112.130:22122
4.1.4. 測試上傳圖片
4.1.4.1. /usr/bin/fdfs_test /etc/fdfs/client.conf upload /download/123.jpg
4.1.4.1.1. 成功提示
4.1.5. 檢查文件是否存在
4.1.5.1. cd /home/fdfs_storage/data/00/00 #查看是否存在
4.1.6. 目前還不行進行下載
5. FastDFS 和Nginx整合
5.1. fastdfs-nginx-module
5.1.1. 解壓和安裝
5.1.1.1. 解壓
5.1.1.1.1. unzip fastdfs-nginx-module-master.zip
5.1.1.2. 遷移到指定目錄
5.1.1.2.1. mv fastdfs-nginx-module-master /usr/local/fastdfs-nginx-module
5.1.1.3. 修改config文件
5.1.1.3.1. # 將文件中的所有 /usr/local/ 路徑改為 /usr/ ,
#如果後面步驟中編譯nginx報錯把下面兩項做以下修改
ngx_module_incs="/usr/include/fastdfs /usr/include/fastcommon/"
CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
5.1.1.4. 拷貝配置文件到/etc/fdfs
5.1.1.4.1. cp mod_fastdfs.conf /etc/fdfs/
#修改 /etc/fdfs/mod_fastdfs.conf ;
vi /etc/fdfs/mod_fastdfs.conf
#======修改以下內容========
base_path=/home/fastdfs #保存日誌的路徑
tracker_server=192.168.112.130:22122 #track_server配置的服務端口
url_have_group_name=true #url中是否包含group名稱
store_path0=/home/fdfs_storage #指定文件存儲路徑(必須和storage.conf配置相同)
5.1.1.5. 檢查/usr/lib 和usr/lib64下是否有 libfdfsclient.so
5.1.1.5.1. ls /usr/lib | grep libfdfsclient.so
ls /usr/lib64 | grep libfdfsclient.so
5.1.1.6. 創建nginx/client目錄
5.1.1.6.1. mkdir -p /var/temp/nginx/client
5.2. 安裝nginx
5.2.1. 解壓到指定目錄
5.2.1.1. tar -zxvf nginx-1.14.0.tar.gz -C /usr/local/
5.2.2. 編譯nginx,加入fastdfs模塊
5.2.2.1. #進入解壓目錄, 日誌目錄可自己定義,主要是add-modoule
cd /usr/local/nginx-1.14.0
#添加模塊
./configure
--prefix=/usr/local/nginx
--add-module=/usr/local/fastdfs-nginx-module/src
5.2.3. 編譯並安裝
5.2.3.1. #在nginx1.14.0目錄下執行
make && make install
5.2.4. 修改編譯後nginx配置
5.2.4.1. vi /usr/local/nginx/conf/nginx.conf
#======添加配置===========
server {
listen 80;
server_name 192.168.112.130;
location /group1/M00/ {
root /home/fdfs_storage/data;
ngx_fastdfs_module;
}
}
5.2.5. 啟動nginx
5.2.5.1. /usr/local/nginx/sbin/nginx
5.2.6. 檢查是否啟動成功
5.2.6.1. ps -ef | grep nginx
5.2.7. 測試上傳圖片
5.2.7.1. /usr/bin/fdfs_test /etc/fdfs/client.conf upload /download/123.jpg
5.2.8. 查看nginx的日誌
5.2.8.1. tail -f -n 100 /var/log/nginx/access.log
6. 項目中如何使用fastdfs
6.1. 導入jar
6.1.1. maven
6.1.1.1.
net.oschina.zcx7878
fastdfs-client-java
1.27.0.0
6.2. 配置文件
6.2.1. fdfs.conf
6.2.1.1. # 連接tracker服務器超時時長
connect_timeout = 10
# socket連接超時時長
network_timeout = 30
# 文件內容編碼
charset = UTF-8
# tracker服務器端口
http.tracker_http_port = 80
http.anti_steal_token = no
#密碼
http.secret_key = 123456
# tracker服務器IP和端口(可以寫多個)
tracker_server = 192.168.58.128:22122
7. 測試代碼
7.1. 新建項目
7.1.1. demo
7.1.1.1. public class FastdfsTest {
@Test
public void testUpload() throws Exception {
//1、把FastDFS提供的jar包添加到工程中
//2、初始化全局配置。加載一個配置文件。
ClientGlobal.init("F:\wolf-shop\src\main\resources\fdfs.conf");
//3、創建一個TrackerClient對象。
TrackerClient trackerClient = new TrackerClient();
//4、創建一個TrackerServer對象。
TrackerServer trackerServer = trackerClient.getConnection();
//5、聲明一個StorageServer對象,null。
StorageServer storageServer = null;
//6、獲得StorageClient對象。
StorageClient storageClient = new StorageClient(trackerServer, storageServer);
//7、直接調用StorageClient對象方法上傳文件即可。
String[] result = storageClient.upload_file("F:\redis_demo\src\main\resources\logo.png", "png", null);
StringBuilder sb = new StringBuilder("http://192.168.112.130/");
sb.append(result[0]).append("/").append(result[1]);
System.out.println("圖片訪問地址: "+sb.toString());
}
}
8. 權限控制
8.1. 服務端開啟token驗證
8.1.1. 修改http.conf
8.1.1.1. 修改http.conf
# vim /etc/fdfs/http.conf
設置為true表示開啟token驗證
http.anti_steal.check_token=true
設置token失效的時間單位為秒(s)
http.anti_steal.token_ttl=1800
密鑰,跟客戶端配置文件的fastdfs.http_secret_key保持一致
http.anti_steal.secret_key=FASTDFS1234567890
如果token檢查失敗,返回的頁面
http.anti_steal.token_check_fail=/ljzsg/fastdfs/page/403.html
8.2. 配置客戶端
8.2.1. # token 防盜鏈功能
fastdfs.http_anti_steal_token=true
# 密鑰
fastdfs.http_secret_key=FASTDFS1234567890
8.3. 客戶端生成token
8.3.1. 訪問文件需要帶上生成的token以及unix時間戳,所以返回的token是token和時間戳的拼接
8.3.1.1. package com.example.nginxdfs.test;
import org.csource.common.MyException;
import org.csource.fastdfs.*;
import org.junit.Test;
import java.io.UnsupportedEncodingException;
import java.security.NoSuchAlgorithmException;
import java.time.Instant;
public class FastdfsTest {
@Test
public void testUpload() throws Exception {
//1、把FastDFS提供的jar包添加到工程中
//2、初始化全局配置。加載一個配置文件。
ClientGlobal.init("F:\\gitDemo\\nginxdfs\\src\\main\\resources\\fdfs.conf");
//3、創建一個TrackerClient對象。
TrackerClient trackerClient = new TrackerClient();
//4、創建一個TrackerServer對象。
TrackerServer trackerServer = trackerClient.getConnection();
//5、聲明一個StorageServer對象,null。
StorageServer storageServer = null;
//6、獲得StorageClient對象。
StorageClient storageClient = new StorageClient(trackerServer, storageServer);
//7、直接調用StorageClient對象方法上傳文件即可。
String[] result = storageClient.upload_file("F:\\gitDemo\\nginxdfs\\src\\main\\resources\\1.jpg", "png", null);
StringBuilder sb = new StringBuilder("http://10.2.45.57/");
sb.append(result[0]).append("/").append(result[1]);
String httpSecretKey="FastDFS1234567890charleslai";
String lastUrl= getToken(sb.toString(),httpSecretKey);
System.out.println("圖片訪問地址: "+sb.toString()+"?"+lastUrl);
}
/**
* 獲取訪問服務器的token,拼接到地址後面
*
* @param getFilename 文件路徑 group1/M00/00/00/wKgzgFnkTPyAIAUGAAEoRmXZPp876.jpeg
* @param httpSecretKey 密鑰
* @return 返回token,如: token=078d370098b03e9020b82c829c205e1f&ts=1508141521
*/
public static String getToken(String getFilename, String httpSecretKey){
// unix seconds
int ts = (int) Instant.now().getEpochSecond();
// token
String token = "null";
try {
token = ProtoCommon.getToken(getFilename, ts, httpSecretKey);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (MyException e) {
e.printStackTrace();
}
StringBuilder sb = new StringBuilder();
sb.append("token=").append(token);
sb.append("&ts=").append(ts);
return sb.toString();
}
}
閱讀更多 養碼場007 的文章