Principe de mise en œuvre
Lorsque nous visitons un site Web, il y aura un en-tête d'agent utilisateur dans l'en-tête de la requête, tel que mozilla/5.0 (macintosh ; intel mac os x 10.12 ; rv:50.0) gecko/20100101 firefox/50.0 , cet ua peut être personnalisé, et de nombreux plug-ins de navigateur prennent également en charge l'ajout d'ua personnalisé, comme le plug-in swicher de l'agent utilisateur de Firefox.
Comme le montre l'image, un ua personnalisé a été ajouté ici et le contenu a été modifié par votre propre nom. En demandant le site Web via cet ua, nous pouvons voir dans l'en-tête de la demande que l'ua est devenu. le nôtre, qui est un identifiant.
Selon cet ua, il est jugé par nginx. Différents ua sont transmis à différents ports, et chaque port correspond à un répertoire de site Web.
nginx détermine ua
Grâce à nginx, vous pouvez obtenir l'ua de chaque requête, c'est-à-dire la variable $http_user_agent.
Par exemple, dans le champ d'emplacement, vous pouvez juger ua et définir un drapeau comme celui-ci :
if ( $http_user_agent ~ "dashen" ) { set $flag "01"; }
Par exemple, si vous jugez que le contenu de ua est en tiret et définissez $flag sur 01, vous pouvez définir plusieurs de ces drapeaux .
Proxy inverse nginx et équilibrage de charge
En jugeant différents uAs, nous pouvons transférer vers différentes machines et ports via des proxys inverses. Ici, la même machine de test peut transférer vers différents ports de cette machine et écouter différents paramètres de port pour différents. répertoires de sites Web.
Les détails sont les suivants :
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; } } }
Cette configuration inversera le proxy de différentes requêtes ua vers différents serveurs d'équilibrage de charge. Voir la configuration spécifique d'équilibrage de charge ci-dessous.
Configuration d'équilibrage de charge nginx
Plusieurs configurations d'équilibrage de charge sont définies ici. Chaque configuration d'équilibrage de charge n'est en fait configurée qu'avec une seule machine, c'est-à-dire différents ports de la machine locale.
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; }
Donc, ce n'est pas encore fini. Ce que vous devez faire ensuite est de configurer plusieurs hôtes virtuels nginx comme un site Web normal. La différence est que vous devez écouter plusieurs ports différents, vous avez donc besoin de plusieurs configurations d'hôtes virtuels. juste que le répertoire du site Web est différent. Par exemple, si ua est dashen, le répertoire du site Web correspondant est /vhosts/example.com/dashen Si ua est mianwo, le répertoire du site Web correspondant est /vhosts/example.com/mianwo. .
De cette façon, différents testeurs extraient les branches du répertoire du site Web correspondant à leur propre ua et configurent leur propre ua via le plug-in du navigateur. Cela permet à plusieurs personnes d'extraire différentes branches sur une machine en même temps. , et accédez au même nom de domaine. Selon l'UA, les répertoires racine du site Web sont séparés et ne s'influencent pas.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!