2012-11-21 56 views
3

這是一個讓我瘋狂的問題。我有一個活躍的在用的Apache代理服務器,它提供EC2上的內容。它的工作的偉大,並具有多種是這樣來配置虛擬主機的:針對URLS的Apache ProxyPass不一致地失敗

<VirtualHost *:80> 
    ServerName m.FOO.com 
    ServerAlias customer.FOO.com 

    ProxyPreserveHost On 
    ProxyPass/ajp://10.211.42.48:8009/ 
    ProxyPassReverse/ajp://10.211.42.48:8009/ 

    <Proxy ajp://10.211.42.48:8009/*> 
      Order allow,deny 
      Allow from all 
    </Proxy> 
</VirtualHost> 

這些都工作很好,和我有沒有問題。現在我想要做的是移動它,而不是爲每個應用程序使用一個虛擬主機,我希望在主站點上有一個代理服務器的子網址。因此,不是有'customer.FOO.com'的客戶,他們將擁有'FOO.com/customer/'

好極了,聽起來很簡單吧?是的,沒有那麼多。我編輯服務器的「根」的虛擬主機條目(當前顯示着陸頁),並將代理條目添加到該目錄中。應該這樣做,對吧?是的,這是不是:

<VirtualHost *:80> 
    ServerName web01.aws.FOO.com 
    DocumentRoot /var/www/html 
    ErrorLog logs/www.FOO.com-error_log 
    CustomLog logs/www.FOO.com-access_log common 

    <Location /a> 
      ProxyPass ajp://10.211.42.48:8009 
      ProxyPassReverse ajp://10.211.42.48:8009 
    </Location> 

    <Location /t> 
      ProxyPass http://adm01 
      ProxyPassReverse http://adm01 
    </Location> 

    <Proxy ajp://10.211.42.48:8009/*> 
      Order allow,deny 
      Allow from all 
    </Proxy> 

</VirtualHost> 

如果我打http://www.FOO.com/t/ - 我得到的內部網絡服務器 - 它正向正確的代理,一切都很好。如果我點擊http://www.FOO.com/a/,則會出現404錯誤。訪問日誌甚至顯示404錯誤。

請注意,ProxyPass AJP條目與其他虛擬主機條目中的內容完全相同。那麼,爲什麼它在另一個虛擬主機條目上的根目錄上工作,而不是作爲主虛擬主機上的子目錄呢?

Halp!

回答

1

我最終解決了這個問題,我在郵件列表上發現了一個特定的提示。 ProxyPassReverse指令非常敏感,並且具有一個基本功能。任何與第二個參數(假設使用ProxyPassReverse A B表單)匹配的內容都將應用於第一個參數。因此,確保第二個參數恰好來自應用程序的重定向非常重要,否則ProxyPassReverse指令將被忽略。

就我而言,我落得這樣做改變了位置項:

ProxyPass /a/ ajp://10.211.42.48:8009 
ProxyPassReverse /a/ http://my.apphost.com/ 

而且全部開始工作就好了。

+0

我已經閱讀了5個小時前的這篇文章:) http://alex.eftimie.ro/2013/03/21/how-to-run-flask-application-in-a-subpath-using-apache-mod_proxy / – alexef

相關問題