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



>我有一个服务器,我们用它来测试一些服务。它基本上是一个服务器,开发人员可以在其中运行一些容器以运行一些测试。

我正在尝试做的是将一些 url 模式代理反转到一些容器中。

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

<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,所以我正在努力理解所有的概念。这可能吗?如果是,我的错误在哪里?

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

我在这里放了一个完整的示例作为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 上配置的其他虚拟主机)吗?

最新更新