中国語でのNginx設定パラメータの詳細な説明(負荷分散とリバースプロキシ)

中国語でのNginx設定パラメータの詳細な説明(負荷分散とリバースプロキシ)

PS: 最近、nginx を詳細に紹介している <<High-Performance Linux Server Construction Practice>> の Nginx の章を読んでいます。よく使用される Nginx 構成パラメータの中国語の抜粋と、nginx ロード バランシングの実際のデモンストレーションをコピーして、後で確認できるようにしました。

Nginx 設定パラメータの詳細な説明 (中国語)

#Nginxが実行するユーザーとユーザーグループを定義する
ユーザー www www;
#
#nginx プロセスの数。CPU コアの合計数と同じに設定することをお勧めします。
ワーカープロセス数 8;
#
#グローバル エラー ログ定義タイプ、[debug | info | notice | warn | error | crit]
error_log /var/log/nginx/error.log 情報;
#
#プロセスファイル
pid /var/run/nginx.pid;
#
#nginx プロセスによって開かれるファイル記述子の最大数。理論値は、開いているファイルの最大数 (システム値 ulimit -n) を nginx プロセスの数で割った値になります。ただし、nginx はリクエストを不均等に割り当てるため、ulimit -n の値と一致させることをお勧めします。
ワーカー_rlimit_nofile 65535;
#
#動作モードと接続数の上限
イベント
{
#イベント モデルを参照するには、[ kqueue | rtsig | epoll | /dev/poll | select | poll ] を使用します。epoll モデルは、Linux カーネル バージョン 2.6 以降の高性能ネットワーク I/O モデルです。FreeBSD で実行している場合は、kqueue モデルを使用します。
epoll を使用します。
# 単一プロセスの最大接続数 (最大接続数 = 接続数 * プロセス数)
ワーカー接続 65535;
}
#
#httpサーバーをセットアップする
http
{
include mime.types; #ファイル拡張子とファイルタイプのマッピングテーブル
default_type application/octet-stream; #デフォルトのファイルタイプ
#charset utf-8; #デフォルトのエンコーディング
server_names_hash_bucket_size 128; #サーバー名ハッシュテーブルのサイズ
client_header_buffer_size 32k; #アップロードファイルサイズの制限
large_client_header_buffers 4 64k; #リクエストバッファを設定する
client_max_body_size 8m; #リクエストバッファを設定する
#
#オープンディレクトリリストアクセス。ダウンロードサーバーに適していますが、デフォルトでは閉じられています。
autoindex オン; #ディレクトリを表示
autoindex_exact_size on; #ファイル サイズを表示します。デフォルトではオンになっており、ファイルの正確なサイズがバイト単位で表示されます。オフに変更すると、ファイルのおおよそのサイズが KB、MB、または GB 単位で表示されます。
autoindex_localtime on; #ファイル時間を表示します。デフォルトでは、表示されるファイル時間はオフで、表示されるファイル時間は GMT 時間です。オンに変更すると、表示されるファイル時間はファイルのサーバー時間になります。
#
sendfile on; #効率的なファイル転送モードをオンにします。sendfile ディレクティブは、nginx がファイルを出力するときに sendfile 関数を呼び出すかどうかを指定します。一般的なアプリケーションの場合は、オンに設定されています。ダウンロードなど、ディスク IO 負荷が大きいアプリケーションで使用する場合は、ディスクとネットワークの I/O 処理速度のバランスを取り、システム負荷を軽減するために、オフに設定できます。注: 画像の表示が異常な場合は、これをオフに変更してください。
tcp_nopush on; #ネットワークの混雑を防ぐ
tcp_nodelay on; #ネットワークの混雑を防ぐ
#
keepalive_timeout 120; #(単位: s) クライアント接続がアクティブのままであるタイムアウト期間を設定します。この期間が経過すると、サーバーは接続を閉じます。
#
#FastCGI 関連のパラメータは、Web サイトのパフォーマンスを向上させるために、リソースの使用量を減らし、アクセス速度を上げます。次のパラメータは、文字通りの意味を見ると理解できます。
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
#
#gzip モジュールの設定
gzip on; # gzip圧縮出力を有効にする
gzip_min_length 1k; #圧縮されたページに許可される最小バイト数。ページのバイト数は、ヘッダーのコンテンツ長から取得されます。デフォルトは 0 で、ページはサイズに関係なく圧縮されます。1k より大きいバイト数に設定することをお勧めします。1k 未満の場合、ページはどんどん大きくなる可能性があります。
gzip_buffers 4 16k; #圧縮結果ストリームキャッシュとして 16k メモリを 4 ユニット適用することを示します。デフォルト値は、gzip 圧縮結果を格納するために元のデータサイズと同じメモリ空間を適用することです。
gzip_http_version 1.1; #圧縮バージョン (デフォルト 1.1、現在ほとんどのブラウザが gzip 解凍をサポートしています。フロントエンドが squid2.5 の場合は 1.0 を使用してください)
gzip_comp_level 2; #圧縮レベル。1は圧縮率が最も低く、処理速度が速い。9は圧縮率が最も高く、CPUリソースを多く消費し、処理速度が最も遅いが、圧縮率が最も高いためパケットサイズが最も小さく、転送速度が速い。
gzip_types テキスト/プレーン アプリケーション/x-javascript テキスト/css アプリケーション/xml;
#圧縮タイプは、デフォルトで既にtext/htmlが含まれているため、以下に記述する必要はありません。記述しても問題はありませんが、警告が出ます。
gzip_vary on;# オプションにより、フロントエンド キャッシュ サーバーは gzip 圧縮されたページをキャッシュできます。例: squid を使用して nginx で圧縮されたデータをキャッシュします。
#
#IP接続数を制限するときに使用する必要があります
#limit_zoneクローラー $binary_remote_addr 10m;
#
##アップストリーム負荷分散、4 つのスケジューリング アルゴリズム (次の例はメインの講義です)##
#
#仮想ホストの設定
サーバ
{
#リスニングポート
聞く 80;
#スペースで区切って複数のドメイン名を持つことができます
サーバー名 wangying.sinaapp.com;
インデックス index.html index.htm index.php;
ルート /data/www/;
場所 ~ .*\.(php|php5)?$
{
127.0.0.1:9000; をデフォルトとして設定します。
fastcgi_index インデックス.php;
fastcgi.conf をインクルードします。
}
#画像キャッシュ時間設定
場所 ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
有効期限は10日です。
}
#JS と CSS のキャッシュ時間設定
場所 ~ .*\.(js|css)?$ {
1時間で期限切れになります。
}

#ログ形式の設定
log_format アクセス '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for';
#この仮想ホストのアクセスログを定義する
access_log /var/log/nginx/access.log アクセス;
#
#Nginx のステータスを表示するためのアドレスを設定します。StubStatus モジュールは、前回の起動以降の Nginx の動作ステータスを取得できます。このモジュールはコア モジュールではないため、Nginx をコンパイルしてインストールするときに手動で指定する必要があります。
場所 /NginxStatus {
stub_status オン;
access_log オン;
auth_basic "Nginxステータス";
auth_basic_user_file conf/htpasswd;
#htpasswd ファイルの内容は、Apache が提供する htpasswd ツールを使用して生成できます。
}
}
}

負荷分散を実現するNginx複数サーバー

Nginx ロード バランシング サーバー:

IP: 192.168.1.1
Web サーバー リスト:
ウェブ1:192.168.1.2
ウェブ2:192.168.1.3

目的: ユーザーが192.168.1.1サーバーにアクセスすると、Nginxを介してWeb1サーバーとWeb2サーバーに負荷分散されます。

http
{
  ##アップストリーム負荷分散、4 つのスケジューリング アルゴリズム##
  #スケジューリングアルゴリズム 1: ポーリング。各リクエストは、時系列順に 1 つずつ異なるバックエンド サーバーに割り当てられます。バックエンド サーバーがダウンした場合、障害のあるシステムは自動的に削除され、ユーザー アクセスは影響を受けません。upstream webhost {
    サーバー 192.168.1.2:80 ;
    サーバー 192.168.1.3:80 ;
  }
  #スケジューリング アルゴリズム 2: 重み。マシン構成に基づいて重みを定義できます。重みが高いほど、割り当てられる可能性が高くなります。upstream webhost {
    サーバー 192.168.1.2:80 重み=2;
    サーバー 192.168.1.3:80 重み=3;
  }
  #スケジューリングアルゴリズム3: ip_hash。各リクエストはアクセスIPのハッシュ結果に従って割り当てられるため、同じIPからの訪問者は固定のバックエンドサーバーにアクセスし、動的Webページのセッション共有問題を効果的に解決します。アップストリームWebホスト{
    ip_ハッシュ;
    サーバー 192.168.1.2:80 ;
    サーバー 192.168.1.3:80 ;
  }
  #スケジューリングアルゴリズム4: url_hash (サードパーティのプラグインをインストールする必要があります)。この方法では、アクセスされたURLのハッシュ結果に応じてリクエストを分散し、各URLが同じバックエンドサーバーに送信されるので、バックエンドキャッシュサーバーの効率をさらに向上させることができます。Nginx自体はurl_hashをサポートしていません。このスケジューリングアルゴリズムを使用する必要がある場合は、Nginxハッシュパッケージupstream webhost {をインストールする必要があります。
    サーバー 192.168.1.2:80 ;
    サーバー 192.168.1.3:80 ;
    $request_uri をハッシュします。
  }
  #スケジューリングアルゴリズム 5: fair (サードパーティのプラグインをインストールする必要があります)。これは、上記の 2 つよりもスマートな負荷分散アルゴリズムです。このアルゴリズムは、ページサイズと読み込み時間に基づいて負荷をインテリジェントに分散できます。つまり、バックエンドサーバーの応答時間に基づいてリクエストを割り当て、応答時間が短いリクエストを優先します。Nginx 自体は fair をサポートしていません。このスケジューリングアルゴリズムを使用する必要がある場合は、Nginx のupstream_fair モジュールをダウンロードする必要があります。#
  #仮想ホストの設定(スケジューリングアルゴリズム3: ip_hashを使用)
  サーバ
  {
    聞く 80;
    サーバー名 wangying.sinaapp.com;
    # "/" の場所のリバースプロキシを有効にする / {
      proxy_pass http://webhost;
      proxy_redirect オフ;
      proxy_set_header X-Real-IP $remote_addr;
      #バックエンドWebサーバーはX-Forwarded-Forを通じてユーザーの実際のIPを取得できる
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      #以下はオプションのリバース プロキシ構成です。
      proxy_set_header ホスト $host;
      client_max_body_size 10m; #クライアントが要求できる単一ファイルの最大バイト数 client_body_buffer_size 128k; #バッファプロキシがクライアント要求に対してバッファリングできる最大バイト数、
      proxy_connect_timeout 90; #バックエンドサーバーとのNginx接続タイムアウト(プロキシ接続タイムアウト)
      proxy_send_timeout 90; #バックエンドサーバーのデータ返信時間(プロキシ送信タイムアウト)
      proxy_read_timeout 90; #接続が成功した後のバックエンドサーバーの応答時間(プロキシ受信タイムアウト)
      proxy_buffer_size 4k; #ユーザーのヘッダー情報を保存するためのプロキシサーバー (nginx) のバッファサイズを設定します proxy_buffers 4 32k; #proxy_buffers バッファ、平均的な Web ページは 32k 未満に設定されます proxy_busy_buffers_size 64k; #高負荷時のバッファサイズ (proxy_buffers*2)
      proxy_temp_file_write_size 64k;
      #キャッシュフォルダのサイズを設定します。この値より大きい場合は、上流サーバーから転送されます。
  }
}

テストドメイン名: wangying.sinaapp.com
それぞれ192.168.1.1に解決されました
顧客がこれら 3 つのサイトにアクセスすると、Nginx は、顧客がアクセスした ip_hash 値に基づいて、Web1 サーバーと Web2 サーバー上の仮想ホストの構成に負荷分散を行います。

ローカルの単一サーバーは、動的および静的分離マルチポートリバースプロキシ構成を実装します。
Nginx ロード バランシング サーバー:
IP: 192.168.1.1:80
Web サーバーのリスト (同じマシン上):
ウェブ1:192.168.1.1:8080
ウェブ1:192.168.1.1:8081
ウェブ1:192.168.1.1:8082
達成目的:
ユーザーは http://wangying.sinaapp.com にアクセスします。これは、ローカル サーバーのポート 8080、8081、および 8082 に負荷分散されます。

http
{
  #サーバーの負荷はローカルポート8080、8081、8082に分散されるため、スクリプト解析サーバー用にローカルポート8080、8081、8082を開く必要があります。
    8080を聴く;
    サーバー名 wangying.sinaapp.com;
    ルート /mnt/hgfs/vmhtdocs/fastdfs/;

    場所 ~ \.php$ {
      127.0.0.1:9000; をデフォルトとして設定します。
      fastcgi_index インデックス.php;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      fastcgi_params を含めます。
    }
    #以下のポート 80 からわかるように、8080、8081、および 8082 は PHP の動的プログラム解析のみを担当するため、静的ファイル構成を設定する必要はありません。}
  サーバー{
    聞く 8081;
    サーバー名 wangying.sinaapp.com;
    ルート /mnt/hgfs/vmhtdocs/fastdfs/;
    インデックス index.php index.html index.htm;
    場所 ~ \.php$ {
      127.0.0.1:9000; をデフォルトとして設定します。
      fastcgi_index インデックス.php;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      fastcgi_params を含めます。
    }
  }
  #8082 は上記のサーバー構成に従い、listen 関数を変更するだけです。#
  #ローカルマルチポート負荷分散構成#
  #サーバーなので、イントラネットIPの代わりに127.0.0.1を使用できます
  #upstream の後のホスト名は単なる識別子です。単語またはドメイン名にすることができます。proxy_pass と同じにすることができます http://webhost upload webhost {
    サーバー 127.0.0.1:8080;
    サーバー 127.0.0.1:8081;
    サーバー 127.0.0.1:8082;
  }
  #ローカルポート80、負荷分散サーバーとしてリクエストを受け入れる
  {
    聞く 80;
    サーバー名 wangying.sinaapp.com;
    #ローカルの動的および静的分離リバースプロキシ構成 #すべてのPHPページはローカルのfastcgiの場所によって処理されます ~ \.php$ {
      proxy_pass http://webhost;
      proxy_set_header ホスト $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    # すべての静的ファイルは nginx によって直接読み取られます # 画像キャッシュ時間設定場所 ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
      有効期限は10日です。
    }
    #JS および CSS キャッシュ時間設定場所 ~ .*\.(js|css)?$ {
      1時間で期限切れになります。
    }
  }

以下は他のネットユーザーからのコメントです

1. メイン構成セクション

1. 正常な動作に必要な設定
#実行中のユーザーとグループ、グループIDは省略可能
ユーザー nginx nginx;

#nginxデーモンプロセスのpidファイルを指定します
pid パス/to/nginx.pid;

#すべてのワーカープロセスが開くことができるファイルハンドルの最大数を指定します
ワーカー_rlimit_nofile 100000;

2. パフォーマンス最適化に関する設定

#ワーカープロセスの数は、通常CPUの物理コア数よりわずかに少なくする必要があります。autoを使用して自動的に取得することもできます。
ワーカープロセスは自動です。

#CPU アフィニティ バインディング (CPU コンテキスト スイッチングも避けられません)
#利点: キャッシュヒット率の向上
#コンテキストスイッチ: 不要なCPU消費を引き起こします

#http://blog.chinaunix.net/uid-20662363-id-2953741.html
ワークCPUアフィニティ 00000001 00000010 0000100 000100000 001000000 01000000 10000000;

#タイマーの解像度 (リクエストが nginx に到達した後、nginx はユーザー リクエストに応答し、システム時間を取得してログに記録する必要があります。同時実行性が高い場合、1 秒間に何度も時間を取得することがあります)
#この値を下げると、gettimeofday() システムコールの回数を減らすことができます
タイマー解像度 100 ミリ秒;

#ワーカープロセスのnice値を示します。数値が小さいほど優先度が高くなります。
#nice値の範囲: -20,19
#対応する優先度: 100、139
ワーカー優先度番号;

2. イベント関連の設定

イベント {
#マスターがユーザーリクエストをワーカープロセスにディスパッチするときに使用される負荷分散ロック。オンにすると、複数のワーカーが新しいリクエストに順番にシリアル化して応答できます。
accept_mutex {オフ|オン}

#遅延待ち時間、デフォルトは500ms
accept_mutex_delay 時間;

#Accept_mutex ロックファイルパスが使用されました
lock_file ファイル;

#使用する時間モデルを指定します。Nginxに選択させることをお勧めします
[epoll|rtsig|select|poll] を使用します。

#単一のワーカープロセスによって開かれる同時接続の最大数、worker_processes*worker_connections
ワーカー接続数 2048;

#新しい接続通知を受け取った後、できるだけ多くの接続を受け入れるように nginx に指示します
multi_accept オン;
}

3. デバッグや問題の特定に使用
#nginx をデーモンプロセスとして実行するかどうか。デバッグの場合はオフに設定する必要があります
デーモン {オン|オフ}

#マスター/ワーカーモードで実行するかどうか。デバッグ中はオフに設定できます
マスタープロセス {オン|オフ}

#error_log の場所レベルでは、デバッグを使用する場合は、nginx をコンパイルするときに --with-debug オプションを使用する必要があります。
error_log ファイル | stderr | syslog:server=address[,parameter=value] | memory:size [debug|info|notice|warn|error|crit|alert|emerg];

要約: 頻繁に調整する必要があるパラメータ: worker_processes、worker_connections、work_cpu_affinity、worker_priority
新しい構成の変更が有効になります:
nginx -s reload その他のパラメータstop、quit、reopenもnginx -hを使用して表示できます。

4. ウェブサーバーとしてのnginxの設定
http {}: ngx_http_core_module モジュールによって導入された構成フレームワーク:
http {
上流
...
}
サーバー{
場所のURL {
ルート "/path/to/somedir"
...
}#httpdの<Location>と同様に、URLとローカルファイルシステム間のマッピング関係を定義するために使用されます
場所のURL {
もし ... {
...
}
}
}#各サーバーはhttpdの<VirtualHost>に似ています
サーバー{
...
}
}
注: http 関連のディレクティブは、http、server、location、upstream、if コンテキストでのみ使用できますが、一部のディレクティブはこれら 5 つのコンテキストのうち特定のコンテキストにのみ適用されます。

http {
#エラーページで nginx のバージョン番号をオンまたはオフにする
server_tokens オン;
#!server_tag オン;
#!server_info オン;

#ディスクIO設定を最適化し、nginxがsendfile関数を呼び出してファイルを出力するかどうかを指定します。一般的なアプリケーションの場合はオンに設定し、ダウンロードなどのディスクIOが多いアプリケーションの場合はオフに設定します。
ファイル送信オン;
#nginx を設定して、すべてのヘッダーを 1 つずつではなく 1 つのパケットで送信します。
tcp_nopush オン;
#nginx を、データをキャッシュせず、少しずつ送信するように設定します。

#長い接続のタイムアウトはデフォルトで75秒です
キープアライブタイムアウト30;
#長時間接続で要求できるリソースの最大数
キープアライブリクエスト 20;
#特定の種類のユーザーエージェントの持続的な接続を無効にする
keepalive_disable [msie6|safari|なし];
#長い接続にTCP_NODELAYオプションを使用し、複数の小さなファイルを結合して送信しないかどうか
tcp_nodelay オン;
#httpリクエストヘッダーのタイムアウトを読み取る
クライアントヘッダータイムアウト #;
#http リクエストメッセージの本文の読み取りのタイムアウト
クライアント本体タイムアウト #;
#応答メッセージの送信のタイムアウト
送信タイムアウト #;

#ユーザーがさまざまなキーを保存する共有メモリのパラメータを設定します。5mは5メガバイトを意味します
limit_conn_zone $binary_remote_addr ゾーン=addr:5m;
# 特定のキーの最大接続数を設定します。ここで、キーは addr で、値は 100 です。つまり、各 IP アドレスは同時に最大 100 の接続を開くことができます。
limit_conn アドレス 100;

#includeは、別のファイルの内容を現在のファイルに含めることを意味します。
mime.types を含めます。
#デフォルトの地雷タイプを使用するようにファイルを設定する
デフォルトタイプはtext/htmlです。
#デフォルトの文字セットを設定する
文字セット UTF-8;

#nginx がデータを gzip 圧縮形式で送信するように設定して、送信されるデータ量を減らしますが、リクエスト処理時間と CPU 処理時間が増加するため、考慮する必要があります。
gzip オン;
#プロキシ サーバーに vary を追加します。一部のブラウザーは圧縮をサポートしますが、他のブラウザーはサポートしません。クライアントの HTTP ヘッダーに基づいて、圧縮が必要かどうかを判断します。
gzip_vary オン;
#リソースを圧縮する前に、nginx はまず、事前に gzip 圧縮されたリソースがあるかどうかを確認します。
#!gzip_static オン;
#指定されたクライアントのgzipを無効にする
gzip_disable "MSIE[1-6]\.";
# リクエストとそれに対応するレスポンスストリームに基づいて圧縮を許可または無効にします。Any はすべてのリクエストを圧縮することを意味します
gzip_proxied 任意;
#データの圧縮を有効にする最小バイト数を設定します。リクエストが10240バイト未満の場合は圧縮されず、リクエスト速度に影響します。
gzip_min_length 10240;
#データ圧縮レベルを1~9の間で設定します。9は最も遅く、圧縮率が最も高くなります。
gzip_comp_レベル2;
#圧縮する必要があるデータ形式を設定する
gzip_types text/plain text/css text/xml text/javascript application/json application/x-javascript application/xml application/xml+rss;

#キャッシュの開発中、キャッシュされるファイルの最大数も指定されます。20 秒間にファイルのリクエストがない場合、キャッシュは削除されます。
open_file_cache 最大=100000 非アクティブ=20秒;

#キャッシュされた有効な情報をどのくらいの頻度でチェックするかを示します
open_file_cache_valid 60秒;

#ファイル キャッシュへの最小アクセス回数。5 回以上アクセスされたファイルのみがキャッシュされます。
オープンファイルキャッシュの最小使用数は 5 です。

#ファイル検索時にエラーメッセージをキャッシュするかどうか
open_file_cache_errors がオン;

#クライアントが要求できるファイルあたりの最大バイト数
クライアントの最大ボディサイズは8mです。

#バッファゾーンプロキシがクライアントのリクエストに対してバッファする最大バイト数
クライアント_ヘッダー_バッファ_サイズ 32k;

#/etc/nginx/vhosts の下にあるすべての設定ファイルを参照します。ホスト名が多数ある場合は、管理を容易にするためにホスト名ごとにファイルを作成できます。
/etc/nginx/vhosts/* を含めます。
}

5. 仮想ホスト設定モジュール
#負荷分散サーバーリスト(通常は対応する仮想ホストの設定ファイルで負荷分散カテゴリを設定します)
上流ファンシク
#バックエンドサーバーのアクセスルール
ip_ハッシュ;
#重みパラメータは重み値を表します。重みが高いほど、割り当てられる可能性が高くなります。
サーバー 192.168.1.101:8081 重み=5;
サーバー 192.168.1.102:8081 max_fails=3 fail_timeout=10s;
}
サーバー{
#ポート80でリッスン
聞く 80;
#ホスト名を定義します。ホスト名は複数指定でき、正規表現(~)やワイルドカードも使用できます。
#(1) まず完全一致をチェックする
#(2) 左側のワイルドカード一致チェック: *.fansik.com
#(3) 右側のワイルドカード一致チェック: mail.*
#(4) 正規表現マッチングチェック: ~^.*\.fansik\.com$ など
#(5)detault_server
サーバー名 www.jb51.net;
#この仮想ホストのアクセスログを設定する
access_log ログ/www.jb51.net.access.log;

場所 [=|~|~*|^~] uri {...}
機能: ユーザーが要求した URI に基づいて、定義された場所を一致させることができます。一致が見つかった場合、要求は対応する場所構成ブロックの構成によって処理されます。
=: 完全一致チェックを示します
~: 正規表現パターンマッチングチェック、大文字と小文字を区別
~*: 正規表現パターンマッチングチェック、大文字と小文字は区別されません
^~: URIの前半に一致します。正規表現はサポートされていません。
!~: 先頭は大文字と小文字を区別する、一致しない正規表現を示します
!~*: 先頭は大文字と小文字を区別しない、一致しない正規表現を示します
/: ユニバーサルマッチ、どんなリクエストもマッチします
位置 / {
#サーバーのデフォルトのウェブサイトルートディレクトリの場所を定義する
ルートhtml;
#ホームページのインデックスファイルの名前を定義する
インデックス index.html index.htm;
#リバースプロキシ設定を参照してください。設定ファイルのディレクトリはコンパイルパラメータによって異なります。
#コンパイル時に設定ファイルのパスを指定するために--conf-path=/etc/nginx/nginx.confが追加された場合、proxy.confは/etc/nginx/ディレクトリに配置されます。
#設定ファイルのパスが指定されていない場合は、proxy.conf設定をnginxのconfディレクトリに配置します
proxy.conf をインクルードします。
#バックエンド負荷サーバーグループを定義する
proxy_pass http://fansik;
}
エイリアス パスとルート パスの違い。
場所 /images/ {
ルート "/data/images"
}
//www.jb51.net/images/a.jpg <-- /data/images/images/a.jpg
場所 /images/ {
エイリアス "/data/images/"
}
//www.jb51.net/images/a.jpg <-- /data/images/a.jpg

#エラーページを定義する
エラーページ 500 502 503 504 /50x.html;
場所 = /50x.html {
ルートhtml;
}

#Nginx のステータスを表示するためのアドレスを設定する
#場所でのみ定義できます
#htpasswd -c -m /etc/nginx/.htpasswd fansik (-c パラメータは初回作成時に使用されます)
場所 / ステータス {
stub_status オン;
すべて許可する。
#access_log オフ;
#192.168.1.0/24 を許可します。
#すべて拒否;
#auth_basic "ステータス";
#auth_basic_user_file /etc/nginx/.htpasswd;
}
ステータス結果の例の説明:
アクティブな接続: 1 (現在開いている接続の数)
サーバーは処理されたリクエストを受け入れます
174 (受信接続が受け入れられました) 174 (処理された接続) 492 (処理されたリクエスト、キープアライブ モードでは、リクエストの数が接続数より多くなる場合があります)
読み取り: 0 書き込み: 1 待機: 0
読み取り: リクエストを受け入れている接続の数。
書き込み中: 要求を完了し、要求の処理中または応答の送信中の接続の数。
待機中: 接続維持モードでのアクティブな接続の数。

#IPベースのアクセス制御
IP/ネットマスクを許可する
IP/ネットマスクを拒否
場所 ~ /\.ht {
すべてを否定する;
}
}

6. リバースプロキシ設定(リバースプロキシ設定は通常、include によって参照される別の設定ファイル proxy.conf に配置されます)

proxy_redirect オフ;
#バックエンドWebサーバーはX-Forwarded-Forを通じてユーザーの実際のIPを取得できる
proxy_set_header ホスト $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#バックエンド サーバーとの Nginx 接続タイムアウト (プロキシ接続タイムアウト)
プロキシ接続タイムアウト 60;
#接続が成功した後のバックエンドサーバーの応答時間(プロキシ受信タイムアウト)
プロキシ読み取りタイムアウト 120;
#バックエンドサーバーのデータ転送時間(プロキシ送信タイムアウト)
プロキシ送信タイムアウト 20;
#プロキシサーバー(nginx)を設定して、ユーザーヘッダー情報のバッファサイズを保存します
プロキシバッファサイズ 32k;
#proxy_buffers バッファ、平均的なウェブページは 32k 未満に設定されます
プロキシバッファ 4 128k;
#高負荷時のバッファサイズ (proxy_buffers*2)
proxy_busy_buffers_size 256k;
#キャッシュフォルダのサイズを設定します。この値より大きい場合は、上流サーバーから転送されます。
proxy_temp_file_write_size 256k;
#1G のメモリ バッファ スペース、3 日間削除不要、最大ディスク バッファ スペース 2G
proxy_cache_path /data/nginx/cache レベル=1:2 キー_ゾーン=cache_one:1024m 非アクティブ=3d 最大サイズ=2g;

7. httpsサービスの設定

サーバー{
443 ssl を聴く;
サーバー名 test.fansik.cn;
ssl_証明書 100doc.cn.crt;
ssl_certificate_key 100doc.cn.key;
ssl_session_cache 共有:SSL:1m;
ssl_プロトコル SSLv2 SSLv3 TLSv1;
ssl_session_timeout 5分;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers をオン;
位置 / {
ルート /data/app
インデックス index.html index.htm;
}
}

8. URLアドレスの書き換え
正規表現の置換フラグを書き換える
例えば、書き換え^/images/(.*\.jpg)$ /imgs/$1 break;#$1は前の括弧内の内容です
//www.jb51.net/images/a/1.jpg --> //www.jb51.net/imgs/a/1.jpg
フラグ:
last: この書き換えルールが書き換えられると、他の書き換えルールによって処理されなくなります。
代わりに、ユーザー エージェントは書き換えられた URL の要求を再度開始し、最初から同様のプロセスを開始します。
break: 書き換えルールが完了すると、ユーザーエージェントは新しい URL へのリクエストを再開します。
そして、現在の場所の書き換えルールによってチェックされません
リダイレクト: 302 レスポンス コードで新しい URL を返します (一時的なリダイレクト)
permanent: 301 レスポンス コードで新しい URL を返します (永続的なリダイレクト)

9. if 判定<br /> 構文: if (条件) {...}
アプリケーション環境: サーバー、場所
状態:
(1)変数名:
変数値が空の文字列または「0」で始まる場合は偽、それ以外の場合は真です。
(2)変数をオペランドとする比較式は、=や!=などの比較演算子を使ってテストできる。
(3)正規表現のパターンマッチング操作
~: 大文字と小文字を区別するパターンマッチングチェック
~*: 大文字と小文字を区別しないパターンマッチングチェック
!~ と !~*: 上記の2つのテストを否定する
(4)パスがファイルである可能性をテストする:-f ,~-f
(5)指定されたパスがディレクトリである可能性をテストする:-d,!-d
(6)ファイルの存在をテストする:-e,!-e
(7)ファイルに実行権限があるかどうかを確認します:-x、!-x
例えば:

$http_user_agent の場合:
書き換え^(.*)$ /msie/$1 break;
}

10. ホットリンク防止

場所 ~* \.(jpg|gif|jpeg|png)$ {
valid_referer なし、www.jb51.net がブロックされました。
($invalid_referer) の場合 {
書き換え ^/ //www.jb51.net/403.html;
}
}

要約:

最後に、Nginx を詳しく学習するための Web サイトをお勧めします。

http://tengine.taobao.org/book/index.html

Nginx 構成パラメータ (負荷分散とリバースプロキシ) の詳細な中国語説明に関するこの記事はこれで終わりです。Nginx パラメータのより適切な中国語説明については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Nginx リバース プロキシ構成の完全なプロセス記録
  • Nginx フォワード プロキシとリバース プロキシ、および負荷分散機能の構成コード例
  • SSL で Nginx リバース プロキシを構成する簡単な手順
  • Nginxリバースプロキシ設定でプレフィックスが削除される
  • nginxリバースプロキシのyum設定の詳細な手順
  • nginxリバースプロキシwebSocket設定の詳細な説明
  • リバースプロキシ設定を実装するためのユニバーサルnginxインターフェース
  • プレフィックスケースを削除する Nginx リバース プロキシ構成のチュートリアル

<<:  WeChatミニプログラムはどのようにしてユーザー情報とユーザーの電話番号を同時に取得するのか

>>:  MySQL 8.0.18 ハッシュ結合は左/右結合をサポートしていません 左と右の結合の問題

推薦する

MySql Installer 8.0.18 画像とテキストによるビジュアル インストール チュートリアル

目次1. MySQL 8.0.18のインストール2. 環境変数を設定する3. 接続テスト1. MyS...

VMware Workstation のインストール Linux システム

始める段階から初心者になるまで、Linux オペレーティング システムは不可欠です。最初のステップは...

Linux環境でユーザーにsudo権限を追加する方法

sudo 設定ファイルsudo のデフォルトの設定ファイルは /etc/sudoers です。一般的...

Linux システムでキャッシュをクリアする方法の概要

1) キャッシュメカニズムの紹介Linux システムでは、ファイルシステムのパフォーマンスを向上させ...

JavaScriptのアロー関数の特徴と通常の関数との違い

目次1. 矢印関数の使用1. 通常関数から矢印関数へ2. 中括弧を省略してリターンする3. 括弧を省...

Linux環境でグラフデータベースneo4jを構築する方法の説明

Neo4j (Nosql の 1 つ) は、高性能なグラフ データベース (分散をサポートしていませ...

Docker を使用した JMeter+Grafana+Influxdb 監視プラットフォームの構築に関する詳細なチュートリアル

Jmeter がネイティブの結果表示機能を提供していることは誰もが知っています。ネイティブの結果表示...

Vueはデータを初期状態にリセットします

場合によっては、データ内のデータを再利用する必要がありますが、データ内のデータはさまざまなフォーム、...

JavaScript キャンバス テトリス ゲーム

テトリスは非常に古典的な小さなゲームで、私もそれを書いてみました。しかし、できるだけ簡潔で論理的なコ...

Chrome デベロッパー ツールの詳細な紹介 - タイムライン

1. 概要ユーザーは、アクセスする Web アプリケーションがインタラクティブでスムーズに実行される...

Docker+Nginx を使ってシングルページアプリケーションをデプロイする

開発から導入まで自分で行うシングルページアプリケーションを開発する場合、ビルドを実行した後 npm ...

JSはじゃんけんゲームを実装します

この記事の例では、じゃんけんゲームを実装するためのJSの具体的なコードを参考までに共有しています。具...

フォーム要素の簡単な実装コードでは登録を例に挙げています

コード実装:コードをコピーコードは次のとおりです。 <!DOCTYPE html> &l...

MySQL 8のパスワードを忘れた場合のベストな対処法の簡単な分析

序文MySQL に精通している読者は、MySQL が非常に迅速に更新されることに気付くかもしれません...

MySQLデータベースは重複データを削除し、メソッドインスタンスを1つだけ保持します

1. 問題の紹介ユーザー テーブルに 3 つのフィールドが含まれているシナリオを想定します。 id、...