來源:互聯網
上載者:User
關鍵字
php
nginx
nginx_proxy
大神們,我現在有個問題,幫我看下:
因為使用nginx均衡負載,由於分發請求到不同伺服器,這樣如果只想把上傳的圖片只儲存到一台伺服器就會出問題。
百度到的方法:
第一種方法是代碼裡面使用ftp 把檔案同步到儲存伺服器
第二種方法是如果不是儲存檔案的伺服器,使用curl 把檔案提交到儲存伺服器再重新存一次。
第三種方法就是直接使用儲存伺服器的ip來調介面了。第三種方法我們這邊先不考慮。
不知道大神們,遇到這種情況是怎麼實現這種需求的
回複內容:
大神們,我現在有個問題,幫我看下:
因為使用nginx均衡負載,由於分發請求到不同伺服器,這樣如果只想把上傳的圖片只儲存到一台伺服器就會出問題。
百度到的方法:
第一種方法是代碼裡面使用ftp 把檔案同步到儲存伺服器
第二種方法是如果不是儲存檔案的伺服器,使用curl 把檔案提交到儲存伺服器再重新存一次。
第三種方法就是直接使用儲存伺服器的ip來調介面了。第三種方法我們這邊先不考慮。
不知道大神們,遇到這種情況是怎麼實現這種需求的
宿主的nginx對於上傳的location做特殊處理, 只讓一台機器來負責檔案上傳, 不完美但是有效, 可以作為一段時間的過度方案
搭建一個Distributed File System, 掛載到所有的伺服器上, 處理檔案上傳後寫唯寫入這個特定目錄, nginx中規劃一個location指向這個這個目錄(例如/data/upload), 缺點就是要多維護一個這個Distributed File System (和你的第一種思路有點像, 但Distributed File System不需要"同步")
使用外部CDN檔案上傳來解決這個問題, 七牛, 又拍雲都可以
1.專門整幾台伺服器用來存這些靜態資源;
2.整出幾個盤,弄成網路盤(nfs),專門用來儲存這些檔案,每個伺服器都去掛載這幾個盤,和windows的共用資料夾類似;
3.上傳成功之後返回一個檔案的url,這個url就是檔案的地址了;