2008-12-16 42 views
4

我試圖通過添加一個「圖像服務器」(一個專門用於處理圖像請求的服務器),並將所有對.gif,.jpg,.png的請求重定向到它來減輕我的web服務器上的負載。將圖像請求重定向到其他網絡服務器的最佳方式?

我的問題是,處理重定向的最佳方式是什麼?

  • 在防火牆級別? (我可以使用iptables做到這一點嗎?)
  • 在負載平衡器級別? (可以ldirectord處理這個?)
  • 在apache級別 - 使用重寫規則?

感謝您提供有關如何做到這一點的最佳方法的建議。

--Update--

有一兩件事我想補充的是,這些被託管的第三方域名,所以我不能指望所有的開發者修改代碼,並指出他們的圖像到另一臺服務器。

+0

「在Apache級別 - 使用重寫規則?」 如果它處於Apache級別,那麼您已經在Web服務器上,因此重定向它仍然會加載您的Web服務器。或者你有一個Apache反向代理層?你能描述一下你的建築嗎? (包括你擁有的負載均衡器) – 2008-12-16 18:16:05

+0

現在我們在一臺或另一臺網絡服務器上使用ldirectord進行負載均衡,在兩臺服務器前都安裝了iptables防火牆(專用機箱)。 (沒有反向代理) – Brent 2008-12-16 23:12:31

+0

嗨布倫特,你做到了嗎?這會增加多少性能?值得這樣做嗎? – Krunal 2012-05-05 04:46:08

回答

3

你可以做得越好,鏈條越好。

理想的情況下,這樣做在DNS級別使用不同的網域,將圖像(如imgs.example.com)

如果你能負擔得起,讓別人使用CDN做到這一點(內容交付網絡)。

-Update-

還有2個featuers Apache的mod_rewrite的,你可能想看看。他們都很好地描述在http://httpd.apache.org/docs/1.3/misc/rewriteguide.html

第一個是在上面的文檔中使用mod_rewrite代理標誌[p]的標題「Dynamic Miror」。這可讓您的服務器以靜默方式從另一個域中獲取文件並將其返回。

第二個是將請求重定向到新域。第二個選項減少了服務器的壓力,但請求仍然需要進入,並且會減慢頁面的最終呈現速度,因爲每個請求都需要首先向服務器發出基本多餘的請求。

1

我同意rikh。如果您希望圖像從不同的網絡服務器提供,請在不同的網絡服務器上提供。例如:

<IMG src="images/Brett.jpg"> 

成爲

<IMG src="http://brettnesbitt.akamia-technologies.com/images/Brett.jpg"> 

任何類型的負載平衡器仍然會從web服務器的管道,這是你試圖避免的Feed中的圖片。


我當然知道你真正想要什麼。你真正想要的是像任何要求:

GET images/Brett.jpg HTTP/1.1 

自動獲取轉換爲:

HTTP/1.1 307 Temporary Redirect 
Location: http://brettnesbitt.akamia-technologies.com/images/Brett.jpg 

這樣你就不必做任何工作,除了圖像複製到其他網站-服務器。

我真的不知道該怎麼做。


通過使用短語「NAT」,這意味着防火牆/路由器接收HTTP請求,並希望將請求轉發到不同的內部服務器,如果HTTP請求是爲圖像文件。

然後,這引發了關於你實際上想要保存的問題。無論哪個內部Web服務器爲HTTP請求提供服務,數據仍將不得不流經防火牆/路由器的管道。

我提出這個問題的原因是當有人想從不同的服務器提供圖像時,常見的情況是因爲他們想要從實際的邏輯中分離高帶寬,大部分是靜態的,低CPU成本的內容。

只有使用NAT重寫數據包並將其發送到不同的服務器將無法解決這個常見問題。

另外一個原因可能是因爲圖像是在您的系統不是靜態的內容,並

GET images/Brett.jpg HTTP/1.1 

一個請求實際上是建立在動態的圖像,具有高CPU成本,或只與數據使用可用(即SQL Server數據庫)到ServerB。

如果是這種情況的話,我仍然會在圖像請求使用不同的服務器名稱:

GET http://www.brettsoft.com/default.aspx HTTP/1.1 
GET http://imageserver.brettsoft.com/images/Brett.jpg HTTP/1.1 

我明白你在做什麼希望,隨着網絡數據包檢查覆蓋NAT規則並將其發送到另一臺服務器 - 我從來沒有見過這樣的事情可以做到這一點。

這聽起來更像是「proxy-ish」,其中的web代理就是這樣做的。 (即pfSense和m0n0wall無法做到這一點)

然後導致我們使用一種解決方案:一個自定義的Web服務器,分析請求,關閉內部服務器的適當請求,二進制寫入迴應客戶。

屁股解決方案的痛苦是由一位「安全顧問」堅持的,他顯然相信security through obscurity

我知道IIS不能爲你自己做這樣的事情 - 我不知道其他網絡服務器產品。


我剛纔問了一圈,顯然,如果你想寫一個定製的內核模塊,您基於Linux的路由器,你可以有它檢查數據包,並採取適當的行動。這樣的模塊可能存在。顯然,有許多其他開源模塊可以用作起點。

但我更願意拍自己的頭。

相關問題