我们如何在apache中运行多个具有不同域和端口号的应用程序

我有两个应用程序在我的服务器上运行域

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似乎是好的。 尝试以下操作:

  1. 你在使用域名还是IP? 如果它没有find你指的虚拟主机, 它将服务于第一个虚拟主机 。 在这种情况下,www.x.abc.com。 这是不pipe港口。
  2. 尝试添加Listen 8080指令。 你应该听Listen 80和Listen 8080。

您可以为单个端口添加多个VirtualHost指令。 Apache将根据名称处理它们,即ServerNameServerAlias 。 请注意,如果未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中出现的顺序进行处理。 使用第一个匹配的ServerNameServerAlias ,对于通配符没有不同的优先级(ServerName和ServerAlias也是如此)。

在httpd.conf中添加下面的行后解决

 NameVirtualHosts *:80