hostname
システムのDNS名を表示し、そのホスト名またはNISドメイン名を表示または設定するために使用されます。
コンピュータシステム(Linux)には1つのホスト名しかありませんか?
仮想ホストでは、複数のホスト名をWebサーバーの異なるルートディレクトリとして解決できます。コンピュータシステム(Linux)がホスト名を1つしか持てない場合、仮想ホスティングはどのように可能ですか?
ありがとうございます。
答え1
はい、いいえ。これはホスト名と呼ばれる2つの異なるものです。
「内部」ホスト名デフォルトでは、カーネルが保存した文字列です。これはhostname
コマンド(または呼び出し)によって返される値であり、システムgethostname()
固有です(*)。
プログラムが実行中のシステムの一部の識別子を出力しようとするときに主に使用されます。たとえば、\h
BashのPS1
ホスト名に展開されます。同様に、syslogスタイルのログファイルにもログエントリのホスト名が含まれています。
(*Stephen Kittがコメントしましたが、名前空間同じシステム上のプロセスの異なるホスト名を表示するために使用できます。これは主に他のシステムと同様に動作するコンテナに使用されます。 )
そしてDNS名があります。これは、他のシステムで他のシステムのIPアドレスを見つけるために使用されます。同じIPアドレス、つまり同じホストを指す複数のDNS名があります。
内部ホスト名とDNS名は同じである必要はありません。誰かがWebサーバーを持っていてorange
(*)を呼び出してIPアドレスを使用することにしたとしましょう192.0.2.9
。 2つの異なるドメインを提供することができ、DNSはおよびを指すようにwww.example.org
設定www.example.com
されますが、192.0.2.9
システムの内部ホスト名はまたはにするorange.example.org
ことができますorange
。この場合、DNS設定には通常リバースルックアップ192.0.2.9
名前に戻りますorange.example.org
が、強制する内容はありません。
(*果物の名前にちなんでサーバー名を付けるのが好きだからです。誰かが同様の名前を使うことができますが、ポイントはwebserver1
実際のドメインの1つにちなんで命名する必要がないということです。)
特に、Webホスティングでは、ブラウザがWebサーバーにアクセスするサイトの名前を知らせる必要があります。そうしないと、サーバーはクライアントがどの仮想サイトにアクセスしようとしているかを知ることができません。 HTTPにHost
ヘッダーそのような理由で。
DNS名と内部ホスト名の違いは次のとおりです。マルチキャストDNSプロトコル (例えば阿波市デーモン)および他の検索プロトコル。 mDNSを使用すると、ホストは同じネットワーク上の他のすべてのホストに名前情報を照会し、DNSで明示的に設定しなくてもそのホスト名を別のホストに表示できます。
答え2
コンピュータシステム(Linux)には1つのホスト名しかありませんか?
いいえ。
/etc/hosts
[ホストアドレスを指すDNSレコードを介して、誰もがホストに名前を付けることができるという点で、複数のエイリアスを持つことができること、またはホストが何であるかについての哲学的考慮事項を完全に無視します。名前本当にです]
Linuxシステムでは、ホスト名は基本的に子プロセスから継承される単なるプロセス固有のリソース(「UTS名前空間」)ですが、unshare(2)
このフラグを使用してそのリソースから分離できます。マンページを確認する必要があります。clone(2)
CLONE_NEWUTS
namespaces(7)
PID、ポート番号、マウントポイントなどと同様に、ホスト名はグローバル識別子ではなく、プロセスのアドレス空間(仮想メモリ)またはファイル記述子テーブルのように仮想化できます。
仮想ホストでは、複数のホスト名をWebサーバーの異なるルートディレクトリとして解決できます。コンピュータシステム(Linux)がホスト名を1つしか持てない場合、仮想ホスティングはどのように可能ですか?
仮想ホスティングはまったく異なるものであり、通常はワイルドカードDNSレコード(例:*.foo.com
=>)を設定することによって13.13.13.13
行われます。ここで、Webサーバーはhttpヘッダー[1]の値に基づいてさまざまなディレクトリ/リソースを実行して13.13.13.13
提供Host:
します(これは高度に設定可能です)。 Webサーバーは、さまざまなリソースに基づいてサービスを提供できます。どのhttpヘッダーだけでなくHost:
)。これらすべてで、Webサーバーを実行しているシステムのオペレーティングシステムは何の役割も果たしません。
[1]またはおおよそサーバー名の表示https の場合、同じ Web サーバーが異なる仮想ホストに対して異なる証明書を使用できます。
答え3
一般的に/etc/hostname
。そしてあなたはにいます/etc/hosts
。
UTS名前空間を使用すると、単一のシステムが異なるプロセスに異なるホスト名とドメイン名を表示できます。詳細については、次を参照してください。Linuxネームスペース。したがって、同じシステムに対して複数のホスト名とドメイン名を持つことは絶対に可能です。たとえば、同じホスト内のDockerコンテナは、ホストシステムとは異なるホスト名を持ちます。