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

我们如何在 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 发送请求。

在一台机器上配置两个具有不同域和端口的不同 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

您的配置似乎不错。请尝试以下操作:

  1. 您使用的是域名还是 IP?如果找不到您指的虚拟主机,它将服务于第一个虚拟主机。在本例中为 www.x.abc.com。这与端口无关。
  2. 尝试添加收听 8080指令。您应该同时拥有 Listen 80 和 Listen 8080。

答案2

您可以VirtualHost为单个端口添加多个指令。Apache 将根据名称处理它们,即ServerNameServerAlias。请注意,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 集的基于名称的虚拟主机将按照它们在配置中出现的顺序进行处理。将使用第一个匹配的 s ServerNameServerAlias通配符的优先级没有差异(ServerName 与 ServerAlias 的优先级也没有差异)。

答案4

在 httpd.conf 中添加下面一行后,问题得到解决

NameVirtualHosts *:80

相关内容