2009-10-29 80 views
2

我有兩個Apache服務器設置。一個是面向公衆的,另一個是防火牆的後面。防火牆後面的內容用於提供內容(vids,圖片等)。我已經設置了一個反向代理,以便對http://mysite.com/content/的任何請求實際發送到防火牆內的服務器。看到我的服務器錯誤question通過PHP的Apache反向代理身份驗證

我的網站使用PHP和MySQL對用戶進行身份驗證。身份驗證不適用於/ content目錄中的任何內容,因爲apache會立即將請求發送到內部服務器。理想情況下,我想在面向公衆的服務器上驗證用戶身份,並向防火牆內的內容服務器提供內容。

有沒有一種方法只允許經過身份驗證的用戶訪問/ content目錄?

回答

2

雖然這個答案可能並不代表「最佳實踐」,它的工作很好

我們使用後端服務器Apache作爲各種各樣的「文件服務器」 - 服務於私人文件和圖像用戶上傳到他們的帳戶。這是它是如何工作的:

設置mod_rewrite來處理你想要的URL。例如:

RewriteRule /content/(.*) /ServeContent.php?FileName=$1 

腳本ServeContent.php將做到以下幾點:

1. Validate input 

2. Authenticate user based on cookie or session data 

3. Make a URL with $_GET['FileName'] and the IP of the backend server 
    http://192.168.1.30/content/somefile.jpg 

4. Set appropriate headers for the file type 
    header('Content-type: image/jpeg') 

5. readfile($URL)  

這種方法要求的fopen,包裝在支持PHP。 readfile不會將內容存儲在內存中,所以這確實不會佔用太多內存。其中一個主要的缺點是,在請求期間(可能會很長時間),您將持有apache/php進程。但實際上,除非您運營的是高流量的網站,否則您很可能不會遇到問題。

如果你是,那裏最有可能更好的解決方案。但是這對我們在各種應用程序中的大文件非常有效。

+0

嘆氣,我希望能工作。我的內容服務器上的某些「內容」是HTML頁面的文件夾,其中包含與其他頁面和圖像的相關鏈接。 – KevMo 2009-11-02 16:53:41

+0

你確定有問題嗎?發送文件時,您不能檢測或確定正確的內容類型嗎? – gahooa 2009-11-03 02:16:02

+0

再次看到您的答案,它看起來像會工作。這種方法對使用.htaccess和cookie有什麼優勢? http://www.willmaster.com/blog/contentprotection/htaccess-cookie.php – KevMo 2009-11-03 05:14:30

相關問題