我有两个应用程序在我的服务器上运行域
x.abc.com admin.x.abc.com x.abc.com is running on port 80 admin.x.abc.com is running on port 8080
我可以从浏览器访问x.abc.com,但是当我尝试admin.x.abc.com时,它仅向x.abc.com发送请求。
在单机上configuration两个具有不同域和端口的Web应用程序的正确方法是什么? 下面分别列出了我的虚拟主机文件x.abc.com和admin.x.abc.com
<VirtualHost *:80> ServerName www.x.abc.com ServerAlias x.abc.com RailsEnv test DocumentRoot /home/cp/cp/public <Directory /home/cp/cp/public/> </Directory> LogLevel warn ErrorLog /home/cp/cp/log/error.log CustomLog /home/cp/cp/access.log combined RewriteCond %{HTTP_HOST} ^admin.x.abc.com RewriteRule (.*) http://localhost:8080/$1 [R=301,L] </VirtualHost> <VirtualHost *:8080> ServerName www.admin.x.abc.com ServerAlias admin.x.abc.com RailsEnv test DocumentRoot /home/cp/cp_admin/public <Directory /home/cp/cp_admin/public/> </Directory> LogLevel warn ErrorLog /home/cp/cp_admin/log/error.log CustomLog /home/cp/cp_admin/access.log combined </VirtualHost>
你的configuration似乎是好的。 尝试以下操作:
您可以为单个端口添加多个VirtualHost指令。 Apache将根据名称处理它们,即ServerName和ServerAlias 。 请注意,如果未find匹配项,则Apache将默认configuration第一个 VirtualHost 。 以下configuration应该工作。
<VirtualHost *:80> ServerName www.admin.x.abc.com ServerAlias admin.x.abc.com ... </VirtualHost> <VirtualHost *:80> ServerName www.x.abc.com ServerAlias x.abc.com ... </VirtualHost>
它看起来像是可能发生的是(1)所有的stream量正在端口80上处理,然后(2) ServerAlias x.abc.com匹配(并用于) admin.x.abc.com 。 请注意,从Apache文档有关匹配:
最匹配的
<virtualhost>集合的基于名称的虚拟主机按照它们在configuration中出现的顺序进行处理。 使用第一个匹配的ServerName或ServerAlias,对于通配符没有不同的优先级(ServerName和ServerAlias也是如此)。
在httpd.conf中添加下面的行后解决
NameVirtualHosts *:80