blog

nginx はパフォーマンスの最適化のために特別に開発され、パフォーマンスが最も重要視されています。nginx は高負荷に耐えることができ、最大 50,000 の同時接続をサポートできるという報告もあ...

Feb 26, 2020 · 7 min. read
シェア

Nginx入門

Nginxとは

Nginxは高性能なhttpおよびリバースプロキシサーバで、小さなメモリフットプリントと高い並行処理能力を特徴としています。Nginxはパフォーマンスを最も重要視し、パフォーマンスの最適化のために特別に開発されました。

リバースプロキシ

フォワードプロキシ: ブラウザにプロキシサーバを設定し、プロキシサーバ経由でインターネットにアクセスします。

リバースプロキシ:リバースプロキシサーバに要求を送信し、リバースプロキシサーバは、データを取得するターゲットサーバを選択し、クライアントに戻り、この時点で、リバースプロキシサーバとターゲットサーバは、外の世界にサーバーであり、露出は、プロキシサーバのアドレスです。

ロードバランシング

リクエストの数が多すぎて1台のサーバーで解決できない場合、サーバーの数を増やし、様々なサーバーにリクエストを分散させ、元の1台のサーバーへのリクエストを複数のサーバーに分散されたリクエストに変更することが負荷分散です。

移動の分離

サーバーの解決速度を速めるために、動的ページと静的ページは解決するために異なるサーバーに与えることができ、解決速度を速め、元の単一のサーバーの圧力を軽減します。

Nginxのインストール

Nginxはいくつかの依存関係を必要とし、それぞれ、pcre、openssl、zlib、nginxのインストールでは、これらの依存関係をインストールする必要があります。

pcre依存関係のインストール

  1. 次のコマンドでpcreパッケージをダウンロードします。
wget http://..////./-...gz
  1. zipファイルを解凍
tar -xvf pcre-8.37.tar.gz
  1. 解凍したディレクトリに移動し、以下のコマンドを実行します。
./configure
  1. 以下のコマンドを使用してコンパイルし、インストールします。
./configure
  1. インストールされたpcreのバージョン番号を確認します。
make && make install

openssl、zlib、その他の依存関係のインストール

pcre-config --version

nginxのインストール

  1. nginxの公式サイトnginx.org/download/nginxをダウンロードします;
  2. zipアーカイブをサーバにドラッグします。
  3. 使用命令tar -xvf nginx-1.12.2.tar.gz解压压缩包;
  4. コマンド./configure
  5. 使用命令make && make isntall编译安装;

インストールに成功すると、nginxのsbinフォルダにスタートアップスクリプトが入ったフォルダがusr, local/nginxに追加されます。

nginxの起動

フォルダ内で、次のコマンドを使用してnginxを起動します。

./nginx

nginxのデフォルトポートは80で、以下のようなページが表示されます;

Nginxの一般的なコマンド

/usr/local/nginx/sbinこれらのコマンドを使用するには、フォルダに入る必要があります。

  • nginxのバージョン番号を表示するには
./nginx -v
  • nginx
./nginx
  • nginx
./nginx -s 停止
  • リロードnginx
./nginx -s reload

Nginx設定ファイル

./nginx nginxの設定ファイルはnginx.confです。 nginx.confからコメントを削除します。

yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel

nginx設定ファイルには3つのセクションがあります。

1.グローバルブロック

コンフィギュレーションファイルの先頭からイベントブロックまでの内容は、主にnginxサーバの全体的な動作のためのいくつかのコンフィギュレーションディレクティブを設定します。

worker_processes 1.

これはnginxが並行処理を行うための重要な設定を表し、値が大きいほど並行処理能力が高くなります。ただし、ハードウェアやソフトウェアなどの制約を受けます。

2.イベントブロック

eventsブロックは主にnginxサーバとユーザのネットワーク間の接続に影響を与えるコマンドを含みます。

worker_connections 1024.

これは nginx がサポートする最大接続数を表します。

3. http グローバルブロック

nginxサーバで最も頻繁に設定される部分はhttpグローバルブロックで、httpブロックとサーバブロックで構成されます。

Nginx 設定 リバースプロキシ

ngixプロキシプロセス

ローカルブラウザからnginxサーバにアクセスする場合、nginxサーバのリバースプロキシであるtomcatサーバに、nginxからtomcatへの直接アクセスを要求します。 tomcatのインストールはここでは行わず、tomcatとnginxを同じサーバにインストールします。

IPとドメイン名のバインディング関係の設定

nginxはドメイン名を持っていないので、デモのために、nginxサーバのipとドメイン名のバインディングをローカルのホスト・ファイルに設定しました。tar -xvf nginx-1.12.2.tar.gzこのホストファイルは .ホストファイルに新しい行を追加します:

./nginx

前のipはサーバのipアドレスで、後ろのドメイン名はipをバインドするために使用したランダムなドメイン名です。設定後、ドメイン名を使って tomcat にアクセスし、tomcat のデフォルト・ページを要求できれば、設定は成功です。

nginx でのリクエスト転送の設定

./nginx -v

上記のデフォルト設定ファイルを変更します:

./nginx

この設定は、47.104.xxx.xxx:80のリクエストが47.104.xxx.xxx:8080に転送されることを意味します。

これで、ブラウザから www.javatrip.com にアクセスすると、tomcat に直接転送されることがわかり、単純なリバースプロキシが完成します。

サフィックスに従って要求を分散

新しいdevとprodディレクトリの下にある2つのtomcat下のwebappsディレクトリで、それぞれ8081にポート番号を設定し、別のtomcatを解凍し、ディレクトリにファイルを書き込みます。

/usr/local/nginx/sbinリクエストはtomcat8080に、リクエストはtomcat8081に転送してください。 nginxがリッスンするポート番号は7001になります。 nginxの設定ファイルを開き、以下のように新しいサーバを作成してください:

./nginx -s stop

次に、`www.javatrip.com:7001/dev/a.html和www.javatrip.com:7001/prod/a.html' にそれぞれアクセスしてみてください:

このうち、~はフォワーディングを設定するときに使うもので、意味は次の通りです:

  • = 厳密一致。このクエリがマッチした場合、検索は中止され、リクエストは直ちに処理されます。
  • ~ は大文字と小文字を区別します。
  • !~ は大文字小文字を区別しないマッチです。
  • ~* は大文字小文字を区別しないマッチ
  • !~* は大文字小文字を区別しません。
  • ^~ この接頭辞が正規文字列に使われると、パスがマッチしても正規表現を テストしないように nginx に指示します。

Nginxの設定 ロードバランシング

ロードバランシングとは

ロードバランシングとは、複数のオペレーションユニット間で負荷を分散し、バランスをとることを意味します。高パフォーマンス、単一障害点、スケーラビリティのための究極のソリューションです。

今、私はwww.javatrip.com:7001/prod/a.html、要求は、上記の2つのtomcat、まず第一に、tomcat8080で、新しいprodフォルダにa.htmlファイルを置くに分散される訪問することです効果を達成したいと思います。このようにして、tomcat8081とtomcat8080は、prodファイルとa.htmlファイルを持つことになります。

nginx.confの設定

まず、http ブロックで 2 つの tomcat サービス・リストを構成します。

./nginx -s reload

次に、サーバ・ブロックでルールを構成します:

#user nobody;
worker_processes 1;
#pid logs/nginx.pid;
events {
 worker_connections 1024;
}
http {
 include mime.types;
 default_type application/octet-stream;
 sendfile on;
 #tcp_nopush on;
 #keepalive_timeout 0;
 keepalive_timeout 65;
 #gzip on;
 server {
 listen 80;
 server_name localhost;
 location / {
 root html;
 index index.html index.htm;
 }
 }
}

テスト結果

www.javatrip.com:7001/prod/a.html にアクセスし、さらに数回更新します。一部のリクエストは tomcat8080 に、一部のリクエストは tomcat8081 に送信されることがわかります。

nginx がサポートするいくつかのロードポリシー

  • ポーリング: 各リクエストは時系列で1つずつ異なるサーバに割り当てられ、サーバがダウンしている場合は自動的にカリングされます。
worker_processes 1;
  • weight: デフォルトは 1 で、weight が高いほど多くのリクエストが割り当てられます。
worker_connections 1024;
  • ip ハッシュ: 各リクエストはアクセスした ip のハッシュ結果に従って割り当てられます。
.xxx.xxx www.javatrip.com
  • fair: バックエンドの応答時間に従って割り当てられ、応答時間が短いほど、より多くのリクエストが割り当てられます。
 server {
 listen 80;
 server_name localhost;
 location / {
 root html;
 index index.html index.htm;
 }
 }

動きの分離は実際の開発ではあまり使われないため、書かなくなりました。この記事はnginxの入門編として、基本的なところをここまで。

Read next

JS学習シリーズ 12 - NodeList, HTMLCollection, ParentNode, ChildNode インターフェース

前置き\n\nNodeList インタフェース\nNodeList インスタンスは、メンバがノード・オブジェクトである配列のようなオブジェクトです。以下のメソッドを使用して、NodeList インスタンスを取得できます。\n\n

Feb 26, 2020 · 6 min read

戦略パターン

Feb 26, 2020 · 4 min read

Vueプロジェクトの構築

Feb 25, 2020 · 7 min read

Mapboxトリビア

Feb 25, 2020 · 2 min read