更新感谢 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 的内容。