- Home ›
- Nginx入門 ›
- Nginxのディレクティブ
リクエストを待ち受けるIPアドレスとポートの設定(listenディレクティブ)
Nginx の listen ディレクティブには、仮想サーバ(server コンテキスト)がリクエストを待ち受ける IP アドレス と ポート番号 を指定します。クライアントからリクエストが届くとまずこの設定を確認し、どの仮想サーバで対象となるのかを確認します。ここでは Nginx の listen ディレクティブの使い方について解説します。
listenディレクティブの書式
Nginx の listen ディレクティブには、仮想サーバがリクエストを受け付ける IP アドレスとポート番号を設定します。 listen ディレクティブの書式は次の通りです。
Syntax: listen address[:port]
listen port
listen unix:path
Default: listen *:80 | *:8000;
Context: server
※ 非常にオプションが多いため、ここではよく利用するもののみをあとで解説します。
※ デフォルトについて、 Nginx を root ユーザーで実行している場合はポート番号 80 番がデフォルトとなり、一般ユーザーで実行している場合はポート番号 8000 番がデフォルトとなります。
listen ディレクティブは server コンテキストに記述します。値として仮想サーバがリクエストを受け付ける IP アドレスとポート番号を指定します。
※ ここで指定するのはクライアントの IP アドレスではなく、サーバ側のインターフェースの IP アドレスです。インターフェースとは、サーバがネットワークと接続するための入口のことで、1 つだけの場合もあれば複数ある場合もあります。
設定する値は、 IP アドレスだけ、ポート番号だけ、 IP アドレスとポート番号の組み合わせ、などを指定できます。
あとで詳しく解説しますが、クライアントからリクエストが届いたときに、まず最初に仮想サーバに設定されている listen ディレクティブの値をチェックして、対象となる仮想サーバの候補を選びます。そのあとで候補の中から server_name ディレクティブの値をチェックして使用する仮想サーバを決定します。
listenディレクティブの設定例
listen ディレクティブの設定例をいくつか見ていきます。
server {
listen 80;
}
(IPv4 の IP アドレスを持つ)すべてのインターフェースでポート番号が 80 番のリクエストを受け付けます。
server {
listen *:80;
}
server {
listen 0.0.0.0:80;
}
(IPv4 の IP アドレスを持つ)すべてのインターフェースでポート番号が 80 番のリクエストを受け付けます。 listen 80; と同じです。
server {
listen [::]:80;
}
IPv6 の IP アドレスを持つすべてのインターフェースからのポート番号が 80 番のリクエストを受け付けます。
server {
listen 80;
listen [::]:80;
}
IPv4 と IPv6 の両方を待ち受ける場合は、両方指定してください。
server {
listen 192.168.0.1:80;
}
IP アドレスが 192.168.0.1 のインターフェースからで、ポート番号が 80 番のリクエストを受け付けます。
server {
listen 127.0.0.1:80;
}
サーバが動作している同じマシンからでポート番号が 80 番のリクエストを受け付けます。外部ネットワークからのアクセスはできません。ちなみに 127.0.0.1 はローカルループバックアドレスと呼ばれるもので、自分自身を指す特別な IPv4 のアドレスです。
server {
listen 443 ssl;
}
ポート番号が 443 番のリクエストを受け付けます。 HTTPS 通信を行う場合に指定します。この場合はオプションで ssl を指定します。
server {
listen 443 ssl http2;
}
HTTP/2 プロトコルを有効にする場合はオプションで http2 を指定します。 HTTP/2 は一般的に HTTPS で利用されるため、ポート番号には 443 を指定し、オプションで ssl も併せて指定します。
default_serverの設定
Nginx がリクエストを受け取ると、まず IP アドレスとポート番号が一致する listen が設定されている仮想サーバ(serverコンテキスト)を探します。複数見つかる場合もあります。その中から server_name で設定されているサーバー名に一致するものを選択します。このとき、サーバー名に一致するものがない場合はデフォルトの仮想サーバが使用されます。
デフォルトの仮想サーバは IP アドレスとポート番号が一致する仮想サーバの中で、一番上に記述されているものです。
次の例を見てください。
http {
server {
listen 192.168.0.1:80;
server_name example.jp;
}
server {
listen 80;
server_name example.com;
}
server {
listen 80;
server_name example.org;
}
}
3 つの仮想サーバが記述されています。(インターフェースの) IP アドレスが 192.168.0.1 でポート番号が 80 番のリクエストがあった場合、 3 つの仮想サーバが候補となります。このとき、リクエストのホスト名が server_name と一致するものがなければ、一番上の仮想サーバが使用されます。
次に IP アドレスが 192.168.0.2 でポート番号が 80 番のリクエストがあった場合、 2 番目と 3 番目の仮想サーバが候補となります。このとき、リクエストのホスト名が server_name と一致するものがなければ、より上に記述されている 2 番目の仮想サーバが使用されます。
このようにまずリクエストが listen と一致する仮想サーバを候補として集めます。そしてホスト名が一致する仮想サーバがなかった場合に一番上の仮想サーバがデフォルトとなりますが、一番上の仮想サーバではなく特定の仮想サーバをデフォルトに設定したい場合は仮想サーバの listen ディレクティブに default_server オプションを記述してください。
listen address[:port] default_server listen port default_server
先ほどの例で 3 番目の仮想サーバをデフォルトにしたい場合は、次のように記述します。
http {
server {
listen 192.168.0.1:80;
server_name example.jp;
}
server {
listen 80;
server_name example.com;
}
server {
listen 80 default_server;
server_name example.org;
}
}
なお default_server が指定されていても、リクエストが listen で設定されている IP アドレスやポート番号と一致しなければ選ばれることはありません。
-- --
Nginx の listen ディレクティブの使い方について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。