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データ暗号化と復号化

推薦する

Sublime / vscode による HTML コード生成の迅速な実装

目次基本的なHTML構造div とクラス名のショートカット キーを生成するクラス名を持つdiv ID...

CCS におけるマージン: トップ崩壊問題を解決する

HTML 構造は次のとおりです。 CCS 構造は次のとおりです。 ページ効果図は次のとおりです。 こ...

よく忘れられがちな CSS のヒント 26 選

これは、よく使われるけれども忘れられがちな CSS 実装方法のコレクションです。抜けや追加があれば、...

MySQL でデータをクエリし、条件に基づいて別のテーブルに更新する方法の例

この記事では、MySQL が条件に基づいてデータをクエリし、別のテーブルに更新する方法を例を使用して...

Layuiテーブルは指定された行のラジオボタンを選択し、その行の実装コードまでスクロールします。

layui テーブルには複数行のデータがあります。外部入力コンテンツを通じて、指定された行を見つけ...

Nest.js のハッシュと暗号化の例の詳細な説明

0x0 はじめにまず、ハッシュアルゴリズムとは何でしょうか?メッセージやセッション項目など、一部のデ...

MySQL 8の新機能ROLEの詳しい説明

MySQL ROLE はどのような問題を解決しますか?プロフェッショナルな資質を持ち、権限管理に細心...

レスポンシブ原則と Vue2.0/3.0 の違いについての簡単な分析

序文vue3.0 が正式にリリースされて以来、多くの友人が vue3.0 に切り替えました。ここでは...

Kubernetes (k8s) 入門

Kubernetes は面白そうだったので(ギリシャ人なら名前に問題があると思うでしょうが)、ずっと...

MySQL のデータ統計に関するヒント

よく使用されるデータベースである MySQL では、多くの操作が必要です。デジタル操作には非常に便利...

HTTP 戻りコード一覧(中国語と英語の説明)

httpリターンコードリスト(以下は概要です)詳細な中国語の説明についてはここをクリックしてくださ...

Linux で MongoDB のリモート自動バックアップを実装する方法

序文古いプロジェクトを引き継ぐ苦労 - MongoDB クラスターの学習と構築に関する前回の記事を読...

MySQLにログインする際のエラー「ERROR 1045 (28000)」を解決する方法

今日はサーバーにログインして、データベース内のいくつかのものを変更する準備をしました。しかし、パスワ...

Navicateを使用してAlibaba Cloud Server上のMySQLに接続する

1. まず、サーバーの mysql にアクセスして権限を変更します。 GRANT オプション付きで、...

Vue3 を使用して虫眼鏡効果を実現する方法の例

目次序文1. カプセル化の重要性2. どのようにカプセル化しますか? 1. 準備2. 梱包を開始する...