この記事では、nginx サーバーが http およびその他のリクエストに応答して処理する方法を詳しく説明し、nginx 仮想ホストの構成方法を説明します。必要な友人は参照してください。
まず、nginx の名前ベースの仮想ホスト
Nginx はまず、リクエストを処理する仮想ホストを選択します。
簡単な構成から始めます (3 つの仮想ホストすべてがポート *:80 でリッスンしている):
コードをコピー コード例:
server {
listen 80;
server_name jbxue.org www.jbxue .org;
...
}
server {
リッスン 80;
サーバー名 jbxue.net www.jbxue.net;
...
}
サーバー {
リッスン 80;
サーバー名 jbxue.com www.jbxue .com;
…
}
この構成では、nginx はリクエストの「Host」ヘッダーのみをチェックして、リクエストを処理する必要がある仮想ホストを決定します。 Host ヘッダーがどの仮想ホストとも一致しない場合、またはリクエストに Host ヘッダーがまったく含まれていない場合、nginx はこのポートで定義されているデフォルトの仮想ホストにリクエストを分散します。上記の構成では、リストされている最初の仮想ホストが nginx のデフォルトの仮想ホストです。これは nginx のデフォルトの動作です。さらに、ホストをデフォルトの仮想ホストとして明示的に設定できます。つまり、「listen」コマンドで「default_server」パラメータを設定します。
コードをコピー コード例:
server {
listen 80 default_server ;
server_name jbxue.net www.jbxue.net;
…
}
「default_server」パラメータはバージョン 0.8.21 以降で利用可能です。以前のバージョンでは、代わりに「default」パラメータを使用する必要がありました。
「default_server」はホスト名ではなく、リスニングポートの属性であることに注意してください。これについては後で詳しく説明します。
未定義のホスト名を持つリクエストの処理を防ぐ方法
「Host」ヘッダーがリクエストにない場合は、次のホストを定義してこれらのリクエストを破棄できます:
コードをコピー コード例:
server {
Listen 80; er server_name "" "";
Return 444;
ここでは、「host」ヘッドのリクエストに一致するように空の文字列のホスト名を設定し、Nginx 固有の値を返します。非 HTTP 標準リターンから返されるコード 444。これを使用して接続を閉じることができます。
バージョン 0.8.48 以降、これがホスト名のデフォルトになっているため、server_name "" は省略できます。以前のバージョンでは、マシンのホスト名がデフォルトのホスト名として使用されていました。
ドメイン名と IP の混合に基づく仮想ホスト
この構成では、異なるアドレスでリッスンする複数の仮想ホストがあります。 192.168.1.1:80;
...
}
サーバー { listen 192.168.1.1:80; サーバー名 jbxue. net www.jbxue.net; ... }
server {
listen 192.168.1.2:80;
server_name jbxue.com www.jbxue.com;
...
}
この構成では、nginx は最初に、要求された IP アドレスとポートが一致するかどうかをテストします。特定のサーバー構成ブロック内の listen ディレクティブ構成。次に、nginx はリクエストの Host ヘッダーがこのサーバー ブロック内の特定の server_name 値と一致するかどうかのテストを続けます。ホスト名が見つからない場合、nginx はリクエストをデフォルトの仮想ホストに渡します。たとえば、ポート 192.168.1.1:80 から受信した www.jbxue.com へのアクセス要求は、ポート 192.168.1.1:80 でリッスンするデフォルトの仮想ホストによって処理されます。この場合、定義がないため、これが最初のサーバーになります。 www.jbxue.com という名前の仮想ホスト。
デフォルトサーバーはリスニングポートのプロパティであるため、異なるリスニングポートに異なるデフォルトサーバーを設定できます:
コードをコピー
コード例:
server_name jbxue . org www.jbxue.org;
...}
server {
サーバー名 jbxue.com www.jbxue.com; ...} 2 番目、単純な PHP サイト構成 コードをコピー コード例: server {
一般的な単純な PHP サイトでは、nginx がリクエストを処理する場所を選択する方法:
Listen 80;
server_name jbxue .org www.jbxue.org;
root /data/www;
location / {
Index Index.html Index.php;
}
location ~* .(gif|jpg|p ng)$ {
有効期限は 30 日です;
}
location ~ .php$ {
fastcgi_pass localhost:9000;
fastcgi_param SCRIPT_FILENAME
$document_root$fastcgi_script_name;
include fastcgi_params;
}
}
まず、 nginx はプレフィックス マッチングを使用して、このステップでは、nginx は構成ファイルに表示される場所の順序を無視します。
上記の設定では、場所に一致するプレフィックスは「/」のみであり、どのリクエストにも一致する可能性があるため、最後の選択肢として使用されます。
その後、nginx は設定内の順序で正規表現の位置を照合し続け、最初の正規表現に一致した後で検索を停止します。
一致した場所が使用されます。正規表現に一致する場所がない場合は、見つかったプレフィックスが最も正確に一致する場所が使用されます。
すべての位置一致テストでは、リクエストの URI 部分のみが使用され、パラメーター部分は使用されないことに注意してください。これは、パラメーターを記述する方法が次のように多数あるためです:
/index.php?user=john&page=1
/index.php?page=1&user=john
さらに、誰でも自由にパラメーターを追加できます。リクエスト文字列: 文字列:
/index.php?page=1&something+else&user=john
上記の設定を使用してリクエストがどのように処理されるかを見てみましょう:
リクエスト "/logo.gif" は最初に場所 "/" と一致します。正規表現「.(gif|jpg|png)$」に一致します。したがって後者で処理することになります。 「root /data/www」コマンドに従って、nginx はリクエストをファイル /data/www/logo.gif にマップし、このファイルをクライアントに送信します。
リクエスト「/index.php」も最初に一致します。 location "/" に一致し、正規表現 ".(php)$" に一致するため、後者によって処理され、localhost:9000 でリッスンする FastCGI サーバーに送信されます。fastcgi_param ディレクティブは、FastCGI の値を設定します。パラメータ SCRIPT_FILENAME を「 /data/www/index.php」に設定すると、FastCGI サーバーがこのファイルを実行します。変数 $document_root は root コマンドで設定された値と等しく、変数 $fastcgi_script_name の値は要求された URI です。 、「/index.php」。
リクエスト「/about .html」は場所「/」にのみ一致するため、「root /data/www」命令に従って、nginx はこの場所をマップします。ファイル「/data/www/about.html」にリクエストを送信し、このファイルをクライアントに送信します。
リクエスト「/」の処理は、場所「/」にのみ一致するため、次のようになります。この場所を使用して処理されます。
その後、インデックス ディレクティブはそのパラメーターと「root /data/www」コマンドを使用して、対応するファイルが存在するかどうかを検出します。
ファイル /data/www/index.html が存在しない場合、および /data /www/index.php が存在する場合、このコマンドは一度実行されます。「/index.php」への内部リダイレクトが行われ、その後、nginx は、このリクエストがクライアントから送信されたかのように、「/index.php」に一致する場所を再検索します
前に見たように、このリダイレクトは最終的に FastCGI サーバーに渡されて処理されます
上記では、関連する側面も含め、nginx のリクエストへの応答および処理方法について詳しく説明しました。PHP チュートリアルに興味のある友人に役立つことを願っています。