fastdfs-nginx-module安裝和配置
為什么要在fastdfs的storage端,安裝fastdfs-nginx-module?
答案:https://www.cnblogs.com/littleatp/p/4361318.html
答案摘要:在每一台storage服務器主機上部署Nginx及FastDFS擴展模塊,由Nginx模塊對storage存儲的文件提供http下載服務, 僅當當前storage節點找不到文件時會向源storage主機發起redirect或proxy動作。
個人理解:當一個文件A被上傳到group1里的節點機器M后,group1里有節點機器M和節點機器N,節點N會從節點M下載文件A到自己節點下。如果又來了一個訪問文件A的請求,並且tracker把這個請求讓節點N來處理,這時節點N還沒有從節點M下載到文件A,這樣就無法處理,會出錯誤。
插件fastdfs-nginx-module就是為了解決這個錯誤。怎么解決呢?就是把請求重定向到節點M上,也就是提供重定向的功能。
前提是已經安裝好了nginx和fastdfs了
STEP1
下載包(https://github.com/happyfish100/fastdfs-nginx-module ),並解壓
STEP2:去nginx源碼的解壓目錄,運行下面的命令
./configure --add-module=/home/ys2/fastdfs/fastdfs-nginx-module-1.20/src
如果執行結果里有下面的語句,則說明configure成功
adding module in /home/ys2/fastdfs/fastdfs-nginx-module-1.20/src
+ ngx_http_fastdfs_module was configured
STEP3:make
發現出下面的錯誤:
/usr/include/fastdfs/fdfs_define.h:15:10: fatal error: common_define.h: No such file or directory
#include "common_define.h"
解決辦法:修改objs/Makefile文件,在ALL_INCS的最后面添加【-I /usr/include/fastcommon】,注意在原來的最后一行的后面加上【\】。
因為上面的錯誤原因是找不到common_define.h文件,所以通過添加-I,就可以找到這個文件了。如果不知道common_define.h在哪個目錄,可以用【find /usr -name common_define.h】找到它所在的目錄。
ALL_INCS = -I src/core \
-I src/event \
-I src/event/modules \
-I src/os/unix \
-I objs \
-I src/http \
-I src/http/modules \
-I /usr/local/include \
-I /usr/include/fastcommon
然后再執行make,一般就會成功了,如果還提示找不到某個.h文件,解決辦法同上。
STEP4:sudo make install
在目錄【/usr/local/nginx/sbin/】下,如果生產了nginx,並把原來的nginx重命名為nginx.old了,則說明安裝成功了。
-rwxr-xr-x 1 root root 4499888 9月 2 20:41 nginx*
-rwxr-xr-x 1 root root 4375032 8月 30 10:56 nginx.old*
分割線 到此說明安裝已經OK了,下面是配置
STEP5:啟動nginx
sudo nginx
然后用【ps aux | grep nginx】,確認nginx進程是否成功啟動
root 9126 0.0 0.0 32980 436 ? Ss 20:52 0:00 nginx: master process nginx
發現結果如上,發現只有master進程,而沒有worker進程,說明啟動出了問題。
解決辦法:去看nginx的log文件【/usr/local/nginx/logs/error.log】,log內容如下
2019/09/02 20:52:26 [notice] 8956#0: signal process started
ngx_http_fastdfs_process_init pid=9127
[2019-09-02 20:52:41] ERROR - file: shared_func.c, line: 968, file /etc/fdfs/mod_fastdfs.conf not exist
[2019-09-02 20:52:41] ERROR - file: /home/ys2/fastdfs/fastdfs-nginx-module-1.20/src/common.c, line: 163, load con\
f file "/etc/fdfs/mod_fastdfs.conf" fail, ret code: 2
2019/09/02 20:52:41 [alert] 9126#0: worker process 9127 exited with fatal code 2 and cannot be respawned
發現沒有找到/etc/fdfs/mod_fastdfs.conf 文件。mod_fastdfs.conf 文件在解壓后的src文件夾里,所以拷貝到/etc/fdfs目錄下。
STEP6:編輯/etc/fdfs/mod_fastdfs.conf 文件。發現此文件和storage.conf文件十分類似。所以照着storage.conf文件修改此文件。
-
修改base_path=,讓值和storage.conf一樣。
-
修改tracker_server=,讓值和storage.conf一樣。
-
修改storage_server_port=,讓值和storage.conf里的port一樣。
-
修改group_name=,讓值和storage.conf一樣。
-
修改url_have_group_name ,讓值為true。目的是在瀏覽器的URL里,顯示group_name的值,也就是能看到訪問的storage的哪個group。
-
修改store_path_count=,讓值和storage.conf一樣。
-
修改store_path0=,讓值和storage.conf一樣。
-
修改group_count =,fastdfs文件系統里有幾個組就寫幾,只有一個組就寫1.
-
如果group_count =1,則必須設置[group1],如果group_count =2,則必須設置[group1]和[group2],以此類推。
然后,再把[group1]下的所以設置,再寫一遍。
把上面都修改好后,再次啟動nginx,發現還是沒有worker進程,再去看log內容,發現log內容和上一次不一樣了,就說明上面的問題已經修改好了,又有別的問題了,已經在向成功邁進了。
[2019-09-02 23:37:19] ERROR - file: ini_file_reader.c, line: 824, include file "http.conf" not exists, line: "#include http.conf"
[2019-09-02 23:37:19] ERROR - file: /home/ys2/fastdfs/fastdfs-nginx-module-1.20/src/common.c, line: 163, load conf file "/etc/fdfs/mod_fastdfs.conf" fail, ret code: 2
2019/09/02 23:37:19 [alert] 9383#0: worker process 9384 exited with fatal code 2 and cannot be respawned
說明沒找到http.conf文件,
解決辦法:拷貝fastdfs源碼安裝包里的http.conf文件(在conf文件夾里),到/etc/fdfs/文件夾里。
修改好后,再次啟動nginx,發現還是沒有worker進程,再去看log內容,發現log內容和上一次不一樣了,就說明上面的問題已經修改好了,又有別的問題了,已經在向成功邁進了。
2019/09/02 23:53:59 [notice] 9532#0: signal process started
ngx_http_fastdfs_process_exit pid=9497
ngx_http_fastdfs_process_init pid=9536
[2019-09-02 23:54:05] ERROR - file: shared_func.c, line: 968, file /etc/fdfs/mime.types not exist
2019/09/02 23:54:05 [alert] 9535#0: worker process 9536 exited with fatal code 2 and cannot be respawned
說明沒找到/etc/fdfs/mime.types文件
解決辦法:拷貝nginx源碼安裝包里的mime.types文件(在conf文件夾里),到/etc/fdfs/文件夾里。
修改好后,再次啟動nginx,發現有worker進程了,說明nginx啟動成功了。
STEP7:修改nginx.conf文件,添加下面
location /group1/M00 {
root /home/ys2/fastdfs/data;
ngx_fastdfs_module;
}
最后,在瀏覽器里直接訪問storage節點下的某個文件,比如下面,如果能成功顯示在瀏覽器中,則說明配置成功了。
http://10.210.65.129/group1/M00/00/00/CtJBgV1s1m2AatCZAAAADCHxdNo922.txt