この記事では、コンパイルとインストールから設定ファイルの説明まで、Nginx について詳しく紹介します。各ステップは詳細に説明されており、Nginx をインストールするためのガイドとして使用できます。 さて、早速本題に入りましょう。 1. nginxをインストールする 1.1 Nginxの安定バージョンを選択する 独自のモジュールをカスタマイズするために nginx をコンパイルしてインストールします。マシンは CentOS 6.2 x86_64 です。まず、不足している依存関係をインストールします。 # yum -y gcc をインストール gcc-c++ libtool zlib zlib-devel openssl openssl-devel pcre pcre-devel これらのパッケージが yum で利用できない場合は、ソース コードをダウンロードしてコンパイルし、インストールすることができます。コンパイル中にデフォルトのインストール ディレクトリに注意して、以下の nginx のインストール時にこれらの動的ライブラリ ファイル (ldconfig) が確実に見つかるようにしてください。 https://www.jb51.net/softs/35633.html から nginx-1.6.3.tar.gz の安定バージョンをダウンロードし、/usr/local/src に解凍します。 その後の準備として、さらに 2 つのプラグイン モジュールをダウンロードします。 nginx_upstream_check_module-0.3.0.tar.gz —— バックエンドサーバーのステータスを確認する nginx-goodies-nginx-sticky-module-ng-bd312d586752.tar.gz—— セッションスティッキー問題を解決するためのバックエンド負荷分散 /usr/local/src に解凍後、ディレクトリ名を nginx-sticky-module-ng-1.2.5 に変更することをお勧めします。upstream_check モジュールと併用する場合は、追加のパッチが必要です。nginx ロードバランシングの実際の設定を参照してください。 プラグインと nginx のバージョン間の互換性に注意してください。一般的に、プラグインは新しいほど良いです。新しい nginx を追いかける必要はありません。安定性が最優先です。 nginx-1.4.7、nginx-sticky-module-1.1、nginx_upstream_check_module-0.2.0、この組み合わせも問題ありません。 sticky-1.1 および nginx-1.6 バージョンは、更新によりコンパイルに追いつくことができませんでした。 (これらのモジュールがデフォルトで含まれている Tengine を直接使用できます) [root@cachets nginx-1.6.3]# pwd nginx-1.6.3 のリポジトリ [root@cachets nginx-1.6.3]# ./configure --prefix=/usr/local/nginx-1.6 --with-pcre \ > --with-http_stub_status_module --with-http_ssl_module \ > --with-http_gzip_static_module --with-http_realip_module \ > --add-module=../nginx_upstream_check_module-0.3.0 [root@cachets nginx-1.6.3]# make && make install 1.2 一般的なNginxコンパイルオプションの説明 nginx のよく使用されるモジュールのほとんどは、./configure --help をコンパイルするとデフォルトでインストールされ、--without で始まるモジュールもインストールされます。
./configure \ > --prefix=/usr \ > --sbin-path=/usr/sbin/nginx \ > --conf-path=/etc/nginx/nginx.conf \ > --error-log-path=/var/log/nginx/error.log \ > --http-log-path=/var/log/nginx/access.log \ > --pid-path=/var/run/nginx/nginx.pid \ > --lock-path=/var/lock/nginx.lock \ > --user=nginx \ > --group=nginx \ > --with-http_ssl_module \ > --with-http_stub_status_module \ > --with-http_gzip_static_module \ > --http-client-body-temp-path=/var/tmp/nginx/client/ \ > --http-proxy-temp-path=/var/tmp/nginx/proxy/ \ > --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \ > --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \ > --with-pcre=../pcre-7.8 > --with-zlib=../zlib-1.2.3 1.3 Nginx の起動とシャットダウン ## 設定ファイルが正しいか確認する# /usr/local/nginx-1.6/sbin/nginx -t # ./sbin/nginx -V # コンパイルオプションを確認できます## 起動、シャットダウン# ./sbin/nginx # デフォルトの設定ファイルは conf/nginx.conf、-c で指定します# ./sbin/nginx -s stop またはpkill nginx ## 再起動しても起動時に指定した設定ファイルは変更されません# ./sbin/nginx -s reload または kill -HUP `cat /usr/local/nginx-1.6/logs/nginx.pid` もちろん、nginx をシステム サービスとして管理し、nginx を /etc/init.d/ にダウンロードし、内部のパスを変更して実行権限を付与することもできます。 # サービス nginx {開始|停止|ステータス|再起動|リロード|構成テスト} 1.4 Nginx yum インストール yum で rpm パッケージをインストールするのは、コンパイルしてインストールするよりもはるかに簡単です。多くのモジュールがデフォルトでインストールされますが、将来サードパーティのモジュールをインストールしたい場合、方法がないという欠点があります。 # vi /etc/yum.repo.d/nginx.repo [nginx] 名前=nginx-リポジトリ ベースURL=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=0 有効=1 残りは yum install nginx で実行できます。または、 yum install nginx-1.6.3 を使用して特定のバージョンをインストールすることもできます (パッケージ内に対応するバージョンが表示されている場合、デフォルトは最新の安定バージョンです)。 2. nginx.conf 設定ファイル Nginx 構成ファイルは主に 4 つの部分に分かれています。 メイン(グローバル設定) サーバー(ホスト設定) アップストリーム(アップストリームサーバーの設定、主にリバースプロキシと負荷分散関連の構成) 場所(URLが特定の場所と一致した後の設定) 各セクションにはいくつかの指示が含まれています。 メイン部分に設定された指示は、他のすべての部分の設定に影響します。 サーバー部分の指示は主に仮想ホストのドメイン名、IP、ポートを指定するために使用されます。 アップストリーム ディレクティブは、一連のバックエンド サーバーをセットアップし、リバース プロキシとバックエンド サーバーの負荷分散をセットアップするために使用されます。 場所部分は、Web ページの場所 (たとえば、ルート ディレクトリ "/"、"/images" など) を一致させるために使用されます。 それらの関係は次のとおりです: server は main を継承し、location は server を継承します。 アップストリームはディレクティブを継承せず、またディレクティブから継承されることもありません。他の場所に適用する必要のない独自の特別な指示があります。 現在、nginx はいくつかのディレクティブ コンテキストをサポートしています。 2.1 Nginx の一般的な設定 次の nginx.conf は、フロントエンドでリバース プロキシ サーバーとして nginx の例を実装し、js や png などの静的ファイルを処理し、jsp などの動的リクエストを他のサーバー tomcat に転送します。 ユーザー www www; ワーカープロセス 2; error_log ログ/error.log; #error_log ログ/error.log 通知; #error_log ログ/error.log 情報; pid ログ/nginx.pid; イベント { epoll を使用します。 ワーカー接続数 2048; } http { mime.types を含めます。 デフォルトタイプ アプリケーション/オクテットストリーム; #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log ログ/access.log メイン; ファイル送信オン; # tcp_nopush オン; キープアライブタイムアウト65; # gzip 圧縮機能を gzip オンに設定します。 gzip_min_length 1k; gzip_バッファ 4 16k; gzip_http_バージョン1.0; gzip_comp_レベル6; gzip_types text/html text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml; gzip_vary オン; # http_proxy は client_max_body_size を 10m に設定します。 クライアントボディバッファサイズ 128k; プロキシ接続タイムアウト 75; プロキシ送信タイムアウト 75; プロキシ読み取りタイムアウト 75; プロキシバッファサイズ 4k; プロキシバッファ 4 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; proxy_temp_path /usr/local/nginx/proxy_temp 1 2; # 負荷分散バックエンドサーバーリストを設定するアップストリームバックエンド{ #ip_ハッシュ; サーバー 192.168.10.100:8080 max_fails=2 fail_timeout=30s ; サーバー 192.168.10.101:8080 max_fails=2 fail_timeout=30s ; } # 非常に重要な仮想ホスト構成サーバー { 聞く 80; サーバー名 itoatest.example.com; ルート /apps/oaapp; 文字セット utf-8; access_log ログ/host.access.log メイン; #すべて / 負荷分散 + リバースプロキシの場所 / { ルート /apps/oaapp; インデックス index.jsp index.html index.htm; proxy_pass http://backend; 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; proxy_next_upstream エラー タイムアウト invalid_header http_500 http_502 http_503 http_504; } #静的ファイル、nginx はそれを独自に処理し、バックエンドから tomcat を要求しません 場所 ~* /download/ { ルート /apps/oa/fs; } 場所 ~ .*\.(gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ { ルート /apps/oaapp; 有効期限は7日です。 } 場所 /nginx_status { stub_status オン; access_log オフ; 192.168.10.0/24 を許可します。 すべてを否定する; } 場所 ~ ^/(WEB-INF)/ { すべてを否定する; } #エラーページ 404 /404.html; # サーバーのエラーページを静的ページ /50x.html にリダイレクトします # エラーページ 500 502 503 504 /50x.html; 場所 = /50x.html { ルートhtml; } } ## その他の仮想ホスト、サーバーディレクティブの開始} 2.2 一般的なNginxコマンドの説明 2.2.1 Nginxのメイングローバル設定 実行中のプロセス数、実行中の ID など、実行時に特定のビジネス機能 (HTTP サービスや電子メール サービス プロキシなど) に関連しない nginx の一部のパラメータ。 構成ファイルの最上位のメイン セクションでは、ワーカー ロールのワーカー プロセスの数を指定します。マスター プロセスは、リクエストを受信してワーカーに配布し、処理します。この値は、CPU コアの数 本文にも書いてあります。同時実行性の高い状況では、CPU スティッキネスを設定することで、複数の CPU コア間の切り替えによって発生するレジスタのオンサイト再構築によって生じるパフォーマンスの低下を軽減できます。たとえば、 イベントセクションに書かれています。各ワーカー プロセスが同時に処理 (開始) できる接続の最大数 (クライアントまたはバックエンド プロキシ サーバーとのすべての接続を含む)。リバース プロキシ サーバーとして、nginx は最大接続数 = worker_processes * worker_connections/4 という計算式を使用するため、ここでのクライアント接続の最大数は 1024 です。状況に応じて 8192 まで増やすことができますが、以下の worker_rlimit_nofile 設定を超えることはできません。 nginxをhttpサーバーとして使用する場合、計算式は2で割ります。 本文中に書きました。デフォルトは設定されていません。オペレーティング システムの上限値 65535 に制限される場合があります。 イベントセクションに書かれています。 Linux オペレーティング システムでは、nginx はデフォルトで epoll イベント モデルを使用します。これにより、nginx は Linux オペレーティング システムで非常に効率的になります。同時に、Nginx は OpenBSD または FreeBSD オペレーティング システムで、epoll に似た効率的なイベント モデルである kqueue を使用します。 Select は、オペレーティング システムがこれらの効率的なモデルをサポートしていない場合にのみ使用されます。 2.2.2 Nginx http サーバー http サービスの提供に関連するいくつかの構成パラメータ。たとえば、keepalive を使用するかどうか、gzip 圧縮を使用するかどうかなどです。 効率的なファイル転送モードを有効にします。sendfile ディレクティブは、nginx が sendfile 関数を呼び出してファイルを出力するかどうかを指定し、ユーザー空間からカーネル空間へのコンテキスト切り替えを減らします。一般的なアプリケーションの場合はオンに設定してください。ダウンロードなどのディスク IO 負荷の高いアプリケーションで使用する場合は、オフに設定してディスクとネットワークの I/O 処理速度のバランスを取り、システム負荷を軽減することができます。 長い接続タイムアウトは秒単位です。このパラメータは非常に敏感で、ブラウザの種類、バックエンド サーバーのタイムアウト設定、オペレーティング システムの設定が関係します。これについては別の記事で説明します。長い接続で多数の小さなファイルが要求される場合、接続を再確立するオーバーヘッドを削減できます。ただし、大きなファイルをアップロードする場合は、65 秒以内にアップロードしないと失敗します。セットアップ時間が長すぎてユーザー数が多い場合、接続を長時間維持すると多くのリソースが消費されます。 クライアントへの応答のタイムアウトを指定するために使用されます。このタイムアウトは、2 つの接続アクティビティ間の時間に制限されます。この時間後にクライアントからのアクティビティがない場合、Nginx は接続を閉じます。 クライアントが要求できる単一ファイルの最大バイト数。大きなファイルをアップロードする場合は制限を設定してください
バッファプロキシがクライアント要求に対してバッファリングする最大バイト数 モジュール このモジュールは、キャッシュ機能を含むリバースプロキシサーバーとしてのnginxの機能を実装します(記事も参照) バックエンド サーバーとの Nginx 接続タイムアウト (プロキシ接続タイムアウト) 接続が成功した後、バックエンド サーバーとの 2 つの正常な応答操作間のタイムアウト (プロキシ受信タイムアウト) プロキシ サーバー (nginx) がバックエンド リアル サーバーからユーザー ヘッダー情報を読み取って保存するために使用するバッファーのサイズを設定します。デフォルトでは、proxy_buffers のサイズと同じです。実際には、このディレクティブ値をより小さい値に設定できます。 proxy_buffers バッファでは、nginx はバックエンドのリアルサーバーからの応答を単一の接続に対してキャッシュします。平均 Web ページ サイズが 32k 未満の場合は、次のように設定します。 高負荷時のバッファサイズ (proxy_buffers*2) proxy_buffers がバックエンド サーバーからの応答コンテンツを保持できない場合、その一部はハードディスク上の一時ファイルに保存されます。この値は、最大一時ファイル サイズを設定するために使用され、デフォルトでは 1024M です。proxy_cache とは関係ありません。この値より大きい場合は、上流サーバーから送り返されます。無効にするには 0 に設定します。 プロキシされたサーバーの応答を一時ファイルにキャッシュする場合、このオプションは一時ファイルへの各書き込みのサイズを制限します。 proxy_temp_path (コンパイル時に使用可能) は、書き込み先のディレクトリを指定します。 モジュール
2.2.3 Nginx サーバーの仮想ホスト http サービスではいくつかの仮想ホストがサポートされています。各仮想ホストには対応するサーバー構成項目があり、その中に仮想ホストに関連する構成が含まれています。メールサービスプロキシを提供する場合は、複数のサーバーを構築することもできます。各サーバーは、リスニング アドレスまたはポートによって区別されます。 デフォルトのリスニング ポートは 80 です。ポートが 1024 未満の場合は、root として起動する必要があります。 listen *:80、listen 127.0.0.1:80 などの形式になります。 localhost や www.example.com などのサーバー名は、正規表現を使用して一致させることができます。 モジュール このモジュールは、クライアント IP からバックエンド サーバーへの負荷分散を実現するために、単純なスケジューリング アルゴリズムを使用します。アップストリームの後にロード バランサーの名前が続き、バックエンドの実サーバーは、host:port options; の形式で {} 内に構成されます。プロキシされるバックエンドが 1 つだけの場合は、proxy_pass に直接書き込むこともできます。 2.2.4 Nginx の場所 http サービスにおいて、特定の URL に対応する一連の構成項目。 サーバーのデフォルトの Web サイト ルートの場所を定義します。 locationURL がサブディレクトリまたはファイルに一致する場合、root は効果がなく、通常はサーバー ディレクティブ内または / の下に配置されます。 パスの下のデフォルトのアクセスファイル名を定義します。通常はルートの後に配置されます。 リクエストは、上流のロードバランサーに対応するバックエンド、つまりリバースプロキシによって定義されたサーバーリストにリダイレクトされます。 proxy_pass http://ip:port も使用できます。 proxy_redirect オフ; とりあえずこの4つのポイントを設定しましょう。さらに深く掘り下げていくと、それぞれ非常に複雑な内容になりますので、別の記事で説明します。 ロケーションマッチングルールの記述に関しては、特に重要かつ基本的と言えます。nginx 構成ロケーションの概要と書き換えルールの記述に関する記事を参照してください。 2.3 その他 2.3.1 アクセス制御の許可/拒否 Nginx のアクセス制御モジュールはデフォルトでインストールされており、記述も非常に簡単です。特定の IP または IP セグメントへのアクセスを許可または拒否する複数の許可ルールと拒否ルールを設定できます。いずれかのルールが満たされると、マッチングは停止します。のように: 場所 /nginx-status { stub_status オン; access_log オフ; # auth_basic "NginxStatus"; # auth_basic_user_file /usr/local/nginx-1.6/htpasswd; 192.168.10.100 を許可します。 172.29.73.0/24 を許可します。 すべてを否定する; } アクセス パスのログイン パスワードを設定するために、httpd-devel ツール htpasswd を使用することもよくあります。 # htpasswd -c htpasswd 管理者 新しいパスワード: 新しいパスワードを再入力してください: ユーザー管理者のパスワードの追加 # htpasswd htpasswd admin //管理者パスワードを変更する # htpasswd htpasswd sean //別の認証ユーザーを追加する これにより、デフォルトで CRYPT を使用して暗号化されたパスワード ファイルが生成されます。上記の nginx-status の 2 行のコメントを開き、nginx を再起動して有効にします。 2.3.2 Nginx ディレクトリの自動インデックスをリストする デフォルトでは、Nginx はディレクトリ全体のリスト表示を許可しません。この機能を使用するには、nginx.conf ファイルを開き、location、server、または http セクションに autoindex on; を追加します。他の 2 つのパラメータも追加することをお勧めします。 デフォルトではオンになっており、ファイルの正確なサイズがバイト単位で表示されます。オフに変更すると、ファイルのおおよそのサイズがkB、MB、またはGBで表示されます。 デフォルトはオフで、表示されるファイル時間は GMT 時間です。オンに変更すると、表示されるファイル時間はファイルのサーバー時間になります。 場所 /画像 { ルート /var/www/nginx-default/images; 自動インデックスオン; autoindex_exact_size をオフ; autoindex_localtime をオン; } 以上が、コンパイルとインストールから設定ファイルの説明まで、中国語でnginxの詳細な紹介の主な内容です。皆様のお役に立てれば幸いです。以下の関連記事には、nginxのコンパイル、インストール、設定に関する優れた記事がさらにあります。引き続きお読みください。 以下もご興味があるかもしれません:
|
<<: jsオブジェクト指向カプセル化カスケードドロップダウンメニューリストの実装手順
>>: InnoDB エンジンの redo ファイルのメンテナンス方法
ネットワークの高可用性を実現するには、複数のネットワーク カードを仮想ネットワーク カードにバインド...
ウェブページを作成するときに、フォームを挿入した後、フォームの上下に空白行が表示されることがよくあり...
コードをコピーコードは次のとおりです。 <!DOCTYPE html PUBLIC "...
多くの場合、画像をコンテナのサイズに合わせて調整する必要があります。 1. imgタグ方式幅と高さを...
データベースを構築してプログラムを書くとき、日付と時刻の使用は避けられません。データベースには、ti...
目次(1)はじめに: (2)クリップボードの内容をコピーする方法は次のとおりです。 (3)関数演算に...
目次序文問題: 大きなファイルのコピーNodeJS のストリームとバッファバッファストリーム解決策 ...
目次vue2のキャッシュ機能Vue キャッシュ関数の変換最適化要約するvue2のキャッシュ機能vue...
インストール環境の説明•システムバージョン: windows10 •MySQL バージョン: mys...
1. ワニスの概要1. ワニスの紹介Varnish は、新しいソフトウェア アーキテクチャを使用し、...
目次ピッカーコンポーネントとはピッカーコンポーネントの問題解決オプションの説明解決ディレクトリ部門P...
会社の基準により、特定のユーザーだけに Linux システムへのアクセスを許可することができます。あ...
目次共通バージョンの紹介共通バージョンのダウンロードアドレスとインストール以下に簡単な違いを示します...
通常、フィールド値を更新するには次の SQL ステートメントを使用します。 mytable を更新し...
1. HTML ヘッダーにビューポート タグを追加します。ウェブサイトの HTML ファイルの先頭...