1. nginxの動的と静的の分離の簡単な設定 web1は静的サーバー、web2は動的サーバー、node2はプロキシであると仮定します。 1.1 ディレクトリごとに分ける web1は静的リクエストのみを処理する [root@web1 ~]# mkdir -p /var/www/www/image [root@web1 ~]# yum -y install lrzsz [root@web1 ~]# cd /var/www/www/image/ [root@web1 画像]# rz [root@web1 画像]# ll -rw-r--r--。 1 ルート ルート 156848 3月13日 11:31 nhrzyx.png [root@web2 ~]# vim /etc/httpd/conf/httpd.conf ドキュメントルート "/var/www/www" [root@web2 ~]# systemctl httpdを再起動します web2は動的なリクエストのみを処理する [root@web2 ~]# mkdir -p /var/www/www/dynamic [root@web2 ~]# echo dynamic10 > /var/www/www/dynamic/index.html [root@web2 ~]# vim /etc/httpd/conf/httpd.conf ドキュメントルート "/var/www/www" [root@web2 ~]# systemctl httpdを再起動します アクセステスト http://172.25.254.134/image/nhrzyx.png http://172.25.254.135/dynamic/index.html 1.2 要請による分離 プロキシの設定 [root@lb01 conf]# vim nginx.conf ワーカープロセス 1; イベント { ワーカー接続 1024; } http { mime.types を含めます。 デフォルトタイプ アプリケーション/オクテットストリーム; ファイル送信オン; キープアライブタイムアウト65; アップストリームスタックプール{ サーバー 172.25.254.134:80 重み=5; } アップストリームダイナミックプール{ サーバー 172.25.254.135:80 重み=5; } サーバー{ 聞く 80; サーバー名 www.lbtest.com; 位置 / { ルートhtml; インデックス index.html index.htm; proxy_set_header ホスト $host; proxy_pass http://dynamic_pools; } 場所 /画像/ { proxy_set_header ホスト $host; proxy_pass http://stack_pools; } 場所 /dynamic/ { proxy_set_header ホスト $host; proxy_pass http://dynamic_pools; } } } [root@lb01 conf]# nginx -s リロード ホストを構成してブラウザアクセスをテストする 172.25.254.131 www.lbtest.com http://www.lbtest.com/image/nhrzyx.png http://www.lbtest.com/dynamic/ 1.3 拡張子による分離 [root@lb01 conf]# vim nginx.conf ワーカープロセス 1; イベント { ワーカー接続 1024; } http { mime.types を含めます。 デフォルトタイプ アプリケーション/オクテットストリーム; ファイル送信オン; キープアライブタイムアウト65; アップストリームスタックプール{ サーバー 172.25.254.134:80 重み=5; } アップストリームダイナミックプール{ サーバー 172.25.254.135:80 重み=5; } サーバー{ 聞く 80; サーバー名 www.lbtest.com; 位置 / { ルートhtml; インデックス index.html index.htm; proxy_set_header ホスト $host; proxy_pass http://dynamic_pools; } 場所 ~ .*.(jpg|png|gif|css|js|swf|bmp|jsp|php|asp)$ { proxy_set_header ホスト $host; proxy_pass http://stack_pools; } } } [root@lb01 conf]# nginx -s リロード http://www.lbtest.com/image/nhrzyx.png 1.4 クライアント識別に基づく分離 http { mime.types を含めます。 デフォルトタイプ アプリケーション/オクテットストリーム; ファイル送信オン; キープアライブタイムアウト65; アップストリームスタックプール{ サーバー 172.25.254.134:80 重み=5; } アップストリームダイナミックプール{ サーバー 172.25.254.135:80 重み=5; } サーバー{ 聞く 80; サーバー名 www.lbtest.com; 位置 / { ($http_user_agent ~* "MSIE") の場合 { proxy_pass http://dynamic_pools; } ($http_user_agent ~* "firefox") の場合 { proxy_pass http://stack_pools; } } proxy_set_header ホスト $host; } } [root@web1 イメージ]# echo stack_web>> /var/www/www/test.html [root@web1 イメージ]# systemctl restart httpd [root@web2 ~]# echo dynamic_web>>/var/www/www/test.html [root@web2 ~]# systemctl httpdを再起動します アクセスするにはIEとFirefoxブラウザを使用してください http://www.lbtest.com/test.html 1.5 クライアントPCとモバイルの分離を使用する http { mime.types を含めます。 デフォルトタイプ アプリケーション/オクテットストリーム; ファイル送信オン; キープアライブタイムアウト65; アップストリームスタックプール{ サーバー 172.25.254.134:80 重み=5; } アップストリームダイナミックプール{ サーバー 172.25.254.135:80 重み=5; } サーバー{ 聞く 80; サーバー名 www.lbtest.com; 位置 / { ($http_user_agent ~* "iphone") の場合 { proxy_pass http://dynamic_pools; } ($http_user_agent ~* "android") の場合 { proxy_pass http://stack_pools; } } proxy_set_header ホスト $host; } } AndroidとiPhoneを使用してテストにアクセスします http://www.lbtest.com/test.html 2. 最適化
ネット.ipv4.tcp_fin_timeout = 2 ネット.ipv4.tcp_tw_recycle = 1 ネット.ipv4.tcp_tw_reuse = 1 ネット.ipv4.tcp_syncookies = 1 ネット.ipv4.tcp_keepalive_time = 600 net.ipv4.ip_local_port_range = 4000 65000 ネット.ipv4.tcp_max_syn_backlog = 16348 ネット.ipv4.tcp_max_tw_buckets = 36000 ネット.ipv4.tcp_syn_retries = 1 ネット.ipv4.tcp_synack_retries = 1 ネット.ipv4.tcp_max_orphans = 16384 ネット.コア.somaxconn = 16384 ネット.コア.ネットdev_max_backlog = 18364 keepalive と nginx の簡単な紹介 nginx ロードバランシングの高可用性を実現するために keepalived を設定する IP ドリフトの検出には、キープアライブの方が適しています。リソース サービスが制御されている場合は、ストレージ方向の高可用性など、ハートビートの方が適しています。 3. nginxリバースプロキシのヘルスチェック nginx がリバース プロキシとして動作する場合、バックエンド サーバーがダウンすると、ngixn はこのリアル サーバーをアップストリームから削除できないため、リクエストをバックエンド リアル サーバーに転送します。nginx は、顧客に返されるエラー ページを解決するためにローカルで proxy_next_upstream を有効にすることができますが、それでもリクエストはこのサーバーに転送され、その後他のサーバーに転送されるため、1 回の転送が無駄になります。Taobao チームがリア リアル サーバーのヘルス状態を検出するために開発した nginx モジュール nginx_upstream_check_module の助けを借りて、バックエンド サーバーが利用できない場合、すべてのリクエストはこのサーバーに転送されません。 チェック間隔=5000 上昇=1 下降=3 タイムアウト=4000; 3.1 設定ファイルに直接追加する
ワーカープロセス 1; イベント { ワーカー接続 1024; } http { mime.types を含めます。 デフォルトタイプ アプリケーション/オクテットストリーム; ファイル送信オン; キープアライブタイムアウト65; アップストリーム web_pools { サーバー 172.25.254.134:80 重み=5; サーバー 172.25.254.135:80 重み=5; # サーバー 172.25.254.158:80 重み = 5 バックアップ; チェック間隔=5000 上昇=1 下降=3 タイムアウト=4000; } サーバー{ 聞く 80; サーバー名 www.lbtest.com; 位置 / { #ルートhtml; # インデックス index.html index.htm; proxy_set_header ホスト $host; proxy_pass http://web_pools; } } } nginx: [emerg] /usr/local/nginx/conf/nginx.conf:14 に不明なディレクティブ "check" があります nginx: 設定ファイル /usr/local/nginx/conf/nginx.conf のテストに失敗しました チェック失敗 nginxモジュールをダウンロードし、https://github.com/yaoweibin/nginx_upstream_check_module、nginxを使用してモジュールをインストールし、nginxのアップグレードとして扱います。 3.2 モジュールのダウンロード [root@node2 nginx-1.12.2]# yum -y gitをインストールします [root@node2 nginx-1.12.2]# git clone https://github.com/yaoweibin/nginx_upstream_check_module.git [root@node2 nginx-1.12.2]# ll drwxr-xr-x. 7 ルート ルート 4096 4月13日 00:57 nginx_upstream_check_module [root@node2 nginx-1.12.2]# cd nginx_upstream_check_module/ [root@node2 nginx_upstream_check_module]# ll -rw-r--r--。1 ルート ルート 0 4月13日 00:57 変更 -rw-r--r--. 1 ルート ルート 7921 4月 13 00:57 check_1.11.1+.patch -rw-r--r--. 1 ルート ルート 8330 4月13日 00:57 check_1.11.5+.patch -rw-r--r--. 1 ルート ルート 8060 4月13日 00:57 check_1.12.1+.patch -rw-r--r--。1 ルート ルート 8054 4月13日 00:57 check_1.14.0+.patch -rw-r--r--。1 ルート ルート 5483 4月13日 00:57 check_1.2.1.patch -rw-r--r--. 1 ルート ルート 7130 4月13日 00:57 check_1.2.2+.patch -rw-r--r--。1 ルート ルート 7094 4月13日 00:57 check_1.2.6+.patch -rw-r--r--。1 ルート ルート 6791 4月13日 00:57 check_1.5.12+.patch -rw-r--r--。1 ルート ルート 8295 4月13日 00:57 check_1.7.2+.patch -rw-r--r--。1 ルート ルート 8346 4月13日 00:57 check_1.7.5+.patch -rw-r--r--。1 ルート ルート 8509 4月 13 00:57 check_1.9.2+.patch -rw-r--r--. 1 ルート ルート 6943 4月13日 00:57 check.patch -rw-r--r--。1 ルート ルート 749 4月13日 00:57 config drwxr-xr-x. 2 ルート ルート 43 4月 13 00:57 doc -rw-r--r--。1 ルート ルート 1709 4月 13 00:57 nginx-sticky-module.patch drwxr-xr-x. 2 ルート ルート 29 4月 13 00:57 nginx-tests -rw-r--r--。1 ルート ルート 112010 4月 13 00:57 ngx_http_upstream_check_module.c -rw-r--r--。1 ルート ルート 529 4月 13 00:57 ngx_http_upstream_check_module.h -rw-r--r--。1 ルート ルート 2848 4月 13 00:57 ngx_http_upstream_jvm_route_module.patch -rw-r--r--。1 ルート ルート 11509 4月 13 00:57 README drwxr-xr-x. 6 ルート ルート 79 4月 13 00:57 テスト -rw-r--r--。1 ルート ルート 3342 4月13日 00:57 アップストリーム_フェア.パッチ drwxr-xr-x. 2 ルート ルート 81 4月 13 00:57 util 3.3 パッチ適用 [root@node2 nginx_upstream_check_module]# cd ../ [root@node2 nginx-1.12.2]# yum -y パッチをインストール 注: nginxバージョンの更新により、nginxバージョン1.12以上のパッチはcheck_1.11.5+.patchです。 [root@node2 nginx-1.12.2]# パッチ -p0 < ./nginx_upstream_check_module/check_1.11.5+.patch ファイル src/http/modules/ngx_http_upstream_hash_module.c のパッチ適用 パッチファイル src/http/modules/ngx_http_upstream_ip_hash_module.c ファイル src/http/modules/ngx_http_upstream_least_conn_module.c のパッチ適用 ファイル src/http/ngx_http_upstream_round_robin.c のパッチ適用 パッチファイル src/http/ngx_http_upstream_round_robin.h 3.4 コンパイルとインストール [root@node2 nginx-1.12.2]# ./configure --prefix=/usr/local/nginx \ > --user=nginx --group=nginx \ > --with-http_ssl_module \ > --with-http_realip_module \ > --http_addition_module \ を追加 > --with-http_gzip_static_module \ > --with-http_stub_status_module \ > --http_sub_module \ を追加 > --with-pcre \ > --add-module=./nginx_upstream_check_module objs という名前の新しいディレクトリが表示されます。 drwxr-xr-x. 4 ルート ルート 187 4月 13 01:04 objs sed -e "s|%%PREFIX%%|/usr/local/nginx|" \ -e "s|%%PID_PATH%%|/usr/local/nginx/logs/nginx.pid|" \ -e "s|%%CONF_PATH%%|/usr/local/nginx/conf/nginx.conf|" \ -e "s|%%ERROR_LOG_PATH%%|/usr/local/nginx/logs/error.log|" \ < man/nginx.8 > オブジェクト/nginx.8 make[1]: ディレクトリ `/usr/local/src/nginx-1.12.2' を離れます
drwxr-xr-x. 3 ルート ルート 41 4月 13 01:04 アドオン -rw-r--r--。1 ルート ルート 16895 4月13日 01:04 autoconf.err -rw-r--r--. 1 ルート ルート 42396 4月13日 01:04 Makefile -rwxr-xr-x. 1 root root 5993600 4月13日 01:06 nginx #nginx 新しい実行可能ファイル -rw-r--r--. 1 root root 5341 4月13日 01:06 nginx.8 -rw-r--r--。1 ルート ルート 7202 4月13日 01:04 ngx_auto_config.h -rw-r--r--。1 ルート ルート 657 4月13日 01:03 ngx_auto_headers.h -rw-r--r--。1 ルート ルート 6412 4月 13 01:04 ngx_modules.c -rw-r--r--。1 ルート ルート 87120 4月13日 01:06 ngx_modules.o drwxr-xr-x. 9 ルート ルート 91 4月 3 22:38 src nginxをバックアップし、新しいnginxをコピーします [root@node2 nginx-1.12.2]# cd /usr/local/nginx/sbin/ [root@node2 sbin]# mv nginx nginx.bak [root@node2 sbin]# cp /usr/local/src/nginx-1.12.2/objs/nginx /usr/local/nginx/sbin [root@node2 sbin]# /usr/local/nginx/sbin/nginx -s 停止
[root@node2 sbin]# id nginx
[root@node2 sbin]# useradd nginx [root@node2 sbin]# id nginx
[root@node2 sbin]# /usr/local/nginx/sbin/nginx -s 停止 [root@node2 sbin]# /usr/local/nginx/sbin/nginx [root@node2 ~]# nginx -t
インストール成功 3.5 構成 ワーカープロセス 1; イベント { ワーカー接続 1024; } http { mime.types を含めます。 デフォルトタイプ アプリケーション/オクテットストリーム; ファイル送信オン; キープアライブタイムアウト65; アップストリーム web_pools { サーバー 172.25.254.134:80 重み=5; サーバー 172.25.254.135:80 重み=5; # サーバー 172.25.254.158:80 重み = 5 バックアップ; チェック間隔=5000 上昇=1 下降=3 タイムアウト=4000; } サーバー{ 聞く 80; サーバー名 www.lbtest.com; 位置 / { proxy_set_header ホスト $host; proxy_pass http://web_pools; } 場所 /nステータス{ ステータスを確認します。 access_log オフ; } } } [root@node2 conf]# nginx -s reload 3.6 アクセステスト どちらの状態も正常です 1つをオフにする [root@web1 イメージ]# systemctl stop httpd 両方をオフにする [root@web2 ~]# systemctl stop httpd 開く [root@web1 イメージ]# systemctl start httpd [root@web2 ~]# systemctl httpdを再起動します バックエンドチェック機能の実装に成功 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
>>: React でカレンダー コンポーネントを構築するためのステップ バイ ステップ ガイド
ウェブページの基本要素として、画像はページの読み込み速度に影響を与える重要な要素の 1 つです。画像...
1. データベースのタイムゾーンを確認する '%time_zone' のような変数を...
プロジェクトを作成するWeChat開発者ツールでプロジェクトを作成し、言語でTypeScriptを選...
目次- 序文 - - JVM クラスローダー - 1. JVMクラスローダー2. クラスローダーのソ...
数日前にプログラムを書いていたとき、プロンプト情報 (TITLE) を新しい行で囲みたいと思いました...
仮想化1. 環境セントオス7.3 selinuxとファイアウォールを無効にする2. 仮想化環境の構成...
目次並べ替えクエリの最適化変更されたばかりのデータ行を繰り返し取得しないようにする遅延ロードされた結...
目次MySQL マルチバージョン同時実行1. マルチバージョン同時実行制御1. 一貫した読み取り2....
インストール前の作業: VMware Workstation がインストールされていることを確認し、...
目次問題の説明方法 1 (バックエンドが画像 URL を返す)方法 2 (フロントエンドで requ...
背景nginx サーバー モジュールは 2 つのサーバーにプロキシする必要があるため、異なるサーバー...
前のセクションでは、コンテンツ、サーバー、JavaScript、CSS など、Web サイトのパフォ...
docker-maven-plugin プラグインを使用する場合、Maven は対応する jar パ...
ページ内にはjs、cssなどの外部ファイルが導入されており、外部ファイルのエンコードが現在のページフ...
show processlist コマンドは非常に便利です。MySQL の実行が 50% 以上になる...