nginx+fastdfs 502异常解决
使用fastdfs加兩臺storage,一臺做備份使用時,發現有一類文件名是以“ag-”開頭,使用<img>標簽即時顯示的時候會報502異常,
查看nginx的error.log得到
2017/09/25 17:39:09 [error] 13333#0: *30734 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 10.24.169.19, server: localhost, request: "GET /group1/M00/01/5E/ag-JjlnIzqmAdi3UAAOreY6LKcM688.jpg HTTP/1.1", upstream: "http://106.15.137.142:8081/group1/M00/01/5E/ag-JjlnIzqmAdi3UAAOreY6LKcM688.jpg?redirect=1", host: "10.135.237.203:8081"
分析一下客戶端與nginx的交互過程如下:
一般Nginx與Tracker裝在一臺服務器上,所以他們之間的通信一般不會時間太長而導致超時
但是Nginx與Storage一般不再一臺機器上,因此Nginx與Storage之間的通信可能會timeout,從而導致502異常。
所以需要在Nginx中添加如下配置
location /group1/M00{
? ? ? ? ? ? ? ? ? ? ? ? add_header Content-Disposition "attachment;filename=$arg_n";
? ? ? ? ? ? ? ? ? ? ? ? add_header Access-Control-Allow-Origin "*";
? ? ? ? ? ? ? ? ? ? ? ? root /home/ubuntu/fastdfs/nginx-link/data;
? ? ? ? ? ? ? ? ? ? ? ? ngx_fastdfs_module;
? ? ? ? ? ? ? ? ? ? ? ? proxy_connect_timeout 300s;
? ? ? ? ? ? ? ? ? ? ? ? proxy_send_timeout 300s;
? ? ? ? ? ? ? ? ? ? ? ? proxy_read_timeout 300s;
? ? ? ? ? ? ? ? }
后來發現,還是解決不了這個問題,繼續分析發現另外一臺的Storage上的文件是訪問不了的,檢查一看nginx_fastdfs_module沒有配置,添加上去后,重啟nginx,發現502的異常解決了但是偶爾會出現插入的圖片需要很長時間才能顯示出來。
講過一番思考后,發現這是Storage同步延遲的結果,大概是這樣的Tracker將文件放在StorageA上,但是訪問的時候,Tracker發現StorageB也是可用的,就返回了StorageB的IP與端口。但是此時StorageB還沒有此文件,所以一直等待,直到StorageB同步StorageA的數據。
查看Tracker的配置文件有如下配置:
# which storage server to download file
# 0: round robin (default)
# 1: the source storage server which the current file uploaded to
download_server=1
意思是選擇哪一個Storage 服務器去下載文件0代表輪詢,為默認值,1代表從當前文件的源文件服務器上下載文件
此時設為1,就好了。
那么Tracker是怎么判斷哪一臺是源務器的呢?是根據文件名,Tracker_Nginx_Module可以根據文件名反解出源服務器IP,文件時間戳,根據這兩點就可以找到源Storage服務器了。
參考:1.http://www.bubuko.com/infodetail-1873115.html
? ? ? ? ? ?2.http://blog.csdn.net/mr_smile2014/article/details/52118541
總結
以上是生活随笔為你收集整理的nginx+fastdfs 502异常解决的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机之父童年的故事ppt,24计算机之
- 下一篇: FMEA-MSR步骤三:功能分析