実装原則
Web サイトにアクセスすると、リクエスト ヘッダーに、mozilla/5.0 (macintosh; intel mac os x 10.12; など) のユーザー エージェント ヘッダーが含まれます。 rv: 50.0) gecko/20100101 firefox/50.0、この ua はカスタマイズでき、Firefox のユーザー エージェント切り替えプラグインなど、多くのブラウザ プラグインはカスタム ua の追加もサポートしています。
図のように、ここにカスタム ua が追加され、内容が独自の名前に変更されます。この ua リクエスト Web サイトを通じて、次の ua を確認できます。リクエストヘッダー、これはあなた自身のものになります、これはロゴです。
この ua は nginx によって判断され、異なる ua が異なるポートに転送され、各ポートが Web サイトのディレクトリに対応します。
nginx は ua を決定します
nginx を通じて各リクエストの ua、つまり $http_user_agent 変数を取得できます。
たとえば、location フィールドでは、次のように ua を判断してフラグを設定できます。
if ( $http_user_agent ~ "dashen" ) { set $flag "01"; }
たとえば、ua の内容がダッシュであると判断し、$flag を設定した場合01では、このようなフラグを多数設定できます。
nginx リバース プロキシとロード バランシング
異なる ua を判断することで、リバース プロキシを介して異なるマシンやポートに転送できます。ここでは同じテスト マシンを使用できます。ローカル マシンのさまざまなポートに転送され、さまざまなポートをリッスンしてさまざまな Web サイト ディレクトリを設定します。
詳細は次のとおりです:
server { listen 192.168.1.251:80; server_name *.example.com; index index.html index.htm index.php; charset utf-8; location / { set $flag "00"; if ( $http_user_agent ~ "dashen" ) { set $flag "01"; } if ( $http_user_agent ~ "mianwo" ) { set $flag "02"; } if ( $http_user_agent ~ "bingkuai" ) { set $flag "03"; } if ( $http_user_agent ~ "hadoop" ) { set $flag "04"; } proxy_set_header host $host; proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for; if ( $flag = "00" ){ add_header z-server mobile; proxy_pass http://webserver_mobile; } if ( $flag = "01" ){ add_header z-server dashen; proxy_pass http://webserver_dashen; } if ( $flag = "02" ){ add_header z-server mianwo; proxy_pass http://webserver_mianwo; } if ( $flag = "03" ){ add_header z-server bingkuai; proxy_pass http://webserver_bingkuai; } if ( $flag = "04" ){ add_header z-server hadoop; proxy_pass http://webserver_hadoop; } } }
この構成は、さまざまな ua リクエストをさまざまな負荷分散サーバーにリバース プロキシします。以下の特定の負荷分散構成を参照してください。
nginx 負荷分散構成
ここでは、いくつかの負荷分散構成が定義されています。各負荷分散構成は、実際には 1 台のマシンのみで構成されます。ローカルマシンのポート。
upstream webserver_mobile{ server 127.0.0.1:8900 max_fails=2 weight=2 fail_timeout=10s; } upstream webserver_dashen{ server 127.0.0.1:8901 max_fails=2 weight=2 fail_timeout=10s; } upstream webserver_mianwo{ server 127.0.0.1:8902 max_fails=2 weight=2 fail_timeout=10s; } upstream webserver_bingkuai{ server 127.0.0.1:8903 max_fails=2 weight=2 fail_timeout=10s; } upstream webserver_hadoop{ server 127.0.0.1:8904 max_fails=2 weight=2 fail_timeout=10s; }
つまり、まだ終わっていません。次に行う必要があるのは、通常の Web サイトのように複数の nginx 仮想ホストを構成することです。違いは、ここで複数の異なるポートをリッスンする必要があることです。いくつかの仮想ホスト構成では、Web サイトのディレクトリのみが異なります。たとえば、ua が dashen の場合、対応する Web サイトのディレクトリは /vhosts/example.com/dashen です。ua が mianwo の場合、対応する Web サイトのディレクトリは /vhosts/example です。 .com/mianwo.
このようにして、さまざまなテスターが自分の ua に対応する Web サイト ディレクトリ内のブランチをプルし、ブラウザ プラグインを通じて独自の ua を設定できるため、複数の人が異なるブランチをプルできるようになります。同じドメイン名にアクセスする場合、Web サイトのルート ディレクトリは異なる ua に従って分離され、相互に影響しません。
以上がNginx リバース プロキシと負荷分散を使用して複数人によるテスト環境を構築する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。