>我有一个服务器,我们用它来测试一些服务。它基本上是一个服务器,开发人员可以在其中运行一些容器以运行一些测试。
我正在尝试做的是将一些 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 上配置的其他虚拟主机)吗?