English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Implémentation de la séparation statique et dynamique de Nginx et Tomcat et l'équilibrage de charge

Cet article présente la séparation statique et dynamique de Nginx et Tomcat, la séparation statique et dynamique consistant à traiter les fichiers statiques tels que les images, html, etc. par Nginx (ou Apache, etc.) pour traiter les demandes des utilisateurs, et à traiter les fichiers dynamiques tels que jsp, do par Tomcat (ou weblogic), afin de réaliser que les pages statiques et dynamiques sont traitées par des conteneurs différents lors de l'accès.

Première partie : Introduction à Nginx :

Nginx est un serveur HTTP et proxy inversé performant, doté d'une haute stabilité et prenant en charge le déploiement en direct et l'extension de modules très facile. Lorsque la fréquence d'accès atteint un pic ou qu'une personne malveillante initie des connexions lentes, cela peut également entraîner une épuisement fréquent de la mémoire physique du serveur, des échanges fréquents, une perte de réponse, et ne peut être que redémarré le serveur. Nginx a adopté la technologie d'allocation de ressources en phases pour traiter les fichiers statiques et les proxy inverses sans cache, réalisant ainsi l'équilibrage de charge et la tolérance aux pannes, et peut résister à des traitements à haute fréquence dans de telles situations de haute concurrence.

Deuxième partie : Installation et configuration de Nginx

Première étape : Télécharger le paquet d'installation de Nginx   http://nginx.org/en/download.html

Deuxième étape : Installer Nginx sur Linux

#tar zxvf nginx-1.7.8.tar.gz //Décompression
#cd nginx-1.7.8
#./configure --avec-http_stub_status_module --avec-http_ssl_module//Lancement de la page d'état du serveur et du module HTTPS

affichera un message d'erreur indiquant une absence de bibliothèque PCRE, comme illustré dans la figure :

À ce stade, exécutez d'abord l'étape troisième pour installer PCRE, puis3Exécutez-le, c'est suffisant

4.make && make install //Compilation et installation

5.Vérifiez si l'installation et la configuration sont correctes, Nginx est installé/usr/local/nginx

#/usr/local/nginx/sbin/nginx -t, comme illustré dans la figure :

Étape troisième : Installer PCRE sur Linux

#tar zxvf pcre-8.10.tar.gz //Décompression
cd pcre-8.10
./configure
make && make install//Compilation et installation

Troisième. Nginx +Realisation de la séparation statique et dynamique par Tomcat

 La séparation statique et dynamique signifie que Nginx traite les pages statiques (pages html) ou les images demandées par le client, et Tomcat traite les pages dynamiques (pages jsp) demandées par le client, car l'efficacité de traitement des pages statiques de Nginx est supérieure à celle de Tomcat.

Étape première : Nous devons configurer le fichier Nginx

 #vi /usr/local/nginx/conf/nginx.conf

 #user nobody; 
worker_processes 1; 
error_log logs/error.log; 
pid    logs/nginx.pid; 
events { 
  use epoll; 
  worker_connections 1024; 
} 
http { 
  include    mime.types; 
  default_type application/octet-stream; 
  log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 
           '$status $body_bytes_sent "$http_referer" ' 
           '"$http_user_agent" "$http_x_forwarded_for"'; 
  access_log logs/access.log main; 
  sendfile    on; 
keepalive_timeout 65; 
gzip on;  
gzip_min_length 1k;  
gzip_buffers   4 16k;  
gzip_http_version 1.0;  
gzip_comp_level 2;  
gzip_types text/plain application/x-javascript text/css application/xml;  
gzip_vary on;  
  server { 
    listen    80 default; 
    server_name localhost; 
    <span style="color:#ff0000;">location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ //Pages statiques traitées par nginx </span> 
       {  
         root  /usr/tomcat/apache-tomcat-8081/webapps/ROOT;  
          expires   30d; //stocké sur le client30 jour 
        }  
    error_page 404       /404.html; 
    #rediriger les pages d'erreur serveur vers la page statique /50x.html 
    error_page  500 502 503 504 /50x.html; 
    location = /50x.html { 
      root  html; 
    } 
     <span style="color:#ff0000;"> location ~ \.(jsp|do)$ {//Toutes les demandes dynamiques de jsp sont traitées par Tomcat </span> 
      <span style="color:#ff0000;"> proxy_pass http://192.168.74.129:8081; //Les demandes provenant de jsp ou de do doivent être traitées par tomcat </span> 
      proxy_redirect off; 
      proxy_set_header Host $host;  //Le serveur web backend peut utiliser X-Forwarded-Pour obtenir l'IP réelle de l'utilisateur 
      proxy_set_header X-Réel-IP $remote_addr; 
      proxy_set_header X-Forwarded-Pour $proxy_add_x_forwarded_for; 
      client_max_body_size 10m;  //Nombre maximum d'octets du fichier unique demandé par le client 
      client_body_buffer_size 128k; //Nombre maximum d'octets du tampon de la requête utilisateur client 
       proxy_connect_timeout 90;  //Temps d'attente de connexion entre nginx et le serveur backend 
       proxy_read_timeout 90;   //Temps de réponse du serveur backend après la connexion réussie 
       proxy_buffer_size 4k;   //Taille du tampon de l'information d'en-tête utilisateur du serveur proxy (nginx) 
       proxy_buffers 6 32k;    //Zone de tampon proxy_buffers, la page web moyenne est32Si le nombre est inférieur à k, configurer ainsi 
      proxy_busy_buffers_size 64k;//Taille de tampon sous charge élevée (proxy_buffers*2) 
      proxy_temp_file_write_size 64k; //Définir la taille du dossier de cache, si la valeur est supérieure à cette valeur, elle sera transmise depuis le serveur upstream 
    } 
  }  
}

Étape deuxième : Dans webapps sous tomcat/Créer un fichier statique index.html sous ROOT, comme illustré dans la figure :

Étape troisième : Démarrer le service Nginx

 #sbin/nginx, comme illustré dans la figure :

Étape quatrième : Nous accédons à la pagehttp://192.168.74.129/index.html Peut afficher normalement le contenu normal, comme illustré dans la figure :

Étape cinquième : Comment les performances de Nginx et Tomcat pour traiter les pages statiques sous haute charge concurrente ?

Nous avons utilisé la commande de test de pression de site web ab Linux pour tester les performances

1.Testez les performances de Nginx pour traiter les pages statiques

ab -c 100 -n 1000 http://192.168.74.129/index.html

 Cela représente le traitement simultané100 requêtes et exécuter1000 fois le fichier index.html, comme illustré dans la figure :

2.Testez les performances de Tomcat pour traiter les pages statiques

ab -c 100 -n 1000 http://192.168.74.129:8081/index.html

Cela représente le traitement simultané100 requêtes et exécuter1000 fois le fichier index.html, comme illustré dans la figure :

traiter les fichiers statiques identiques, la performance statique de Nginx est meilleure que celle de Tomcat. Nginx peut traiter5388deuxième, tandis que Tomcat ne demande2609deuxième

Résumé : Nous avons configuré dans le fichier de configuration de Nginx que les pages statiques sont traitées par Nginx, et les requêtes dynamiques sont traitées par Tomcat, ce qui améliore les performances.

Quatre. Nginx +Équilibre de charge et tolérance aux pannes de Tomcat

Dans le cas de hautes conceptions concurrentes, pour améliorer les performances des serveurs, nous avons réduit la pression concurrente sur un serveur unique, adoptant une déployment en grappe, ce qui peut également résoudre le problème de tolérance aux pannes, pour éviter que le service ne soit in accessible en cas de panne d'un serveur unique.

 étape une : nous avons déployé deux serveurs Tomcat.192.168.74.129:8081et192.168.74.129:8082

 étape deux : Nginx agit en tant que serveur proxy, lorsque le client demande au serveur, il utilise la répartition de charge pour traiter, de sorte que les demandes clients puissent être distribuées de manière égale sur chaque serveur, ce qui réduit la pression sur le serveur. Configurez le fichier nginx.conf sous Nginx.

  #vi /usr/local/nginx/conf/nginx.conf

 

 #user nobody; 
worker_processes 1; 
error_log logs/error.log; 
pid    logs/nginx.pid; 
events { 
  use epoll; 
  worker_connections 1024; 
} 
http { 
  include    mime.types; 
  default_type application/octet-stream; 
  log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 
           '$status $body_bytes_sent "$http_referer" ' 
           '"$http_user_agent" "$http_x_forwarded_for"'; 
  access_log logs/access.log main; 
  sendfile    on; 
keepalive_timeout 65; 
gzip on;  
gzip_min_length 1k;  
gzip_buffers   4 16k;  
gzip_http_version 1.0;  
gzip_comp_level 2;  
gzip_types text/plain application/x-javascript text/css application/xml;  
gzip_vary on;  
<span style="color:#ff0000;">upstream localhost_server { 
    ip_hash; 
    server 192.168.74.129:8081; 
    server 192.168.74.129:8082; 
  }</span>/span> 
  server { 
    listen    80 default; 
    server_name localhost; 
    <span style="color:#ff0000;">location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ //Pages statiques traitées par nginx </span> 
       {  
         root  /usr/tomcat/apache-tomcat-8081/webapps/ROOT;  
          expires   30d; //stocké sur le client30 jour 
        }  
    error_page 404       /404.html; 
    #rediriger les pages d'erreur serveur vers la page statique /50x.html 
    error_page  500 502 503 504 /50x.html; 
    location = /50x.html { 
      root  html; 
    } 
     <span style="color:#ff0000;">location ~ \.(jsp|do)$ {//Toutes les demandes dynamiques de jsp sont traitées par Tomcat </span> 
      <span style="color:#ff0000;">proxy_pass http://localhost_server; //Les demandes provenant de jsp ou de do doivent être traitées par tomcat </span> 
      proxy_redirect off; 
      proxy_set_header Host $host;  //Le serveur web backend peut utiliser X-Forwarded-Pour obtenir l'IP réelle de l'utilisateur 
      proxy_set_header X-Réel-IP $remote_addr; 
      proxy_set_header X-Forwarded-Pour $proxy_add_x_forwarded_for; 
      client_max_body_size 10m;  //Nombre maximum d'octets du fichier unique demandé par le client 
      client_body_buffer_size 128k; //Nombre maximum d'octets du tampon de la requête utilisateur client 
       proxy_connect_timeout 90;  //Temps d'attente de connexion entre nginx et le serveur backend 
       proxy_read_timeout 90;   //Temps de réponse du serveur backend après la connexion réussie 
       proxy_buffer_size 4k;   //Taille du tampon de l'information d'en-tête utilisateur du serveur proxy (nginx) 
       proxy_buffers 6 32k;    //Zone de tampon proxy_buffers, la page web moyenne est32Si le nombre est inférieur à k, configurer ainsi 
      proxy_busy_buffers_size 64k;//Taille de tampon sous charge élevée (proxy_buffers*2) 
      proxy_temp_file_write_size 64k; //Définir la taille du dossier de cache, si la valeur est supérieure à cette valeur, elle sera transmise depuis le serveur upstream 
    } 
  }  
}

Remarque :

1.upstream 中的server est l'adresse IP (domaine) et le port du serveur, et peut également inclure des paramètres

1)weight : configure la pondération de redirigeon du serveur. La valeur par défaut est1.

2)max_fails : est utilisé avec fail_timeout, ce qui signifie que si le nombre de redirigeons infructueux du serveur dépasse la valeur définie par max_fails pendant la période de fail_timeout, ce serveur ne sera pas disponible, la valeur par défaut de max_fails est1

3)fail_timeout : indique le nombre de redirigeons infructueux pendant cette période pour considérer ce serveur comme inutilisable.

4)down : indique que ce serveur est inutilisable.

 5)backup : indique que la configuration ip_hash pour ce serveur est invalide. Seulement après que tous les serveurs non en backup soient dysfonctionnels, les requêtes seront redirigées vers ce serveur.

 2La configuration .ip_hash est dans les serveurs du groupe, si la même requête client est redirigée vers plusieurs serveurs, chaque serveur peut stocker la même information, ce qui peut entraîner un gaspillage de ressources. La configuration ip_hash redirigera la même information demandée par le client pour la deuxième fois vers le serveur de la première requête. Cependant, ip_hash ne peut pas être utilisé avec weight en même temps.

Voici la totalité du contenu de cet article, j'espère qu'il vous sera utile dans vos études, et j'espère que vous soutiendrez également le tutoriel d'encouragement.

Déclaration : le contenu de cet article est issu du réseau, la propriété intellectuelle appartient à ses auteurs respectifs, le contenu est apporté par les utilisateurs d'Internet et téléversé spontanément. Ce site n'est pas propriétaire des droits d'auteur, n'a pas été édité par l'homme, et n'assume aucune responsabilité juridique. Si vous trouvez du contenu suspect de violation de droits d'auteur, veuillez envoyer un e-mail à : notice#oldtoolbag.com (veuillez remplacer # par @ lors de l'envoi d'un e-mail pour signaler une violation, et fournir des preuves pertinentes. Une fois vérifié, ce site supprimera immédiatement le contenu suspect de violation de droits d'auteur.)

Vous pourriez aussi aimer