Nginxはhttpリクエスト実装プロセス分析を処理する

Nginxはhttpリクエスト実装プロセス分析を処理する

Nginxはまず、設定ファイル内のどのserver{}ブロックを処理に使用するかを決定します。次のserver{}設定を想定します。

サーバー{
  聞く 80;
  サーバー名 aaa;
  ...
}

サーバー{
  聞く 80;
  サーバー名 bbb;
  ...
}

Nginx は、受信した http リクエスト ヘッダーの Host フィールドの値に基づいて、使用するサーバーを決定します。

リクエスト ヘッダーに Host フィールドがない場合、または Host フィールドの値が Nginx 構成ファイルの server{} の {server_name} と一致しない場合は、最初の server{} を使用してリクエストが処理されます。

リクエスト ヘッダーの Host フィールドの値が、Nginx 構成ファイル内の server{} の {server_name} と一致する場合、この server{} を使用してリクエストが処理されます。

curl ツールを使用すると簡単に実験を行うことができます。curl は http リクエストのリクエスト ヘッダーを設定できるため、[-H] を使用して Host フィールドを任意に設定できます。以下の 10.210.65.73 は、nginx がインストールされているマシンの IP アドレスです。

したがって、次のコマンドを使用すると、http リクエストを送信した後、nginx は server{server_name aaa} を使用してリクエストを処理します。

curl.exe -H "ホスト: aaa" 10.210.65.73

非常に重要な結論: server_name は、http リクエスト ヘッダーの Host フィールドの値に対応します。上記の理論的なサポートにより、リバース プロキシと負荷分散を簡単に設定できます。

受信 HTTP リクエスト ヘッダーの Host フィールドが aaa の場合、storage.test がそれを処理します。

受信 HTTP リクエスト ヘッダーの Host フィールドが bbb の場合、tracker.test がそれを処理します。

  #負荷分散構成、IP 129 のマシンは高い構成になっているため、より多くの上流ストレージを処理できるように 27 という番号が割り当てられます。test {
   サーバー 10.210.65.129:80 重み=27;
   サーバー 10.210.65.130:80 重み=1;
  }

  #負荷分散構成アップストリームtracker.test {
   サーバー 10.210.65.52:80 重み=7;
   サーバー 10.210.65.53:80 重み=2;
  }

  #ファイルストレージサーバー{
    聞く 80;
    サーバー名 aaa;
    位置 / {
      #http::// の後のコンテンツは自己定義であり、上記のアップストリーム名 proxy_pass http://storage.test に対応します。
    }
  }

  #ファイルサーバートラッカー
  サーバー{
    聞く 80;
    サーバー名 bbb;

    位置 / {
      #http::// の後の内容は自己定義であり、アップストリーム名 proxy_pass http://tracker.test に対応します。
    }

  }

listen in server{} はどのポートを listen していますか?

リッスンされているのは、nginx サーバー自体のプロセスのポートではなく、http リクエストを送信するプロセス (主にブラウザー) のポートです (http リクエストの場合、ポートは 80 です)。

Nginx は、http リクエスト ヘッダーの Host フィールドの値と、http リクエストを送信するプロセス (主にブラウザー) のポートに基づいて、http リクエストの処理に使用するサーバーを決定します。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • nginx の http リクエスト処理の各段階の詳細な分析
  • Nginx は https ウェブサイト構成コード例を実装します
  • https暗号化アクセス用にnginxを設定するための詳細なチュートリアル
  • Nginxドメイン名転送のhttpsアクセスの実装
  • Alibaba Cloud Nginx はドメイン名アクセス プロジェクトを実装するために https を設定します (グラフィック チュートリアル)
  • Nginxはhttpとhttpsの両方のアクセスをサポートするために同じドメイン名を設定します
  • HttpとHttpsの両方をサポートするNginxの詳細な設定
  • nginx + セカンダリドメイン名 + https サポートを使用する

<<:  JavaScript で判決文をエレガントに記述する例

>>:  Mysql SQL ステートメント演習 (50 問)

推薦する

WeChatアプレットでQRコードを識別するために長押しする実装プロセス

序文公式アカウントのQRコードは長押しで認識できることは皆さんご存じですが、ミニプログラムに対する制...

CSS と Bootstrap アイコンを使用して、上下にジャンプするインジケーター矢印のアニメーション効果を作成します。

ページが非常に長い場合は、下にさらにコンテンツがあることをユーザーに知らせるために矢印が必要になるこ...

任意の長さの配列を作成または埋めるための JS のヒントの要約

目次序文直接充填方式for ループの push() メソッド配列コンストラクタメソッド配列コンストラ...

JavaScript キャンバス テキスト クロック

この記事では、テキストクロックを実装するためのキャンバスの具体的なコードを例として紹介します。具体的...

JavaScript でフォロー広告を実装するためのサンプルコード

フローティング広告は、ウェブサイト上で非常に一般的な広告形式です。フローティング広告は、ユーザーの閲...

WeChatアプレットが連携メニューを実現

最近はコース設計を実現するために、フロントエンドも少しやっています。今日はいくつかの機能を実現するた...

vscode dockerプラグインのdocker.socket権限問題を解決する

解決策: システム内のすべての .vscode 関連プロセスを終了します (または、remote-s...

vsftp を使用して Linux で FTP サーバーを構築する (パラメータの説明付き)

導入この章では、主に Linux で FTP サーバーを構築するプロセスを紹介します。習得すべき重要...

HTML ヘッドタグの詳細な紹介

HTML のヘッド部分には、ブラウザによる Web ページのレンダリングや SEO などに関連するタ...

「MySQL サービスを開始できません エラー 1069」を解決する方法

今日、外出中に同僚から、ウェブサイトのバックエンドにアクセスできないというメッセージが届きました。と...

サーバー上で selenium+chromedriver を実行するための詳細なチュートリアル

1. はじめにSelenium を使用して Web サイトからデータをスクレイピングしたいのですが、...

sqlとmysqlの違いは何ですか?

SQL とは何ですか? SQL はデータベースを操作するために使用される言語です。 SQL はすべ...

HTMLページにビデオを挿入する方法の概要

ページでビデオ タグを使用する場合は、Ogg Theora または VP8 (これに問題がない場合)...

ネイティブ js が携帯電話のプルダウン更新を模倣

この記事では、携帯電話のプルダウンリフレッシュを模倣したjsの具体的なコードを参考までに共有します。...

MySQL 8.0 Windows zip パッケージ版の詳細なインストール手順

MySQL 8.0 Windows zipのインストール手順は次のように紹介されています。準備する:...