Nginx の高同時実行最適化の実践

Nginx の高同時実行最適化の実践

1. チューニングの必要性

​ 私は、どのように書けばいいのか本当に分からないので、共有するために最適化されたコンテンツを書くことにいつも消極的でした。うまく書かないと、いろいろと批判されてしまうからです。今日ようやく書きました。たくさんの人が私にプライベートメッセージを送ったり、グループで質問したり、私の経験を共有するように頼んできたので、屈服しました。

チューニングについて説明する前に、まずチューニングが必要な理由と、ビジネス運用とチューニングの関係を理解する必要があります。

  • 事業運営:オンライン事業は正常に運営され、会社の事業を遂行しています。
  • 監視業務: 監視業務を通じてオンライン ビジネスを監視し、問題をタイムリーに検出します。
  • ビジネスの最適化: 監視と分析を通じて、ビジネス上の問題やボトルネックを発見し、ビジネスやソフトウェアをタイムリーに調整および最適化できます。
  • 最適化をテストする: 最適化が完了したら、既存の最適化をテストして、現在の最適化モードでビジネスが安定して効率的であり、現在の問題を解決できることを確認する必要があります。

これは業務運営プロセスであり、ビジネスの安定性、効率性、高可用性を確保するための当社の運用・保守方法でもあります。

2. チューニングの次元と意見の相違

チューニングに関する記事を書くのが最も難しいのは、異なるビジネスがさまざまなマシンで実行され、さまざまなリソースを消費するため、チューニング オプションしか伝えられず、特定のしきい値を伝えることができないためです。また、シナリオが異なるため、対応するチューニング項目としきい値は常に変化します。これは、あなたとルームメイトが両方とも風邪をひいているのに、病院で処方される薬がまったく異なるのと同じです。そのため、多くの人がチューニング記事を読んで、特定のチューニング項目やしきい値を見ると、2 つの言葉が頭に浮かぶのです。「恥ずかしいですが、写真を追加してください!」皆様にご理解いただければ幸いです。

3. Nginx のチューニング

  • Nginx同時接続数
  • nginx プロセスの最適化
  • nginx 圧縮
  • nginx ローカルキャッシュ

1. Nginxの同時接続数設定

ワーカープロセス 1;

これは、nginx が複数のワーカー プロセスを開始するように構成するために使用され、デフォルトは 1 です。また、nginx は、worker_cpu_affinity と呼ばれる構成項目もサポートしています。つまり、nginx は CPU を各ワーカー プロセスにバインドできます。以下のように設定しました:

 イベント {
    ワーカー接続 1024;
}

2. nginxはプロセスを固定コアにバインドします

ワーカーCPUアフィニティ0010 0100 1000;

ワーカープロセス 3;
ワーカーCPUアフィニティ0010 0100 1000;
#ここで 0010 0100 1000 はマスクであり、それぞれ 2 番目、3 番目、4 番目の CPU コアを表します。

nginx を再起動すると、3 つのワーカー プロセスがそれぞれ独自の CPU を使用できるようになります。

ps -eo psr,pid,arg 表示

Nginx の同時実行数 = ワーカープロセス * ワーカー接続

3. nginxの圧縮機能

圧縮は、主に次の 2 つの点で WEB サーバーにとって非常に重要です。

1) ユーザーエクスペリエンスの向上: 送信データが小さくなり、ユーザーの待ち時間が短くなります。

2) 会社の帯域幅コストを節約: 圧縮後、送信されるデータが小さくなり、占有される帯域幅が少なくなります。

ユーザーに優れた体験を提供できるため、企業にとってもコスト削減につながります。なぜこんないいことをしないのでしょうか? これは仕事に欠かせないアイテムです。

ただし、構成の圧縮にはさらに注意が必要です。

1) 画像、音声、動画を圧縮しない

2) 1K 未満のファイルは圧縮しないでください。圧縮するとファイルサイズが大きくなります。

3) 圧縮レベルが高くなるほどCPUの消費量が多くなります

圧縮が有効になっていません

圧縮をオンにする

コードは次のとおりです。

gzip on; (gzip 圧縮を有効にする)

gzip_http_version 1.1; デフォルト値は HTTP/1.1 です。つまり、gzip 圧縮は HTTP/1.1 プロトコル リクエストでのみ実行されます。gzip_disable "MSIE [1-6]."; この設定は、IE1-6 バージョンで gzip 圧縮を無効にするものです。gzip_proxied any; (nginx をフロントエンド プロキシとして使用する場合はこのオプションを有効にします。つまり、バックエンド サーバーのヘッダーによって返される情報に関係なく、圧縮が無条件に有効になります)

gzip_min_length 1024; (最小圧縮ページ。ページが小さすぎると、どんどん大きくなる可能性があります。ここでは、1K を超えるページに対してのみ圧縮が有効になっています)

gzip_buffers 4 8k; (gzip圧縮結果データストリームを保存するためにシステムが複数のキャッシュユニットを取得し、元のデータサイズに応じて8K単位で4倍のメモリスペースを適用するように設定します)

gzip_comp_level 3; (圧縮レベル。1 は圧縮率が最も低く、処理速度が最も速く、9 は圧縮率が最も高いが、処理速度が最も遅く、CPU の消費量も最も多くなります。通常は 3 に設定すれば十分です)

gzip_types text/plain text/css application/x-javascript application/javascript application/xml; (圧縮が可能なページまたはドキュメントの種類)

圧縮検証を有効にする

4. nginxローカルキャッシュ機能

ブラウザ キャッシュは、ブラウジングの速度を速め、ネットワーク リソースを節約するためのものです。ブラウザは、最近要求されたドキュメントをユーザーのディスクに保存します。

クライアント キャッシュと圧縮には本質的な違いがあります。ユーザーが初めてデータをダウンロードすると、そのデータはクライアントのローカル ハードディスクに保存されます。次回使用するときは、ローカル リソースの有効期限が切れていない限り、ローカル ハードディスクから直接読み取られます。データを取得するために WEB サーバーを探す必要がないため、これが最も高速です。また、ユーザーエクスペリエンスを最適化し、企業の帯域幅コストを節約します。

以下の点に注意してください。

​ キャッシュは通常、画像、Web サイトのフレームワーク、オーディオ、ビデオなど、頻繁に変更されないデータをキャッシュします。最適なアプリケーションは、Baidu ホームページです。インターネットに接続していないときでも、Baidu ホームページを開けることがあることに気づいたことがありますか? これは、ローカル キャッシュを参照しているためです。

Nginx ローカル キャッシュの設定手順

nginxはexpires命令を通じてブラウザのヘッダーを設定することができる

構文: expires [time|epoch|max|off]

デフォルト値: 有効期限オフ

スコープ: http、サーバー、場所

このディレクティブは、HTTP 応答の「Expires」および「Cache-Control」ヘッダー (ページ キャッシュを制御する) を制御するために使用できます。
時間値には正または負の数値を使用できます。 「Expires」ヘッダーの値は、設定した時間値に現在のシステム時刻を加算することによって取得されます。

epoch は、「Expires」の値を 1970 年 1 月 1 日 00:00:01 GMT に指定します。
max は、「Expires」の値を 2037 年 12 月 31 日 23:59:59 GMT に指定し、「Cache-Control」の値を 10 年に指定します。
-1 は、「Expires」の値をサーバーの現在の時刻 - 1 秒に指定します。つまり、常に期限が切れることを意味します。

キャッシュの例

画像キャッシュ 30 日間の場所 ~.*\.(jpg|png|jpeg)$
  {
 有効期限は30日です。
 }

1 時間の js css キャッシュの場所 ~.*\.(js|css)?$
  {
 1時間で期限切れになります。
 }

キャッシュ検証

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

以下もご興味があるかもしれません:
  • Nginx10m+の高並列カーネル最適化に関する簡単な説明
  • 高同時実行シナリオにおける nginx 最適化の詳細な説明
  • Nginx で FastCGI を設定および最適化する方法
  • Nginx サービス最適化構成ソリューション
  • nginx を最適化する 6 つの方法

<<:  MySQLとRedisでセカンダリキャッシュを実装する方法の詳細な説明

>>:  MySQL の制限パフォーマンス分析と最適化

推薦する

docker-compose で Jenkins をインストールする際の実践的なメモ

ディレクトリを作成する cd /usr/local/docker/ jenkins-docker を...

Linuxのpasswdコマンドの使用

1. コマンドの紹介passwd コマンドは、ユーザー パスワード、アカウント ロック、パスワードの...

Nginx Rewrite の使用シナリオと設定方法の分析

Nginx Rewriteの使用シナリオ1. URL アドレスジャンプ。たとえば、ユーザーが pm....

VMware12 インストール centOS8 構成グラフィック チュートリアルの詳細説明 (vm 仮想マシン インストール centos8 チュートリアル)

数日前に CentOS8 がリリースされました。8 の最初のバージョンですが、今日は VM12 に ...

web.config (IIS) および .htaccess (Apache) の構成

xml <?xml バージョン="1.0" エンコーディング="...

Mysql 複数データベースのバックアップ コード例

この記事は主にMysqlの複数データベースのバックアップのコード例を紹介します。この記事ではサンプル...

最新の高品質な英語無料フォント36個を公開

01. 無限フォントのダウンロード02. バンダフォントのダウンロード03. ロールアップフォントの...

Maven プロジェクトのリモート デプロイメント && Tomcat を使用してデータベース接続を構成する方法

1つ。 tomcat を使用したリモート展開1.1 発生した問題:プロジェクトでは、サードパーティの...

初心者のためのWebページ作成: HTMLのハイパーリンクAタグの使い方を学ぶ

ハイパーリンク a タグはリンク ポイントを表し、英語の単語「anchor」の略語です。その機能は、...

Nginx proxy_redirect の使用方法の詳細な説明

今日、Apache の nginx リバース プロキシを実行していたときに、ちょっとした問題に遭遇し...

データベースを削除して逃げる?xtraback を使用して MySQL データベースをバックアップする方法

1. mysqldump バックアップ方法では論理バックアップが使用されます。最大の欠点は、バック...

Amap を使用した React 実装例 (react-amap)

React の PC 版は Amap を使用するようにリファクタリングされました。情報を検索したと...

W3C チュートリアル (3): W3C HTML アクティビティ

HTML は、World Wide Web 上で公開するために使用されるハイブリッド言語です。 XH...

MySQL で 1000 万件のレコードをすばやくクエリする方法

目次通常のページングクエリ最適化する方法大きなオフセット使用ID制限大量データ問題の最適化通常のペー...

ページスピードの最適化の概要

インターネットは人々の生活にますます欠かせないものになってきていると思います。 Ajax や fle...