一个虚拟主机的多个代理反向

时间:2017-10-24 16:53:14

标签: apache reverse-proxy virtualhost virtual-hosts

我有一台服务器用于测试某些服务。它基本上是一个服务器,开发人员可以运行一些容器来运行一些测试。

我要做的是将一些网址模式代理反转到一些容器中。

例如,这就是我现在所拥有的:

<VirtualHost *:80>
       ServerName dev.server.com

       RewriteEngine On

       RewriteRule (.*) https://%{HTTP_HOST}$1 [R=301,L]
</VirtualHost>

<VirtualHost *:443>
       ServerName dev.server.com

       <--- certificates and log configs --->

       SetEnv proxy-nokeepalive 1
       ProxyRequests     On
       ProxyPreserveHost On
       RewriteEngine     On

       ProxyPass /appOne http://localhost:9999/
       ProxyPassReverse /appOne http://localhost:9999/

       ProxyPass /appTwo http://localhost:9000/
       ProxyPassReverse /appTwo http://localhost:9000/

       ProxyPass / http://localhost:3000/
       ProxyPassReverse / http://localhost:3000/
</VirtualHost>

但是当我访问https://dev.server.com/appOne时,它会访问部署在端口3000上的应用,而不是部署在端口9999上的应用。

我以前从未配置过Apache,所以我很难理解所有的概念。这可能吗?如果是的话,我的错误在哪里?

1 个答案:

答案 0 :(得分:0)

你想要做的当然是可能的。事实上,使用与您发布的内容基本相同的配置,我无法重现您所描述的问题 - 一切似乎都可以按您的需要运作。

我已将完整的示例here作为docker-compose应用程序;它启动了四个容器:

  • 一个apache实例充当ProxyPass指令的前端
  • 三个apache实例作为后端监听各个端口

mod_proxy配置与您所显示的配置相同:

ProxyPass /appOne http://localhost:9999/
ProxyPassReverse /appOne http://localhost:9999/

ProxyPass /appTwo http://localhost:9000/
ProxyPassReverse /appTwo http://localhost:9000/

ProxyPass / http://localhost:3000/
ProxyPassReverse / http://localhost:3000/

唯一不同的是我没有为我的前端服务器配置SSL上下文。除了您在问题中显示的两个示例之外,您的配置中是否还有其他VirtualHost块(特别是在端口443上配置的其他虚拟主机)?