我如何将 mod_proxy 配置为 ProxyPass 除 X VirtualHosts 之外的所有内容?

我如何将 mod_proxy 配置为 ProxyPass 除 X VirtualHosts 之外的所有内容?

更新感谢 Bill 和 crb 的回答,我相信我已经成功了。

xxx@host:/etc/apache2/sites-available$ apache2ctl -S
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80                   is a NameVirtualHost
         default server default (/etc/apache2/sites-enabled/000-default:4)
         port 80 namevhost default (/etc/apache2/sites-enabled/000-default:4)
         port 80 namevhost www.123acme.com (/etc/apache2/sites-enabled/www.123acme.com:4)
Syntax OK

现在www.123acme.com将解析为 Apache 提供的正确 VirtualHost/var/www,而其他一切都通过代理传输到 Jetty。


我在端口 80 上有一个 Apache2 实例,在 8080 上有一个 Jetty 应用服务器。我希望 Apache 实例能够为 VirtualHost 提供服务,比如说 www.acme.com,并将所有其他流量发送到 Jetty 实例。

到目前为止我有包含的 sites-available/jetty

ProxyRequests Off

<Proxy *>
  Order deny,allow
  Allow from all
</Proxy>

ProxyPass / http://localhost:8080/
ProxyPreserveHost On
ProxyStatus On

目标是首先将所有内容代理到 Jetty。到目前为止,这似乎运行良好。

那么从这一点开始,我将如何配置各种虚拟主机哪个得到代理吗?

再次重申:

-打字www.acme.com应该解决传统的虚拟主机坐在/var/www并由 Apache2 从配置中提供服务sites-enabled/acme.com

-打字任何事物否则应该转发到 8080 上运行的 Jetty 实例

答案1

文件中的第一个虚拟主机(或包含的虚拟主机)是默认的,它将落到那里。因此,只需将第一个虚拟主机设为代理,然后将第二个设为代理www.acme.com

答案2

如果您没有匹配的 VirtualHost 定义(基于 ServerName/ServerAlias),Apache 将使用第一个 VirtualHost 来处理您的请求。(请参阅文档)。

设置一个名称为 000-first 的虚拟主机,并将您的 ProxyPass 配置放入其中。它们包含在目录排序顺序中。

答案3

我将通过创建两个 VirtualNost 来解决此问题。

第一个 VirtualHost(默认)将包含 ProxyPass 设置。根据您的文件名,您运行的似乎是 Debian 或 Ubuntu?在这种情况下,我们讨论的是 /etc/apache2/sites-enabled/000-default(又名:/etc/apache2/sites-available/default)。

然后第二个 VirtualHost 将明确指定 www.acme.com 作为其 ServerName,并提供 /var/www 的内容。

相关内容