現在、私は約20のサーバーに何百ものWebアプリケーションが分散しており、PoundとHaproxyを実行しているこれらの前にリバースプロキシがあります。 Poundは、httpからhttpsへのリダイレクトとSSL暗号化を実行し、Tomcatを実行しているバックエンドサーバーの1つに転送するように各サイトに設定されたルールを持つHaproxyに転送します。すべてのサイトは同じドメインにあります(例:www.domain.com/webapp1、www.domain.com/webapp2)。
PoundとHaproxyはもともとホスティングプロバイダによって設定されました。今、Poundの苦情のためにこの設定をNginxに置き換えることを検討しています。開発環境でNginxを実行し、httpsリダイレクトとSSLを実行し、バックエンドにプロキシするためのいくつかのルールを設定しました。
私はこれがこの問題を解決するための最良の方法であるかどうか、Haproxyにすべてのルールを処理させ、NginxをPoundを置き換えるように設定する方が良いかどうかを知るためにいくつかのアドバイスを探しています。
私の関心事は、何百もの配信ルール(以下に示す)でNginxを設定し、最終的にパフォーマンスの問題が発生することです。どんな提案でも歓迎します。ありがとうございます。
location /webapp1/ {
proxy_pass http://10.1.9.11:8080;
}
location /webapp2/ {
proxy_pass http://10.1.9.11:8080;
}
location /webapp3/ {
proxy_pass http://10.1.9.12:8080;
}
答え1
私はそれについてあまり知りませんが、パフォーマンスの問題に対するあなたの懸念を解決するhaproxy
のに十分なことを知っています。nginx
nginx
設定は使い慣れた形式でコンパイルされ、メモリstruct
に保存されますが、要求があるたびにファイルを読み取ることはありません。したがって、何百もの設定がlocation /...
同じ回数を呼び出すのとほぼ同じstrlen()
速度で実行されますstrncmp()
。これはソケット設定と比較して無視できるレベルです。
ウェブサイトはマッチング開始前の正規化=
したがって、演算子(、、、、~
)*~
のいずれかを使用しない限り、一致について^~
本当に賢いことはありません。
~
正規表現マッチング(、)を使用してから、いくつかのロジックを使用して*~
サーバーif
間を決定できupstream
ますが、これは遅い解決策になります。
一方、正規表現の位置が 1 つ以上ある場合は、^~
演算子の使用を検討する必要があります。よりSOに対するMartin Redmondの古いがまだ関連している答えさまざまな演算子とnginx
それを一致させる方法について説明します。