Ubuntu

Apache 基於名稱的虛擬主機中的 ServerName 萬用字元?

  • November 15, 2020

在我們的 LAN 上,我在 DNS 伺服器中設置了幾個“假”TLD,目的是將它們用於基於 Apache 名稱的虛擬主機。我想將此與 Ubuntu 10.04 LAMP 伺服器上的大規模虛擬主機(即 VirtualDocumentRoot)結合起來。

但是,我無法選擇正確的虛擬主機!

以下是 Apache 配置的摘要:

NameVirtualHost 10.10.0.205

<VirtualHost 10.10.0.205>
  ServerName *.test
  VirtualDocumentRoot /var/www/%-3.0.%-2/test/%1/
  CustomLog /var/log/apache2/access.log vhost_combined
</VirtualHost>

<VirtualHost 10.10.0.205>
  ServerName *.dev
  VirtualDocumentRoot /var/www/%-3.0.%-2/dev/%1/
  CustomLog /var/log/apache2/access.log vhost_combined
</VirtualHost>

諸如www.domain.com.dev之類的主機名正確地解析為 10.10.0.205,但始終選擇頂部的虛擬主機,而不是底部的虛擬主機,這更接近匹配。

我的印像是 Apache 在預設為給定 IP 的頂級虛擬主機之前會首先嘗試匹配 ServerName。我究竟做錯了什麼?或者這是不可能的,我必須為每個 TLD 使用另一個 IP 嗎?

apachectl -S 輸出(修剪):

10.10.0.205:*          is a NameVirtualHost
   default server *.test
   port * namevhost *.test
   port * namevhost *.dev

使用ServerAlias,而不是ServerName單獨使用:

ServerName somename.dev

ServerAlias *.dev

如果這可以幫助,只是為了完成一點莫的回答:

ServerAlias 中的萬用字元也適用於部分域名,例如

ServerName somename.dev

ServerAlias *-mysite.dev

它最近救了我的命 ^^(一個主站點,每個子應用程序都有子域,例如admin-somename.dev, bo-somename.dev, api-somename.dev…)

引用自:https://serverfault.com/questions/139628