<-
Apache > HTTP サーバ > ドキュメンテーション > バージョン 2.5

アドレスとポートのバインド

翻訳済み言語:  de  |  en  |  es  |  fr  |  ja  |  ko  |  tr 

特定のアドレスとポートで待ち受けるための Apache HTTP Server の設定。

参照

top

概要

httpd は起動時に、ローカルマシンのあるポートとアドレスに対して バインドし、リクエストが来るのを待ちます。デフォルトでは マシンのすべてのアドレスで待ち受けます。しかし、特定のポートのみ、 または選択したアドレスのみ、あるいはその両方の組み合わせで 待ち受けるように指定する必要がある場合もあります。これは多くの場合、 httpd が異なる IP アドレス、ホスト名、ポートに対して どのように応答するかを決定するバーチャルホスト 機能と組み合わせて使用されます。

Listen ディレクティブは、指定されたポートまたは アドレスとポートの組み合わせでのみ受信リクエストを 受け付けるようサーバに指示します。 Listen ディレクティブでポート番号のみが指定された場合、 サーバはすべてのインターフェースの指定されたポートで待ち受けます。 IP アドレスとポートが同時に指定された場合は、 サーバは指定されたポートとインターフェースで待ち受けます。 複数の 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

Listen ディレクティブが重複すると、 サーバの起動を妨げる致命的なエラーが発生します。

(48)Address already in use: make_sock: could not bind to address [::]:80

さらなるトラブルシューティングのヒントについては、 wiki での議論を参照してください。

top

再起動時の Listen 設定の変更

httpd を再起動する際には、Listen ディレクティブの変更に対して特別な配慮が必要です。再起動中、httpd は サーバへの新しい接続試行に対する「Connection refused」エラーを 避けるために、(元の設定のまま)ポートをバインドしたままにします。 使用中の Listen ディレクティブのセットに対して古い設定と競合する変更が行われた場合、 設定は失敗しサーバは終了します。

たとえば、次の設定から:

Listen 127.0.0.1:80

次の設定に変更すると失敗する可能性があります。なぜなら、 すべてのアドレスのポート 80 へのバインドは、 127.0.0.1 のみのポート 80 へのバインドと競合するからです。

Listen 80

このような設定変更を有効にするには、 サーバを停止してから起動する必要があります。

top

IPv6 の特記事項

多くのプラットフォームで IPv6 が実装されてきており、 APR はこれらのほとんどで IPv6 をサポートしているので、 httpd は IPv6 ソケットを割り当てて IPv6 経由で送られてきたリクエストを処理することができます。

httpd 管理者にとって厄介な問題の一つは、IPv6 ソケットが IPv4 と IPv6 の両方のコネクションを処理できるかどうかです。 IPv6 ソケットでの IPv4 コネクションの処理には IPv4 マップド IPv6 アドレスが使用されますが、 これはほとんどのプラットフォームではデフォルトで許可されていますが、 FreeBSD、NetBSD、OpenBSD では、これらのプラットフォームの システム全体のポリシーに合わせるため、 デフォルトでは無効になっています。 デフォルトで無効になっているシステムでも、 特別な configure パラメータで httpd のこの動作を変更できます。

一方、Linux や Tru64 などのプラットフォームでは、 IPv6 と IPv4 の両方を処理する唯一の方法は マップドアドレスを使用することです。 IPv4 マップド IPv6 アドレスの使用を必要とする 最小限のソケットで httpd に IPv4 と IPv6 のコネクションを 処理させたい場合は、--enable-v4-mapped configure オプションを指定してください。

--enable-v4-mapped は FreeBSD、NetBSD、OpenBSD を除く すべてのプラットフォームでのデフォルトですので、 おそらくお手元の httpd はこの設定でビルドされているでしょう。

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

Listen 0.0.0.0:80
Listen 192.0.2.1:80

プラットフォームがサポートしており、httpd に IPv4 と IPv6 のコネクションを別々のソケットで処理させたい場合 (つまり IPv4 マップドアドレスを無効にしたい場合)は、 --disable-v4-mapped configure オプションを指定してください。--disable-v4-mapped は FreeBSD、NetBSD、OpenBSD でのデフォルトです。

top

Listen でプロトコルを指定する

Listen の オプションの第二引数 protocol は、 ほとんどの設定では必要ありません。 指定しない場合、ポート 443 では https が、 その他すべてのポートでは http がデフォルトになります。 プロトコルは、どのモジュールがリクエストを処理すべきかを決定し、 AcceptFilter ディレクティブでプロトコル固有の最適化を適用するために使用されます。

非標準のポートで実行している場合にのみ、プロトコルを設定する 必要があります。たとえば、ポート 8443 で https サイトを実行する場合:

Listen 192.170.2.1:8443 https
top

バーチャルホストとの連携

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

翻訳済み言語:  de  |  en  |  es  |  fr  |  ja  |  ko  |  tr