Maison > Opération et maintenance > Nginx > le corps du texte

Analyse d'un exemple de déploiement simple Nginx + IIS

WBOY
Libérer: 2023-06-04 09:36:15
avant
2277 Les gens l'ont consulté

nginx Introduction :

nginx ("engine x") est un serveur http et proxy inverse hautes performances et un imap/ pop3/ serveur proxy smtp. nginx a été développé par igor sysoev pour le deuxième site rambler.ru le plus visité de Russie, où il fonctionne depuis plus de quatre ans. igor publie le code source sous une licence de type BSD. Au cours des quatre années qui ont suivi sa sortie, nginx est devenu connu pour sa stabilité, son riche ensemble de fonctionnalités, ses exemples de fichiers de configuration et sa faible consommation de ressources système. À l'heure actuelle, nginx a été déployé sur les principaux sites Web de portails nationaux, tels que Sina, NetEase, Tencent, etc. ; plusieurs sites Web nationaux importants de partage de vidéos ont également déployé nginx, tels que Liufangfang, Ku6, etc. Il a récemment été découvert que la technologie nginx est de plus en plus populaire en Chine et que de plus en plus de sites Web commencent à déployer nginx. Tout cela est mentionné en ligne.

installation de nginx

nginx est un serveur Web/proxy inverse léger et un serveur proxy de messagerie (imap/pop3), et est publié sous une licence de type BSD. Il a été développé par le programmeur russe Igor Sysoev et est utilisé par Rambler (russe : рамблер), un grand portail russe et moteur de recherche. Ses caractéristiques sont qu'il occupe moins de mémoire et possède de fortes capacités de concurrence. En fait, les capacités de concurrence de nginx fonctionnent mieux parmi les serveurs Web du même type. Les utilisateurs de sites Web nginx en Chine continentale incluent : Baidu, Sina, NetEase, Tencent, etc.

La dernière version de nginx est la 1.9.3. Celle que j'ai téléchargée est la version Windows. Généralement, le scénario actuel est de l'installer sous le système Linux. Puisque le système Linux est actuellement en cours d'exploration, Je ne le présenterai pas ici. Adresse de téléchargement officielle :. Une fois le téléchargement terminé, décompressez et exécutez nginx.exe pour démarrer nginx. Après le démarrage, vous verrez nginx dans le processus.

Analyse dun exemple de déploiement simple Nginx + IISAnalyse dun exemple de déploiement simple Nginx + IIS

Pour réaliser l'équilibrage de charge, vous devez modifier les informations de configuration de conf/nginx.conf. Après avoir modifié les informations de configuration, redémarrez. le service nginx. Vous pouvez utiliser la commande Implémenté par nginx -s reload. Ici, nous utilisons un processus par lots fourni par les fourmis pour fonctionner.

Analyse dun exemple de déploiement simple Nginx + IIS

Mettez le fichier nginx.bat dans le même dossier que nginx.exe et exécutez-le directement. Tous les fichiers utilisés dans cet article seront fournis à la fin de l'article.

Analyse dun exemple de déploiement simple Nginx + IIS

Construction et configuration du site

1. Site

Il n'y a qu'une simple page d'index sous le site, qui est utilisée pour afficher les informations actuelles du serveur. Comme je n'ai pas deux machines, j'ai déployé les deux sites sur cette machine et lié les ports 8082 et 9000 respectivement.

protected void page_load(object sender, eventargs e)
  {
   label0.text = "请求开始时间:"+datetime.now.tostring("yyyy-mm-dd hh:mm:ss");
   label1.text = "服务器名称:" + server.machinename;//服务器名称 
   label2.text = "服务器ip地址:" + request.servervariables["local_addr"];//服务器ip地址 
   label3.text = "http访问端口:" + request.servervariables["server_port"];//http访问端口"
   label4.text = ".net解释引擎版本:" + ".net clr" + environment.version.major + "." + environment.version.minor + "." + environment.version.build + "." + environment.version.revision;//.net解释引擎版本 
   label5.text = "服务器操作系统版本:" + environment.osversion.tostring();//服务器操作系统版本 
   label6.text = "服务器iis版本:" + request.servervariables["server_software"];//服务器iis版本 
   label7.text = "服务器域名:" + request.servervariables["server_name"];//服务器域名 
   label8.text = "虚拟目录的绝对路径:" + request.servervariables["appl_rhysical_path"];//虚拟目录的绝对路径 
   label9.text = "执行文件的绝对路径:" + request.servervariables["path_translated"];//执行文件的绝对路径 
   label10.text = "虚拟目录session总数:" + session.contents.count.tostring();//虚拟目录session总数 
   label11.text = "虚拟目录application总数:" + application.contents.count.tostring();//虚拟目录application总数 
   label12.text = "域名主机:" + request.servervariables["http_host"];//域名主机 
   label13.text = "服务器区域语言:" + request.servervariables["http_accept_language"];//服务器区域语言 
   label14.text = "用户信息:" + request.servervariables["http_user_agent"];
   label14.text = "cpu个数:" + environment.getenvironmentvariable("number_of_processors");//cpu个数 
   label15.text = "cpu类型:" + environment.getenvironmentvariable("processor_identifier");//cpu类型 
   label16.text = "请求来源地址:" + request.headers["x-real-ip"];
  }
Copier après la connexion

2. Modifier les informations de configuration nginx

Modifiez le port d'écoute nginx et modifiez la valeur du nœud d'écoute sous le serveur http. port 80 Déjà occupé, je suis passé en écoute sur le port 8083.

listen 8083;

Ajouter en amont (cluster de serveur) sous le nœud http Le serveur définit les informations du serveur de cluster que je construis. ici Deux sites ont été créés et deux informations ont été configurées.

#服务器集群名称为jq_one
upstream jq_one {
  server 127.0.0.1:9000;
  server 127.0.0.1:8082;
}
Copier après la connexion

Trouvez la modification du nœud d'emplacement sous le nœud http

location / {
root html;
index index.aspx index.html index.htm; #修改主页为index.aspx
#其中jq_one对应着upstream设置的集群名称
proxy_pass http://jq_one;
#设置主机头和客户端真实地址,以便服务器获取客户端真实ip
proxy_set_header host $host;
proxy_set_header x-real-ip $remote_addr;
proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
}
Copier après la connexion

Après avoir modifié le fichier de configuration, n'oubliez pas de redémarrer le service nginx Les informations finales complètes sur le fichier de configuration sont les suivantes#. 🎜🎜#

Analyse dun exemple de déploiement simple Nginx + IIS

3. Résultats en cours

Visitez http://127.0.0.1:8083/ index.aspx, visitez encore quelques fois. Ensuite, concentrez-vous sur les parties marquées en rouge.

Analyse dun exemple de déploiement simple Nginx + IISAnalyse dun exemple de déploiement simple Nginx + IIS

Comme vous pouvez le constater, notre demande a été diffusée sur le site 8082 et le site 9000, et la première fois c'était le site 8082 et la deuxième fois 9000. Un tel résultat prouve que notre configuration d’équilibrage de charge a réussi. Essayez de fermer 9 000 sites, puis actualisez la page et constatez que le port http de sortie est toujours 8082, ce qui signifie que l'un des sites est en panne. Tant qu'il y a encore un bon site, le nôtre peut toujours servir.

Analyse des problèmes

Bien que nous ayons construit un site d'équilibrage de charge, il reste les problèmes suivants.

1. Si le site utilise la session et que les requêtes sont réparties uniformément sur les deux sites, alors il doit y avoir un problème de partage de session. Comment le résoudre ?

Utilisez la base de données pour enregistrer les informations de session et utilisez nginx pour attribuer les requêtes de la même IP au serveur fixe. Modifiez comme suit. ip_hash calculera la valeur de hachage correspondant à l'ip, puis l'attribuera au serveur fixe 127.0.0.1:9000;

 ip_hash;

 }


Construisez un serveur Redis et lisez la session à partir du serveur Redis. Les articles suivants présenteront l'utilisation du cache distribué Redis

2.管理员更新站点文件,该怎么操作,现在还只有两台服务器,可以手工将文件更新到两台服务器,如果是10台呢,那么手工操作必然是不可行的

多服务器站点更新可以使用goodsync 文件同步程序,会自动检测文件的修改新增,然后同步到其它服务器上。在linux下可以使用rsync

3.站点中的文件上传功能会将文件分配到不同的服务器,文件共享问题如何解决。

使用文件服务器将所有文件存储到该服务器上,文件操作读取写入都在该服务器上。这里同样会存在一个问题,文件服务器存在读写上限。

4.负载的服务器配置不一样,有的高有的低可不可以让配置高的服务器处理请求多一些

这里讲一下,负载均衡有好几种算法 轮转法,散列法,最少连接法,最低缺失法,最快响应法,加权法。我们这里可以使用加权法来分配请求。

upstream jq_one{
  server 127.0.0.1:8082 weight=4;
   server 127.0.0.1:9000 weight=1;
  }

通过weight设置每台服务器分配请求站的权重,值越高分配的越多。

5.由于请求是经过nginx转发过来的,可以在代码里面获取到用户请求的实际ip地址吗?

答案是肯定的,在localtion节点设置如下请求头信息

#设置主机头和客户端真实地址,以便服务器获取客户端真实ip
proxy_set_header host $host;
proxy_set_header x-real-ip $remote_addr;
proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
Copier après la connexion

代码里面通过request.headers["x-real-ip"],就能获取到真实ip

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!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!