web-dev-qa-db-ja.com

コンピューターシステム(Linux)のホスト名は1つだけですか?

hostnameは、システムのDNS名を表示し、そのホスト名またはNISドメイン名を表示または設定するために使用されます。

コンピューターシステム(Linux)のホスト名は1つだけですか?

仮想ホスティングでは、いくつかのホスト名をWebサーバーの異なるルートディレクトリに解決できます。コンピュータシステム(Linux)がホスト名を1つしか持てない場合、仮想ホスティングはどのようにして可能ですか?

ありがとう。

15
Tim

はいといいえ。ホスト名と呼ばれる2つの異なるものがあります。

「内部」ホスト名は基本的にカーネルが保持する文字列です。これはhostnameコマンド(またはgethostname()呼び出し)によって返されるものであり、システム内で一意です。(*)

これは主に、プログラムが実行されているシステムの識別子を出力したい場合に使用されます。例えば。 Bashの\hPS1は、ホスト名に展開されます。同様に、syslogスタイルのログファイルには、ログエントリのホスト名も含まれます。

(* Stephen Kittのコメントどおりですが、 namespaces は、同じシステム上のプロセスに異なるホスト名を表示するために使用できます。これは主に、異なるシステムのように振る舞うコンテナーに使用されます。)

次に、他のシステムが別のシステムのIPアドレスを検索するために使用するDNS名もあります。同じIPアドレス、つまり同じホストを指すDNS名が複数ある場合があります。

内部ホスト名とDNS名は同じである必要はありません。誰かがorangeを呼び出すことにしたウェブサーバーを持っているとしましょう(*)、IPアドレスは192.0.2.9です。 2つの異なるドメインにサービスを提供でき、DNSはwww.example.orgwww.example.comの両方が192.0.2.9を指すように設定されますが、システムの内部ホスト名はorange.example.orgまたはちょうどorangeです。その場合、DNSセットアップでは通常、192.0.2.9逆引き を使用して名前orange.example.orgに戻りますが、強制するものはありません。

(*彼らはフルーツにちなんでサーバーに名前を付けたいので。誰かがwebserver1などを使用するかもしれませんが、ポイントは、実際のドメインの1つにちなんで名前を付ける必要がないということです。)

それに加えて、仮想ホスティングでは、ブラウザがWebサーバーに、アクセスしようとしたサイトの名前を通知する必要があります。そうしないと、サーバーは、クライアントが到達しようとした仮想サイトを認識できません。 HTTPには Host header があります。


DNS名と内部ホスト名の違いを曖昧にするのは mDNSプロトコル (たとえば avahiデーモン によって実装されます)と他の検出プロトコルです。 mDNSを使用すると、ホストが同じネットワーク上の他のすべてのホストに名前情報を照会し、DNSで明示的に設定しなくても、ホスト名を他のホストで表示できるようになります。

26
ilkkachu

コンピューターシステム(Linux)のホスト名は1つだけですか?

番号。

[DNSレコードでアドレスを指定することで、ホストに好きな名前を付けたり、/etc/hostsに複数のエイリアスを設定したり、哲学的考察を行ったりすることは無視します。 a name は本当にです]

Linuxシステムでは、ホスト名は単純にプロセスごとのリソース(「UTS名前空間」)であり、デフォルトでその子によって継承されますが、unshare(2)またはclone(2)を使用して、 CLONE_NEWUTSフラグを使用します。 namespaces(7)マンページを調べる必要があります。

PID、ポート番号、マウントポイントなどと同様に、ホスト名はグローバル識別子ではなくなり、アドレス空間(仮想メモリ)またはプロセスのファイル記述子テーブルと同じように仮想化できます。

仮想ホスティングでは、いくつかのホスト名をWebサーバーの異なるルートディレクトリに解決できます。コンピュータシステム(Linux)がホスト名を1つしか持てない場合、仮想ホスティングはどのようにして可能ですか?

仮想ホスティングは完全に異なるものであり、通常は、*.foo.comで実行されているWebサーバーでワイルドカードDNSレコード(例:13.13.13.13 => 13.13.13.13)を構成し、異なるディレクトリ/リソースを提供することで行われますhttp Host: header [1]の値に基づく(これは高度に設定可能です。ほとんどのWebサーバーは、anyhttpヘッダーだけでなく、 Host:)。これらすべてにおいて、Webサーバーが実行されているシステムのOSは何の役割も果たしません。

[1]または サーバー名表示 の値(httpsの場合)。これにより、同じWebサーバーが異なる仮想ホストに対して異なる証明書を使用できるようになります。

7
Uncle Billy

通常、/etc/hostnameには単一のホスト名を設定します。そして、/etc/hostsに多くのドメイン名を設定しました。

UTS名前空間を使用すると、単一のシステムが異なるプロセスに対して異なるホスト名とドメイン名を持つように見せることができます。詳細は Linux名前空間 を参照してください。そのため、同じシステムに対して複数のホスト名とドメイン名を持つことは絶対に可能です。たとえば、同じホスト内のドッカーコンテナーは、ホストシステムとは異なるホスト名を持っています。

1
Uddhav Gautam