2016-07-25 37 views
-1

我有一個項目設置與多個碼頭集裝箱,我想訪問一個子域,我試圖代理到另一個容器。我可以實現類似的,當沒有一個子域,例如下面讓我打localdev.com/api我如何設置Apache虛擬主機代理到不同的碼頭集裝箱上的子域

<VirtualHost localdev.com:80> 
    ServerName localdev.com 
    SetEnv PROJECT_HOME /project/server 
    SetEnv PROJECT_SERVER_ID local 
    SetEnv PROJECT_ENVIRONMENT docker 

    DocumentRoot /project/server/www 
    <Directory /project/server/www> 
     Require all granted 
    </Directory> 

    <Proxy *> 
     Allow from localhost 
    </Proxy> 
    ProxyPass  /api http://api.localdev.com/ 
    ProxyPassReverse /api http://api.localdev.com/ 

</VirtualHost> 

但是當我添加一個虛擬主機api.localdev.com 我被轉發到localdev(網址不會改變該瀏覽器,但我從它的內容)

這是我的子域名的虛擬主機:

<VirtualHost api.localdev.com:80> 
    ServerName api.localdev.com 
    <Proxy *> 
    Allow from localhost 
    </Proxy> 
    ProxyPass  /http://api.localdev.com/ 
    ProxyPassReverse/http://api.localdev.com/ 
</VirtualHost> 

有趣的是,在Apache日誌,我得到了正確的主機,即api.localdev.com從含有localdev.com泊塢窗的容器內,我既可以平&捲曲api.localdev.com

雖然可能不會對這一問題相關的,在我的Mac主機文件,我有以下映射到泊塢窗容器

127.0.0.1 localhost localdev.com api.localdev.com

我在網上尋找的任何地方嘗試解決這個問題並不明確,我承認我發現這些例子令人困惑。任何幫助非常感謝和高興地提供任何進一步的信息,如果我什麼都沒有丟失

+0

容器不會知道Mac/etc/hosts文件中的條目 - 您最好在代理配置中使用Docker主機名值。 – ldg

+0

@idg我意識到,我只有在我的Mac的主機,所以我可以在我的瀏覽器中使用localdev.com,我不相信這是在反正造成我的問題,突然認爲它可能是相關的知道 – jonnie

回答

0

我終於找到了解決方案。相反,創建第二個虛擬主機的我加了一個重寫規則與API子域中的任何條件:

# proxy api subdomain to api container 
RewriteCond %{HTTP_HOST} ^api\.localdev\.com$ 
RewriteRule (.*) http://api.localdev.com$1 [P] 

現在似乎像預期的那樣。