我是 Apache 配置新手。我有两个需要在本地运行的应用程序,它们在不同的服务器上运行 - 一个在 jboss 上,另一个在 Jetty 上。现在它们都使用同一个 Apache 服务器来提供静态文件。
我解决了 jboss 和 jetty 服务器的 http 端口 (8080) 和 ajp 端口 (8009) 问题。两个服务器都启动了,没有端口冲突。接下来是 Apache 的配置部分。
httpd.conf 有 server1(jboss 上的 app1)的定义,因此我添加了对 vhostsfile 的引用,并输入了 server2(jetty 上的 app2)的配置。问题是,如果我有对 vhostsfile 的引用,app2 可以正常工作,但 app1 永远不会被 Apache 解析 - “在此服务器上找不到请求的 URL /us/en_us”
起初,我想也许我应该将两个服务器的定义都放在 vhosts 文件中,所以我这样做了。将 server1 的定义放在 server2 下方,但是 - app1 仍然没有加载,而 app2 像以前一样加载。对 app1 的请求显示了 app2 的访问日志。
然后在 vhosts 文件中,我交换了定义,即将 server1 的定义放在 server2 之上,现在两个应用程序都未在浏览器中加载。
我希望我在这里没有造成太大的混淆。App1 仅使用 server1 的定义(无 vhost)即可工作。添加 server2 的定义(在 vhosts 中)后,app1 停止工作,但 app2 可以工作。此外,在 vhosts 文件中,无论哪个服务器的定义位于另一个之上,都会拦截对两个应用程序的请求。
NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot "C:/env/local/cust/httpd/docs/dummy-host.com"
ServerName dummy-host.com
ServerAlias www.dummy-host.com
ErrorLog "logs/dummy-host.com-error.log"
CustomLog "logs/dummy-host.com-access.log" common
</VirtualHost>
<VirtualHost app2.local.com:80>
ServerAdmin [email protected]
DocumentRoot "C:/app2"
ServerName app2.local.com
ErrorLog "logs/store-error.log"
CustomLog "logs/store-access.log" common
<Directory "C:/app2">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
<VirtualHost app1.local.com:80>
ServerAdmin [email protected]
DocumentRoot "C:/workspace/app1"
ServerName app1.local.com
ErrorLog "logs/app1-error.log"
CustomLog "logs/app1-access.log" common
<Directory "C:/app1/">
Options Indexes FollowSymLinks
AllowOverride all
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
答案1
通过在定义中使用主机名,您会破坏基于名称的虚拟托管<VirtualHost>
。
将<VirtualHost app1.local.com:80>
和更改<VirtualHost app2.local.com:80>
为<VirtualHost *:80>
,并确保NameVirtualHost *:80
在您的配置中某处有一个。