我的服务器上有两个应用程序在运行,并且带有域
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 发送请求。
在一台机器上配置两个具有不同域和端口的不同 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>
答案1
您的配置似乎不错。请尝试以下操作:
- 您使用的是域名还是 IP?如果找不到您指的虚拟主机,它将服务于第一个虚拟主机。在本例中为 www.x.abc.com。这与端口无关。
- 尝试添加收听 8080指令。您应该同时拥有 Listen 80 和 Listen 8080。
答案2
您可以VirtualHost
为单个端口添加多个指令。Apache 将根据名称处理它们,即ServerName
和ServerAlias
。请注意,Apache 默认为第一的 VirtualHost
如果未找到匹配项,则配置。以下配置应该有效。
<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>
答案3
看起来可能发生的情况是:(1) 所有流量都在端口 80 上处理,然后 (2)ServerAlias x.abc.com
匹配(并用于)admin.x.abc.com
。注意,从Apache 文档关于匹配:
最佳匹配的
<virtualhost>
s 集的基于名称的虚拟主机将按照它们在配置中出现的顺序进行处理。将使用第一个匹配的 sServerName
,ServerAlias
通配符的优先级没有差异(ServerName 与 ServerAlias 的优先级也没有差异)。
答案4
在 httpd.conf 中添加下面一行后,问题得到解决
NameVirtualHosts *:80