2013-06-11 73 views
1

因此,我在node.js中編寫了一個web應用程序,用戶可以上傳照片,並且可以在每張照片上指定一些訪問控制設置(公共,私人,朋友) 。使用node.js控制對靜態內容的訪問

然後我檢查每個請求上的用戶會話密鑰以確保他們有權訪問。如果他們這樣做,我通過使用fs打開它並將它傳遞給響應對象來向它們發送文件。

但是,當我使用apachebench進行基準測試時,我每秒獲得約1500個請求。如果我刪除所有數據庫的東西,它不會更快。相比之下,Nginx在同一張照片上每秒處理17000個請求。

顯然,如果我的服務起飛,這個數量級的差異將會是一個巨大的成本問題。

有沒有更好的方法來控制訪問,同時保持類似靜態的性能,除了使它們全部公開?

編輯:實際上,文件將在S3上託管,而不是在文件系統中。因此,節點將不再是一個靜態文件服務器,而更像是一個http代理,我認爲它會好得多。

回答

0

使用S3 signed URL。簽名的URL是專用文件的臨時URL,您可以將其發送給引用S3對象的單個用戶。

您也可以在簽名的URL上放置過期時間,以免它永遠存在。

所以流動是這樣的:

  1. 處理傳入的請求
  2. 查找認證數據庫
  3. 發出API調用S3生成標識的URL
  4. 將用戶重定向到S3簽署網址

這裏是相關的博客文章:Amazon S3 Signed URLs with NodeJS

+0

謝謝。我將評估這個選項與代理對s3的請求(從而避免來自重定向的延遲,我懷疑這是不可接受的)。其他選項總是歡迎! – jschall