Nginx Webサーバーのサンプルコードの設定方法の詳細な説明

Nginx Webサーバーのサンプルコードの設定方法の詳細な説明

概要

今日は主に、NGINX を Web サーバーとして設定する方法を共有します。内容は次のとおりです。

  • 仮想サーバーの設定
  • 設定場所
  • 変数の使用
  • 特定のステータスコードを返す
  • HTTPレスポンスの書き換え

大まかに言えば、NGINX を Web サーバーとして構成し、どの URL を処理するか、またそれらの URL のリソースに対する HTTP リクエストをどのように処理するかを定義するときに理解しておくべき問題がいくつかあります。 低レベルでは、構成は特定のドメインまたは IP アドレスへの要求の処理を制御する仮想サーバーのセットを定義します。

HTTP トラフィックに使用される各仮想サーバーは、特定の URI セットの処理を制御する、ロケーションと呼ばれる特別な構成インスタンスを定義します。 各場所では、その場所へのリクエストに対して何が起こるかについて独自のマッピングを定義します。 NGINX はこのプロセスを完全に制御します。 各場所では、リクエストをプロキシしたり、ファイルを返したりできます。 さらに、URI を変更して、リクエストを別の場所または仮想サーバーにリダイレクトすることもできます。 さらに、特定のエラー コードを返したり、各エラー コードに対応する特定のページを構成したりできます。

1. 仮想サーバーをセットアップする

NGINX 構成ファイルには、仮想サーバーを定義するためのサーバー ディレクティブが少なくとも 1 つ含まれている必要があります。 NGINX はリクエストを処理するときに、まずリクエストを処理する仮想サーバーを選択します。

仮想サーバーは、http コンテキストの server ディレクティブによって定義されます。次に例を示します。

http { 
 サーバー{ 
 # サーバー構成 
 } 
}

複数の仮想サーバーを定義するために、複数のサーバー ディレクティブを http コンテキストに追加できます。

サーバー構成ブロックには通常、サーバーがリクエストをリッスンする IP アドレスとポート (または Unix ドメイン ソケットとパス) を指定する listen ディレクティブが含まれます。 IPv4 アドレスと IPv6 アドレスの両方が受け入れられます。角括弧 ( ) で囲みます。

次の例は、IP アドレス 127.0.0.1 およびポート 8080 でリッスンするサーバーの構成を示しています。

サーバー{ 
 127.0.0.1:8080 をリッスンします。 
 # 残りのサーバー設定 
}

ポートを省略すると、標準ポートが使用されます。 同様に、アドレスが省略された場合、サーバーはすべてのアドレスをリッスンします。 listen ディレクティブが含まれていない場合、スーパーユーザー権限に応じて、「標準」ポートは 80/tcp になり、「デフォルト」ポートは 8000/tcp になります。

要求された IP アドレスとポートに一致するサーバーが複数ある場合、NGINX は、サーバー ブロック内の server_name ディレクティブに対して要求の Host ヘッダー フィールドをテストします。 server_name 引数には、完全な (正確な) 名前、ワイルドカード、または正規表現を指定できます。 ワイルドカードは、先頭、末尾、またはその両方にアスタリスク (*) が含まれる文字列です。アスタリスクは任意の文字シーケンスと一致します。 NGINX は正規表現に Perl 構文を使用します。正規表現の前にはチルダ () を付けます。 この例は正確な名前を示しています。

サーバー{ 
 聞く 80; 
 サーバー名 example.org www.example.org; 
 ... 
}

2. 設定場所

NGINX は、リクエスト URI に基づいて、トラフィックを異なるプロキシに送信したり、異なるファイルを提供したりできます。 これらのブロックは、サーバー ディレクティブ内に配置された場所ディレクティブを使用して定義されます。

たとえば、3 つのロケーション ブロックを定義して、仮想サーバーに、一部の要求を 1 つのプロキシ サーバーに送信し、他の要求を別のプロキシ サーバーに送信し、残りをローカル ファイル システムからファイルを配信して処理するように指示できます。

NGINX テストは、すべての場所ディレクティブのパラメータに基づいて URI を要求し、一致する場所で定義されたディレクティブを適用します。 各ロケーション ブロック内では、通常、(いくつかの例外はありますが) さらに多くのロケーション ディレクティブを配置して、特定のリクエスト セットの処理をさらに細かく調整できます。

注: このチュートリアル記事全体を通じて、場所という単語は単一の場所のコンテキストを指します。

location ディレクティブは、プレフィックス文字列 (パス名) と正規表現の 2 種類の引数を取ります。 リクエスト URI がプレフィックス文字列と一致するには、プレフィックス文字列で始まる必要があります。

パス名パラメータを持つ次の例の場所は、/some/path/document.html など、/some/path/ で始まるリクエスト URI と一致します。/some/path がその URI の先頭に表示されないため、/my-site/some/path とは一致しません。

場所 /some/path/ { 
 ... 
}

大文字と小文字を区別する一致の場合は正規表現の前にチルダ (~) が付き、大文字と小文字を区別しない一致の場合はチルダ (~*) が付きます。 次の例は、文字列 .html または .html をどこかに含む URI に一致します。

場所 ~ \.html? { 
 ... 
}

URI に最も一致する場所を見つけるために、NGINX はまず URI をプレフィックス文字列の場所と比較します。次に、正規表現を使用して場所を検索します。

ロケーション コンテキストには、静的ファイルを提供するか、プロキシ サーバーにリクエストを渡すかなど、リクエストを解決する方法を定義するディレクティブを含めることができます。 次の例では、最初の場所のコンテキストに一致するリクエストは /data/images ディレクトリからファイルを提供し、2 番目の場所に一致するリクエストは www.example.com ドメインのコンテンツをホストしているプロキシ サーバーに渡されます。

サーバー{ 
 場所 /images/ { 
 ルート /data; 
 } 
 位置 / { 
 proxy_pass http://www.example.com; 
 } 
}

root ディレクティブは、提供する静的ファイルを検索するためのファイル システム パスを指定します。 場所に関連付けられたリクエスト URI がパスに追加され、提供される静的ファイルの完全な名前が取得されます。 上記の例では、/images/logo.png のリクエストに応答して、NGINX はサーバー上でローカルに実際の対応するファイル /data/images/logo.png を提供します。

proxy_pass ディレクティブは、設定された URL を使用してプロキシ サーバーにリクエストを渡します。その後、プロキシ サーバーの応答がクライアントに送り返されます。上記の例では、/images/ で始まらない URI に対するすべてのリクエストは、プロキシ サーバー (つまり、www.example.com) に渡されます。

3. 変数の使用

設定ファイル内の変数を使用すると、定義した状況に応じて NGINX がリクエストを異なる方法で処理するようにすることができます。 変数は実行時に計算され、命令の引数として使用される名前付きの値です。 変数は、名前の先頭に $ (ドル) 記号が付きます。 変数は、処理中のリクエストのプロパティなど、NGINX の状態に基づいて情報を定義します。

コア HTTP 変数などの定義済み変数が多数あり、set、map、geo ディレクティブを使用してカスタム変数を定義することもできます。 ほとんどの変数は実行時に計算され、特定のリクエストに関連する情報が含まれます。 たとえば、$remote_addr にはクライアントの IP アドレスが含まれ、$uri には現在の URI 値が保持されます。

4. 特定のステータスコードを返す

一部の Web サイトの URI では、ページが一時的または永続的に移動された場合など、特定のエラーまたはリダイレクト コードを含む応答をすぐに返す必要があります。 最も簡単な方法は、 return 命令を使用することです。 たとえば、404 Not Found ステータス コードが返されます。

場所 /wrong/url { 
 404 を返します。 
}

返される最初のパラメータは応答コードです。オプションの 2 番目の引数には、リダイレクト先の URL (コード 301、302、303、および 307) または応答本文で返されるテキストを指定できます。 例えば:

場所 /permanently/moved/url { 
 301 http://www.example.com/moved/here を返します。 
}

戻りディレクティブは、場所とサーバーの両方のコンテキストに含めることができます。

5. HTTPレスポンスを書き換える

場合によっては、HTTP 応答の内容を書き換えたり変更したりして、ある文字列を別の文字列に置き換えたりする必要があります。 sub_filter ディレクティブを使用して、適用する書き換えを定義できます。 ディレクティブは変数と置換チェーンをサポートしており、より複雑な変更が可能になります。

たとえば、プロキシ サーバーを参照するように絶対リンクを変更できます。

位置 / { 
 サブフィルター /blog/ /blog-staging/; 
 sub_filter_once をオフにします。 
}

別の例では、メソッドを http:// から http:// に変更し、localhost アドレスをリクエスト ヘッダー フィールドのホスト名に置き換えます。 sub_filter_once ディレクティブは、NGINX に、場所内で sub_filter ディレクティブを連続して適用するように指示します。

位置 / { 
 サブフィルター 'href="http://127.0.0.1:8080/' 'href="http://$host/'; 
 サブフィルター 'img src="http://127.0.0.1:8080/' 'img src="http://$host/'; 
 sub_filter_once をオンにします。 
}

別の sub_filter の一致が発生した場合、sub_filter で変更された応答の部分は置き換えられなくなることに注意してください。

Nginx で Web サーバーを構成する方法のサンプルコードに関するこの記事はこれで終わりです。Nginx で Web サーバーを構成する方法の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • nginx のバージョン番号と WEB サーバー情報を隠すための解決策
  • Nginx を Web サーバーとして設定する方法
  • ソフトウェア ロード バランサを使用して Web サーバー クラスターを実装する (iis+nginx)
  • IP を使用した Web サーバーへの直接アクセスを防止するための Nginx の設定方法
  • Nginx+PHP (FastCGI) で高並列WEBサーバーを構築する (自動インストールスクリプト) 第2版
  • Nginx0.5.33+PHP5.2.5 (FastCGI) は、Apache より 10 倍優れた Web サーバーを構築します。
  • Linux+Nginx+Phpで高性能WEBサーバーを構築

<<:  MySQL の単一テーブル クエリ操作例の詳細な説明 [構文、制約、グループ化、集計、フィルタリング、並べ替えなど]

>>:  APPログインインターフェースシミュレーション要求を実装するためのPostmanデータ暗号化と復号化

推薦する

HTTPS の有効化に関する経験の共有

国内のネットワーク環境が悪化し続ける中、さまざまな改ざんや乗っ取りが後を絶たず、サイト全体をHTTP...

シェルで文字列内のスペースや指定された文字を削除する方法

インターネット上には、正しい方法であっても、使用しても正しい結果が得られない方法が数多くあります。正...

Win10 への MySQL 5.7 のインストール MSI 版のチュートリアル(画像とテキスト付き)

主にインストール後に my.ini ファイルを確認するために、msi 形式でインストールしました。フ...

MySQLでレコードを変更する場合、更新操作フィールド = フィールド + 文字列

シナリオによっては、varchar 型のフィールドを変更する必要があり、変更の結果は 2 つのフィー...

Windows 10 での MySQL 8.0 のダウンロードとインストール構成のグラフィック チュートリアル

この記事では、MySQL 8.0のダウンロードとインストールについてご紹介します。具体的な内容は以下...

Windows 版 MySQL のインストール、起動、基本設定に関する詳細なグラフィック チュートリアル

ダウンロード:ステップ 1: ウェブサイトを開きます (ダウンロードするには公式ウェブサイトにアクセ...

Echart Bar の 2 列チャート スタイルの最も完全な詳細な説明

目次序文インストールと設定1. Echartsをインストールする2. Echartsをグローバルに導...

MySQLの3値ロジックとNULLの詳細な説明

目次NULLとは何か2種類のNULLなぜ「= NULL」ではなく「IS NULL」と書く必要があるの...

Tomcatのクラスロードメカニズムのプロセスとソースコード分析

目次序文1. Tomcat クラスローダー構造図: 2. Tomcat のクラスロードプロセスの説明...

Centos7 サーバーで jar パッケージ プロジェクトを開始する最良の方法

序文Linux 上で jar パッケージを実行する方法は誰もが知っています。なぜ別々に話したいのでし...

React の 3 つの主要属性における Ref の使用に関する詳細な説明

目次クラスコンポーネント機能コンポーネントインタビューのよくある質問: React における ref...

$remote_addr に基づく nginx フロントエンド配布方法の詳細な説明

要件は次のとおりです。ドメイン名の下に複数のサーバーがあります。現在、特定の地域をテストしています。...

SQLデータベースの14の事例の紹介

データシート /* Navicat SQLite データ転送 ソースサーバー: school ソース...