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

Implementar la separación dinámica y estática y el equilibrio de carga de Nginx y Tomcat

Este artículo introduce la separación dinámica y estática y el balanceo de carga entre Nginx y Tomcat, la separación dinámica y estática significa procesar los archivos estáticos como imágenes, html a través de nginx (o apache, etc.), y procesar los archivos dinámicos como jsp, do a través de tomcat (o weblogic), para lograr que las páginas estáticas y dinámicas se procesen a través de diferentes contenedores al acceder.

I. Introducción a Nginx:

Nginx es un servidor HTTP y proxy inverso de alta eficiencia, con alta estabilidad y fácil soporte para despliegue en caliente y expansión de módulos. Cuando se enfrentan a picos de acceso o alguien lanza conexiones lentas maliciosas, también puede llevar a que el servidor agote la memoria física y se intercambie con frecuencia, perdiendo la respuesta, solo puede reiniciar el servidor. Nginx adopta la tecnología de asignación de recursos en etapas, acelera el procesamiento de archivos estáticos y proxy sin caché, realiza la balanceo de carga y la tolerancia a fallos, y puede soportar el procesamiento de alta concurrencia en situaciones de acceso de alta concurrencia.

II. Instalación y configuración de Nginx

Primer paso: Descargar el paquete de instalación de Nginx   http://nginx.org/en/download.html

Segundo paso: Instalar Nginx en Linux

#tar zxvf nginx-1.7.8.tar.gz //Descomprimir
#cd nginx-1.7.8
#./configure --with-http_stub_status_module --with-http_ssl_module//Iniciar la página de estado del servidor y el módulo HTTPS

se mostrará el error de falta de biblioteca PCRE, como se muestra en la figura:

En este momento, primero ejecutar el tercer paso para instalar PCRE, luego3Ejecutarlo, esto es suficiente

4.make && make install //Compilar e instalar

5.Prueba si la configuración de instalación es correcta, Nginx se instala en/usr/local/nginx

#/usr/local/nginx/sbin/nginx -t, como se muestra en la figura:

Paso tres: Instalar PCRE en Linux

#tar zxvf pcre-8.10.tar.gz //Descomprimir
cd pcre-8.10
./configure
make && make install//Compilar e instalar

Tres. Nginx +Implementación de separación dinámica y estática de Tomcat

 La separación dinámica y estática es que Nginx maneje las solicitudes estáticas del cliente (páginas html) o imágenes, mientras que Tomcat maneja las solicitudes dinámicas del cliente (páginas jsp), ya que el rendimiento de procesamiento de páginas estáticas de Nginx es superior al de Tomcat.

Paso uno: Debemos configurar el archivo 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 aplicación/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 texto/puro aplicación/x-javascript texto/css aplicación/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)$ //El nginx procesa las páginas estáticas</span> 
       {  
         root  /usr/tomcat/apache-tomcat-8081/webapps/ROOT;  
          expires   30d; //almacenado en el cliente30 día 
        }  
    error_page 404       /404.html; 
    #redirija las páginas de error del servidor al página estática /50x.html 
    error_page  500 502 503 504 /50x.html; 
    location = /50x.html { 
      root  html; 
    } 
     <span style="color:#ff0000;"> location ~ \.(jsp|do)$ {//Todos los solicitudes dinámicas de jsp se entregan al Tomcat para su procesamiento </span> 
      <span style="color:#ff0000;"> proxy_pass http://192.168.74.129:8081; //Las solicitudes que terminan en jsp o do se entregan al tomcat para su procesamiento</span> 
      proxy_redirect off; 
      proxy_set_header Host $host;  //El servidor web de destino puede obtener X a través de-Forwarded-Para obtener la IP real del usuario 
      proxy_set_header X-Real-IP $remote_addr; 
      proxy_set_header X-Forwarded-Para $proxy_add_x_forwarded_for; 
      client_max_body_size 10m;  //Número máximo de bytes de un solo archivo solicitado por el cliente 
      client_body_buffer_size 128k; //Número máximo de bytes del búfer de solicitud del usuario del proxy 
       proxy_connect_timeout 90;  //Tiempo de espera de conexión entre nginx y el servidor de destino 
       proxy_read_timeout 90;   //Tiempo de respuesta del servidor de destino después de que se establece la conexión 
       proxy_buffer_size 4k;   //Configurar el tamaño del búfer de almacenamiento de información de encabezado del usuario del servidor proxy (nginx) 
       proxy_buffers 6 32k;    //Búfer de proxy_buffers, el tiempo promedio de carga de la página web es32Si es menor que k, configure así 
      proxy_busy_buffers_size 64k;//Tamaño del búfer bajo carga alta (proxy_buffers*2) 
      proxy_temp_file_write_size 64k; //Configura el tamaño de la carpeta de caché, si el valor es mayor, se transferirá desde el servidor upstream. 
    } 
  }  
}

Paso dos: En la carpeta webapps de Tomcat/Crear una página estática index.html en la carpeta ROOT, como se muestra en la figura:

Paso tres: Iniciar el servicio Nginx

 #sbin/nginx, como se muestra en la figura:

Paso cuatro: Accedemos a la páginahttp://192.168.74.129/index.html Puede mostrar el contenido normal, como se muestra en la figura:

Paso cinco: ¿Cómo es el rendimiento de procesamiento de páginas estáticas de Nginx y Tomcat en situaciones de alta concurrencia?

Utilizamos el comando de prueba de presión web ab de Linux para probar el rendimiento

1.Prueba la capacidad de procesamiento estático de Nginx

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

 esto representa el procesamiento simultáneo10sin solicitudes y ejecutándose1000 veces el archivo index.html, como se muestra en la figura:

2.Prueba la capacidad de procesamiento estático de Tomcat

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

esto representa el procesamiento simultáneo10sin solicitudes y ejecutándose1000 veces el archivo index.html, como se muestra en la figura:

el mismo procesamiento de archivos estáticos, el rendimiento de procesamiento estático de Nginx es mejor que el de Tomcat. Nginx puede manejar solicitudes5388segundo, mientras que Tomcat solo realiza2609segundo

Resumen: En el archivo de configuración de Nginx, configuramos que Nginx maneje las solicitudes estáticas y que Tomcat maneje las solicitudes dinámicas, lo que proporciona un rendimiento mejorado.

Cuatro. Nginx +Balanceo de carga y tolerancia a fallos de Tomcat

En situaciones de alta concurrencia, para mejorar el rendimiento del servidor, redujimos la presión de concurrencia de un solo servidor, adoptamos la implementación en clúster, lo que también puede resolver problemas de tolerancia a fallos en el caso de que un solo servidor se caiga y el servicio no pueda ser accedido.

 Paso 1: En nuestra parte, desplegamos dos servidores Tomcat,}192.168.74.129:8081y192.168.74.129:8082

 Paso 2: Nginx actúa como servidor proxy, y cuando el cliente solicita al servidor, utiliza el equilibrio de carga para procesar, lo que permite distribuir de manera equitativa las solicitudes del cliente a cada servidor, reduciendo así la presión en el lado del servidor. Configura el archivo nginx.conf de 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 aplicación/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 texto/puro aplicación/x-javascript texto/css aplicación/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)$ //El nginx procesa las páginas estáticas</span> 
       {  
         root  /usr/tomcat/apache-tomcat-8081/webapps/ROOT;  
          expires   30d; //almacenado en el cliente30 día 
        }  
    error_page 404       /404.html; 
    #redirija las páginas de error del servidor al página estática /50x.html 
    error_page  500 502 503 504 /50x.html; 
    location = /50x.html { 
      root  html; 
    } 
     <span style="color:#ff0000;">location ~ \.(jsp|do)$ {//Todos los solicitudes dinámicas de jsp se entregan al Tomcat para su procesamiento </span> 
      <span style="color:#ff0000;">proxy_pass http://localhost_server; //Las solicitudes que terminan en jsp o do se entregan al tomcat para su procesamiento</span> 
      proxy_redirect off; 
      proxy_set_header Host $host;  //El servidor web de destino puede obtener X a través de-Forwarded-Para obtener la IP real del usuario 
      proxy_set_header X-Real-IP $remote_addr; 
      proxy_set_header X-Forwarded-Para $proxy_add_x_forwarded_for; 
      client_max_body_size 10m;  //Número máximo de bytes de un solo archivo solicitado por el cliente 
      client_body_buffer_size 128k; //Número máximo de bytes del búfer de solicitud del usuario del proxy 
       proxy_connect_timeout 90;  //Tiempo de espera de conexión entre nginx y el servidor de destino 
       proxy_read_timeout 90;   //Tiempo de respuesta del servidor de destino después de que se establece la conexión 
       proxy_buffer_size 4k;   //Configurar el tamaño del búfer de almacenamiento de información de encabezado del usuario del servidor proxy (nginx) 
       proxy_buffers 6 32k;    //Búfer de proxy_buffers, el tiempo promedio de carga de la página web es32Si es menor que k, configure así 
      proxy_busy_buffers_size 64k;//Tamaño del búfer bajo carga alta (proxy_buffers*2) 
      proxy_temp_file_write_size 64k; //Configura el tamaño de la carpeta de caché, si el valor es mayor, se transferirá desde el servidor upstream. 
    } 
  }  
}

Notas:

1.upstream 中的server se refiere a la IP (dominio) y el puerto del servidor, y se pueden agregar parámetros adicionales.

1)weight: configura el peso de la redirección del servidor, el valor predeterminado es1。

2)max_fails: se utiliza junto con fail_timeout, lo que significa que si el número de intentos de retransmisión del servidor excede el valor configurado por max_fails en el período de tiempo de fail_timeout, este servidor no estará disponible, el valor predeterminado de max_fails es1

3)fail_timeout: indica cuántas veces se considera que este servidor no está disponible en el período de tiempo especificado.

4)down: indica que este servidor no está disponible.

 5)backup: indica que la configuración de ip_hash para este servidor es ineficaz. Solo se enviarán solicitudes al servidor cuando todos los servidores no de respaldo estén inactivos.

 2La configuración de .ip_hash se realiza en los servidores del clúster. Si el mismo cliente solicita redirigir a varios servidores, cada servidor puede cachear la misma información, lo que causará un desperdicio de recursos. La configuración de ip_hash redirigirá la información solicitada por segunda vez por el mismo cliente al servidor de la primera solicitud. Pero ip_hash no se puede usar simultáneamente con weight.

Esto es todo el contenido de este artículo, espero que sea útil para su aprendizaje y que todos nos apoyen en el tutorial de gritos.

Declaración: El contenido de este artículo se obtiene de la red, es propiedad del autor original, el contenido se contribuye y carga de manera autónoma por los usuarios de Internet, este sitio no posee los derechos de propiedad, no se ha realizado un procesamiento editorial humano y no asume ninguna responsabilidad legal relacionada. Si encuentra contenido sospechoso de infracción de derechos de autor, le invitamos a enviar un correo electrónico a: notice#oldtoolbag.com (al enviar un correo electrónico, reemplace # con @) para denunciar y proporcionar evidencia relevante. Una vez verificada, este sitio eliminará inmediatamente el contenido sospechoso de infracción.

Te gustará