有沒有辦法用部分 ServerName 定義 Apache 2 虛擬主機

有沒有辦法用部分 ServerName 定義 Apache 2 虛擬主機

我有一個產生 Apache 2 配置區塊的工具。我希望它產生的內容獨立於實際的 ServerName,但不需要實際執行/解析目標電腦的 Apache 配置。

換句話說,我需要的是這樣的:

<VirtualHost *>
   ServerName foobar    // <-- no top level domain
   ...
</VirtualHost>

從閱讀文件來看,ServerName 欄位必須始終是完全限定的域名,因此本質上在不知道目標伺服器的 FQDN 的情況下無法寫入 vhost 區塊。這是真的還是有一些解決方法?

答案1

是的,ServerName必須是真實的伺服器標識,但也可以是 IP 位址。 ServerAlias另一方面可以包含通配符。 文件提到了這一點。

但也說不需要

如果未指定 ServerName,伺服器將嘗試透過先向作業系統詢問系統主機名稱來推斷客戶端可見主機名,如果失敗,則對系統上存在的 IP 位址執行反向查找。

答案2

既不是ServerName也不是ServerAlias是 VirtualHost 區塊中必需的指令。

您可以簡單地忽略它們。

手冊解釋了何時執行此操作:

如果未ServerName指定,伺服器將嘗試透過先向作業系統詢問系統主機名稱來推斷客戶端可見主機名,如果失敗,則對系統上存在的 IP 位址執行反向查找。

這可能正是您所需要的。

此外,在實踐中這些指令也將接受幾乎任何字串...
單字,例如localhostortestexample都可以工作,看起來更像 FQDN 但不是實際工作的 DNS 名稱的東西也可以工作,例如there.is.no.tld.named.serverfault.使用類似的東西可能會導致啟動警告錯誤日誌(您可以透過將字串新增來避免/etc/hosts),並可能導致 Apache httd 無法區分您的 VirtualHost 區塊與任何其他存在的區塊,並且您的設定不會生效。https://httpd.apache.org/docs/2.4/vhosts/details.html

相關內容