Apache-2.2
重定向到實用程序伺服器的方法
我有一種情況,我需要將高達 200M 的文件上傳到與主網站伺服器分開的實用程序伺服器。這是我的配置:
Authenticated Client on Public Internet /\ \ | \_____ 200M | \_____ | \_____ V V Authenticating <-------> Utility Server Web Site (EC2, Windows, Apache, Python, Django) Server (EC2 LAMP)
我目前的解決方案只是讓我的 Web 伺服器傳遞實用程序伺服器的 EC2 URL,並允許客戶端直接與實用程序伺服器通信。這有兩個缺陷——它暴露了未經身份驗證的實用程序伺服器的 URL,並且它需要客戶端上的跨域技巧來將 POST 上傳路由到實用程序伺服器。
問題是向客戶端隱藏實用程序伺服器而不通過 Web 伺服器推送文件上傳數據的最佳方法是什麼?這些是我想嘗試的想法:
- DNS 使用子域為實用程序伺服器提供別名。這可能解決了我的跨域腳本問題,但我不確定它是否有助於保護實用程序伺服器。也許我可以從實用程序伺服器檢查 Web 伺服器的身份驗證 cookie?
- 在網站的 Apache 配置中重寫規則。我不清楚這如何影響 POST 數據的實際路由位置。
- 在網站的 Apache 配置中重定向。我不確定是否可以通過重定向向使用者隱藏實用程序伺服器 URL。
- 從網站的控制器程式碼重定向。與 #3 相同的問題,但我認為這可能比 #3 更好,因為它會通過 PHP 身份驗證層傳遞請求。
- 更好的東西??
筆記:
- 實用程序伺服器的異常配置是它需要執行的實用程序的可用軟體的交集的功能。
- 實用程序伺服器不是嚴重惡作劇的高價值目標。擁有相當於鎖定前門的安全性就足夠了,但我想避免將鑰匙留在墊子下。
如果沒有在 Web 伺服器中代理它,您將無法從客戶端隱藏實用程序伺服器 url。我將在 Web 伺服器和實用程序伺服器中設置一個共享密鑰,然後按以下步驟操作:
Web 伺服器使用以下參數繪製連結或將客戶端重定向到實用程序伺服器:
- 認證使用者名
- 連結生成(或重定向)時間戳
- 客戶端IP
- 簽名(使用共享密鑰散列的前 3 個值)
在實用程序伺服器中,您檢查:
- 收到的簽名是正確的(用共享密鑰重做雜湊)
- 客戶端ip與參數中報告的相同
- 自參數中收到的時間戳以來經過的時間小於合理的量(10-20 秒應該足夠了,因為 Web 伺服器和實用程序伺服器都使用相同的時間源)
如果所有檢查都通過了,您可以接受使用者已通過身份驗證(因為您信任共享密鑰),啟動會話並繪製文件上傳表單。