2010-02-14 47 views
0

我有服務器分佈在幾個數據中心,每個存儲不同的文件。我希望用戶能夠通過單個域訪問所有服務器上的文件,並讓各個服務器直接將文件返回給用戶。轉發HTTP請求與直接服務器返回

下面顯示了一個簡單的例子:
1)用戶的瀏覽器請求http://www.example.com/files/file1.zip
2)請求轉到服務器A上的DNS A example.com的紀錄。
3)服務器A分析請求並確定/files/file1.zip存儲在服務器B上。
4)服務器A將請求轉發給服務器B.
5)服務器B將file1.zip直接返回給用戶不需要通過服務器A.

注意:步驟4和5必須對用戶透明,並且不能涉及向用戶發送重定向,因爲這會違反單個域的要求。

從我的研究中,我想實現的是所謂的「直接服務器返回」,它是負載均衡的常見設置。它有時也被稱爲半反向代理。

對於第4步,這聽起來像我需要做MAC地址轉換,然後將請求傳回網絡和服務器網絡外部的服務器將需要隧道。

對於第5步,我只需要根據負載平衡設置中的真實服務器來配置服務器B.即,服務器B應該在回送接口上具有服務器A的IP地址,並且它不應該回答該IP地址的任何ARP請求。

我的問題是如何實際實現第4步?

我發現了很多硬件和軟件,可以在第4層進行簡單的負載平衡,但這些解決方案不夠完善,無法處理我需要的自定義路由。看起來我需要推出我自己的解決方案。

理想情況下,我想在Web服務器級別進行路由/轉發,即在PHP或C#/ ASP.net中。不過,我願意在較低的層次上進行操作,例如Apache或IIS,或者在更低的層次上進行操作,即在一切事物之前的自定義代理服務。

回答

0

爲什麼不發送狀態碼爲307的HTTP響應臨時重定向?

此時客戶端將重新請求正確的指定服務器。

我知道你想要一個單一的域名,但你可以同時擁有單個子域名和一個單一的公共域名。

例如:

example.com具有IP1,IP2,IP3。

example1.example.com具有IP1
example2.example.com具有IP2
example3.example.com具有IP3

如果請求到達,它不能處理本身就是一個服務器,它將轉發用戶產生另一個請求到正確的特定服務器。一個HTTP瀏覽器將按照這種方式透明地重定向。

+0

這需要更改域。位置標題需要指定除www.example.com之外的其他內容,例如www2.example.com,否則請求會直接返回到同一臺服務器。 如果您想知道爲什麼我無法更改域名。這是因爲所提供的文件是閃存swf文件,大多數使用本地存儲,這需要域/子域保持不變。 僅供參考,我已經嘗試過所有30x重定向,並且都不對Flash進行透明處理。 –

+0

感謝您的解釋。 –

1

原諒我的無知,但爲什麼不設置服務器A通過NFS或SMB安裝位於其他服務器上的文件,具體取決於您使用的是unix變體,還是您使用的是Windows?

看起來像你想要做的是過分複雜的東西,可能很簡單。此外,使用網絡安裝文件將允許您將這些文件在未來需要時安裝在其他機器上。此時,您可以將負載平衡器放在服務器A前面(以及服務器x,y和z,它們也都從服務器B掛載文件)。

這並不能解決返回時繞過服務器A的問題,從技術上講,服務器A將返回文件而不是服務器B,但是如果負載平衡器放在A前面,那麼A會變成B無論如何,因此技術上B仍然會返回文件,因爲負載平衡器將使用直接服務器返回(現在是其長時間的標準功能)。

如果我確實遺漏了一些東西,請詳細說明。

編輯:是的,我意識到這是近3年前發佈。好吧。

相關問題