Apache HTTP サーバ バージョン 2.4

Apache > HTTP サーバ > ドキュメンテーション > バージョン 2.4

# バインド

この日本語訳はすでに古くなっている 可能性があります。 最近更新された内容を見るには英語版をご覧下さい。

Apache が使用するアドレスとポートの設定をします。

### 参照

- バーチャルホスト
- DNS の問題

## 概要

関連モジュール | 関連ディレクティブ
--- | ---
`core` `mpm_common` | `<VirtualHost>` `Listen`

Apache は起動時に、ローカルマシンのあるポートおよびアドレス に対して接続し、リクエストが来るのを待ちます。 デフォルトではマシンのすべてのアドレスに対して Listen します。 特定のポートか、特定のアドレスのみか、 またはそれらの組み合わせで Listen するように指定したい場合もあります。 異なる IP アドレス、ホスト名、ポートに対して Apache がどのように 応答するかを制御するバーチャルホスト機能と組み合わせてよく使われます。

`Listen` ディレクティブで、特定のポートやアドレス・ポートの組から入ってくる リクエストのみを受け付けるようにできます。 もしポート番号だけが `Listen` ディレクティブで指定された場合は、 すべてのインターフェースの与えられたポート番号に対して Listen します。 IP アドレスとポート番号とが同時に与えられた場合は、 サーバは与えられたインターフェースのポートを Listen します。 `Listen` ディレクティブを複数使って Listen するアドレスとポートをいくつも指定できます。 サーバは指定されたアドレスやポートからのリクエストすべてに 対して応答します。

たとえば、全てのインターフェースのポート 80 と 8000 の両方において 接続を受け付けるには

`Listen 80
Listen 8000`

とします。 あるインターフェースでは 80 番で、また、同時に他のインターフェースの 8000 番ポートで接続を受け付けるには、

`Listen 192.0.2.1:80
Listen 192.0.2.5:8000`

とします。 IPv6 アドレスは、角括弧で次の例のように囲まなければいけません。

`Listen [2001:db8::a00:20ff:fea7:ccea]:80`

## IPv6 の特記事項

多くのプラットホームで IPv6 がサポートされてきていて、 APR はこれらのほとんどで IPv6 をサポートしているので、 Apache は IPv6 ソケットを割り当てて IPv6 経由で送られてきたリクエストを扱うことができます。

IPv6 ソケットが IPv4 と IPv6 コネクションの両方を扱うことができるか どうかは、Apache 管理者にとって厄介な問題です。 IPv4 コネクションを IPv6 ソケットで扱う場合は、 IPv4 マップされた IPv6 アドレスを使用していて、 ほとんどのプラットホームではデフォルトで使用可能ですが、 FreeBSD, NetBSD, OpenBSD では、システム全体としてのポリシーとの整合性から、 デフォルトでは使用不可に設定されています。 これらのデフォルトで使用不可のプラットホームであっても、 特別な `configure` の 設定パラメータで Apache の挙動を変化させることができます。

一方で、Linux や Tru64 といったプラットホームで IPv4 と IPv6 の両方を扱うには、マップドアドレスを使用する以外の方法はありません。 IPv4 と IPv6 のコネクションを最小限のソケットで扱いたいのであれば、 IPv4 マップの IPv6 アドレスを使用する必要があり、 `--enable-v4-mapped` `configure` オプションを指定します。

`--enable-v4-mapped` は、 FreeBSD, NetBSD, OpenBSD 以外の全てのプラットホームでのデフォルトです。 ですから、おそらくお手元の Apache はこの設定でビルドされているでしょう。

プラットフォームや APR が何をサポートするかに関わらず、 IPv4 コネクションのみを扱うようにしたい場合は、 次の例のように全ての `Listen` ディレクティブで IPv4 アドレスを指定してください。

`Listen 0.0.0.0:80
Listen 192.0.2.1:80`

条件を満たすプラットホームで、Apache が IPv4 と IPv6 のコネクションを別々のソケットで扱うようにしたい場合 (つまり IPv4 マップのアドレスを無効にしたい場合) は、`--disable-v4-mapped` `configure` オプションを指定して、次のように個別指定の `Listen` ディレクティブを使用してください。 `--disable-v4-mapped` は、 FreeBSD, NetBSD, OpenBSD プラットホームでのデフォルトです。

## バーチャルホストに対してどう働くのか

`Listen` ディレクティブ でバーチャルホストが実装されるわけではありません。 Listen は単にメインサーバにどのアドレスとポートを Listen すべきかを 教えるだけです。 `<VirtualHost>` ディレクティブが使われない場合は、 受け入れたリクエストすべてに対して全く同じ挙動をします。 しかしながら `<VirtualHost>` を使って、 一つ以上のアドレスやポートに対して異なる挙動をするように 指定することができます。 VirtualHost を実装するには、まず初めに使用したいアドレスとポートに対して サーバが Listen していなければなりません。 そして、その指定したアドレスとポートでの このバーチャルホストの挙動を設定するために、 `<VirtualHost>` セクションを作ります。もし `<VirtualHost>` が Listen していないアドレスとポートに対して 設定されてしまうと、 それにはアクセスできないということに注意してください。