部分的な 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また、ServerAliasVirtualHost ブロックでは必須のディレクティブです。

単に省略することもできます。

マニュアルでは、いつそれを実行するかについて次のように説明しています。

指定されていない場合ServerName、サーバーは最初にオペレーティング システムにシステム ホスト名を問い合わせてクライアントに表示されるホスト名を推測し、それが失敗した場合はシステムに存在する IP アドレスの逆引きを実行します。

それはまさにあなたが必要としているものかもしれません。

さらに、実際にはこれらのディレクティブは、ほぼすべての文字列も受け入れます...またはなど
の単一の単語は機能しますが、 などの、FQDN に似ているが実際には機能していない DNS 名も機能します。このようなものを使用すると、エラー ログに起動時の警告が表示される場合があります (この文字列を に追加することで回避できます)。また、Apache httd が VirtualHost ブロックを他のブロックと区別できず、設定が有効にならない場合があります。localhosttestexamplethere.is.no.tld.named.serverfault./etc/hostshttps://httpd.apache.org/docs/2.4/vhosts/details.html

関連情報