2016-07-25 60 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] 

现在似乎像预期的那样。

相关问题