2012-11-07 83 views
0

我想承載一個社交類型的網站。它將在節點(或vertx)上。我的問題是........如果我的局域網上有獨立的圖像服務器,當用戶上傳文件時,應將文件保存到圖像-nginx服務器,然後數據庫告知它,給出了圖片的鏈接?使用NGinx作爲圖像服務器,將mongodb作爲數據庫和節點作爲應用服務器...?

例如它會是這樣:

db.users.find( 'profilepicture':1)

profilepicture:localaddressoftheneginxserver/imagefolder/imagename.jpg

上午我通過思考的東西是否正確?將圖像傳送到單獨的nginx服務器上......讓數據庫不包含實際圖片,而是鏈接到圖片......所以當客戶端連接到應用程序服務器並要求查詢特定圖片時,它會查詢數據庫數據庫將鏈接發送到應用程序服務器...然後應用程序服務器通知用戶計算機的圖片位置?

會這樣嗎?我對於外面的某個人如何連接到應用程序服務器,然後也能夠連接到同一局域網上的圖像服務器(即使他們有地址)有點困惑。圖像服務器需要一些獨立的IP嗎?

回答

1

我們也有類似的用例,我們處理的方式是以下幾點:

  • 將圖像上傳到應用服務器的第一個,它被存儲爲一個臨時文件。
  • (可選)對圖像格式運行一些驗證,如果需要調整大小。
  • 將映像從應用程序服務器傳輸/部署到映像服務器(可能是nginx,CDN,Amazon S3等)。
  • 用客戶端要加載的圖像位置更新數據庫記錄。
  • 從應用程序服務器中刪除臨時文件。

這樣,HTTP客戶端只與保留所有業務邏輯/安全/訪問控制等的應用服務器進行通信。它只能從映像服務器讀取。

實際上讓用戶直接寫入映像服務器可能會帶來安全風險,因爲這種類型的服務器通常對上傳的內容(與應用程序服務器不同)沒有多少控制權。

+0

這聽起來像我想要的。尼斯 – NoTiG

+0

你給你的圖像服務器它是自己的靜態IP給外部世界嗎? – NoTiG

+0

就我而言,我們將圖像複製到Amazon S3存儲桶/ CDN服務器,該服務器已經設置了一個DNS條目,以便客戶端可以從中加載圖像。如果您「擁有」/維護要存儲的服務器圖像,你很可能希望它有一個靜態IP和一個DNS條目(但它可能更容易使用現成的CDN解決方案來存儲這些圖像,並會給你更好的性能)。 –