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

Detalles de la función de proxy de Nginx y el equilibrio de carga

Prólogo

La función de proxy y la función de equilibrio de carga de Nginx son las más utilizadas, sobre las habilidades básicas de sintaxis y configuración de Nginx se ha explicado en el artículo anterior, este artículo va directamente al grano, primero describe algunas configuraciones de la función de proxy, y luego explica en detalle la función de equilibrio de carga.

Descripción de la configuración del servicio de proxy de Nginx

1En el artículo anterior, en el módulo http, tenemos la siguiente configuración, cuando el proxy encuentra el código de estado404Cuando404La página se dirige a Baidu.

error_page 404 https://www.baidu.com;  #Página de error

Sin embargo, esta configuración, los amigos atentos pueden descubrir que no funciona.

Si queremos que funcione, debemos usar la configuración siguiente

proxy_intercept_errors on;  #Si el servidor proxy devuelto el código de estado de400 o mayor400, se activa la configuración de error_page configurada. Por defecto es off.

2Si nuestro proxy solo permite aceptar métodos de solicitud de una variedad de get, post

proxy_method get;  #Soporta métodos de solicitud del cliente. post/get;

3Configurar las versiones de http soportadas

proxy_http_version 1.0 ; # Versión del protocolo http proporcionada por el servidor Nginx para el servicio de proxy1.0,1.1,por defecto se configura como1.0 versión

4Si su servidor nginx le da2Un servidor web realiza la proxy, el algoritmo de equilibrio de carga utiliza el ciclo, entonces cuando un programa web de una máquina web iis se cierra, es decir, web no puede acceder, entonces el servidor nginx de distribución de solicitudes aún le dará a este servidor web inaccesible, si aquí el tiempo de conexión de respuesta es demasiado largo, causará que la página del cliente esté esperando constantemente la respuesta, lo que reducirá la experiencia del usuario, ¿cómo podemos evitar que esto suceda? Aquí he configurado una imagen para explicar el problema.

 

 Si en el equilibrio de carga de un web2En este caso, nginx primero buscará en web1Solicitud, pero nginx seguirá distribuyendo solicitudes a web si la configuración no es adecuada2Luego espera a que web2La respuesta, hasta que nuestro tiempo de respuesta de expiración, antes de que se redistribuya la solicitud a web1Si la respuesta es demasiado larga, el tiempo de espera del usuario también será más largo.

La configuración siguiente es una de las soluciones posibles.

proxy_connect_timeout 1;  # Tiempo de espera para la conexión del servidor Nginx con el servidor proxy, por defecto60 segundos
proxy_read_timeout 1; # Después de que el servidor Nginx envíe una solicitud read al grupo de servidores proxy, el tiempo de espera para la respuesta, por defecto es60 segundos.
proxy_send_timeout 1; # Después de que el servidor Nginx envíe una solicitud write al grupo de servidores proxy, el tiempo de espera para la respuesta, por defecto es60 segundos.
proxy_ignore_client_abort on; # Al romperse la conexión del cliente, ¿el servidor Nginx debe finalizar la solicitud al servidor proxy?. Por defecto está desactivado.

5de abajo es una de las soluciones posibles.

proxy_next_upstream timeout; # Valor de estado devuelto por el servidor proxy que realiza la proxy cuando ocurre un fallo en el grupo de servidores upstream configurado. error|timeout|invalid_header|http_500|http_502|http_503|http_504|http_404|off

  • error: Al establecer la conexión o al enviar la solicitud al servidor proxy o al leer la información de respuesta, el servidor ha producido un error.
  • timeout: Al establecer la conexión, al enviar la solicitud al servidor proxy o al leer la información de respuesta, el servidor ha producido un timeout.
  • invalid_header: La cabecera de respuesta devuelta por el servidor proxy es anómala.
  • off: No se puede distribuir la solicitud al servidor proxy que realiza la proxy.
  • http_400,...: El código de estado devuelto por el servidor proxy que realiza la proxy es400,500,502etc.

6de abajo hay una configuración para obtener el IP real del cliente a través de http en lugar de obtener la dirección IP del servidor proxy.

proxy_set_header Host $host; # Si el dominio que el usuario accede en el navegador está asociado con VIP VIP, se usa $host; el host es el dominio y el puerto de la URL de acceso www.taobao.com:80
proxy_set_header X-Real-IP $remote_addr; # Asignar IP de origen 【$remote_addr, información de encabezado de conexión HTTP】 a X-Real-IP;de esta manera, en el código $X-Real-IP para obtener IP de origen
proxy_set_header X-Forwarded-Para $proxy_add_x_forwarded_for;# Al usar nginx como servidor proxy, la lista de IP configurada, registrará la IP de la máquina que pasa y la IP del proxy, separados por 【,】; en el código se usa echo $x-forwarded-para |awk -F, '{imprimir $1}' como IP de origen

Sobre X-Forwarded-Para y X-Real-Recomiendo algunos artículos de un amigo sobre IP: X en las cabeceras de solicitud HTTP-Forwarded-Para , este amigo tiene una serie de artículos sobre el protocolo http, recomiendo que todos lo revisen.

7de abajo está una parte de mi archivo de configuración de proxy, a solo para referencia.

  incluir mime.types;  # Tabla de mapeo de extensiones de archivos y tipos de archivos
  aplicación de tipo predeterminado/octet-stream; # Tipo de archivo predeterminado, por defecto es text/plain
  #access_log off; # Desactivar el registro de servicios  
  log_format myFormat ' $remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; # Formato personalizado
  access_log log/access.log myFormat; # combined es el valor predeterminado del formato de registro
  sendfile on;  # Permite la transferencia de archivos mediante sendfile, por defecto está desactivado, puede estar en el bloque http, server, location.
  sendfile_max_chunk 100k; # La cantidad de transferencias no puede superar el valor configurado para cada proceso, por defecto es 0, es decir, sin límite superior.
  keepalive_timeout 65; # Tiempo de espera para la conexión, por defecto es75s, puede estar en el bloque http, server, location.
  proxy_connect_timeout 1;  # Tiempo de espera para la conexión del servidor Nginx con el servidor proxy, por defecto60 segundos
  proxy_read_timeout 1; # Después de que el servidor Nginx envíe una solicitud read al grupo de servidores proxy, el tiempo de espera para la respuesta, por defecto es60 segundos.
  proxy_send_timeout 1; # Después de que el servidor Nginx envíe una solicitud write al grupo de servidores proxy, el tiempo de espera para la respuesta, por defecto es60 segundos.
  proxy_http_version 1.0 ; # Versión del protocolo http proporcionada por el servidor Nginx para el servicio de proxy1.0,1.1,por defecto se configura como1.0 versión.
  #proxy_method get;  # Métodos de solicitud admitidos por el cliente. post/get;
  proxy_ignore_client_abort on; # Al romperse la conexión del cliente, ¿el servidor Nginx debe finalizar la solicitud al servidor proxy?. Por defecto está desactivado.
  proxy_ignore_headers "Expires" "Set-Cookie"; # El servidor Nginx no procesa los encabezados de respuesta http configurados, aquí se pueden establecer varios con espacio en blanco.
  proxy_intercept_errors on;  # Si el servidor proxy devuelve un código de estado,400 o mayor400, se activa la configuración de error_page configurada. Por defecto es off.
  proxy_headers_hash_max_size 1024; #el límite superior de la capacidad de la tabla de hash de solicitud HTTP para almacenar. Por defecto es512caracteres.
  proxy_headers_hash_bucket_size 128; #el tamaño de la tabla de hash de solicitud HTTP que solicita el servidor nginx para almacenar. Por defecto es64caracteres.
  proxy_next_upstream timeout; #en el grupo de servidores upstream de proxy, cuando el servidor proxy devuelve el valor de estado cuando ocurre un fallo. error|timeout|invalid_header|http_500|http_502|http_503|http_504|http_404|off
  #proxy_ssl_session_reuse on; por defecto es on, si encontramos “SSL3cuando se produce la situación de “_GET_FINSHED: digest check failed”, se puede establecer esta instrucción en off.

Detalles de equilibrio de carga de Nginx

en el artículo anterior mencioné qué algoritmos de equilibrio de carga tiene nginx. En este capítulo, les explico en detalle si la configuración de equilibrio de carga está operativa.

Primero, les explico el configuración de upstream, esta configuración es escribir un grupo de direcciones de servidores que se van a proxy, luego configurar el algoritmo de equilibrio de carga. Aquí las direcciones de los servidores que se van a proxy son2escribir.

upstream mysvr { 
   server 192.168.10.121:3333;
   server 192.168.10.122:3333;
  }
 server {
    ....
    location ~*^.+$ {     
      proxy_pass http://mysvr; #redirige las solicitudes a la lista de servidores definida por mysvr     
    } 
upstream mysvr { 
   server http://192.168.10.121:3333;
   server http://192.168.10.122:3333;
  }
 server {
    ....
    location ~*^.+$ {     
      proxy_pass mysvr; #redirige las solicitudes a la lista de servidores definida por mysvr     
    } 

luego, aquí hay algo de práctica.

1、reserva caliente: si tienes2servidores, cuando un servidor sufre un fallo, se activa el segundo servidor para proporcionar el servicio. La secuencia de procesamiento de solicitudes del servidor es: AAAAAAsuddenlyAseha caído, BBBBBBBBBBBBBB.....

upstream mysvr { 
   server 127.0.0.1:7878; 
   server 192.168.10.121:3333 backup; #reserva caliente   
  }

2、roundrobin: nginx por defecto es roundrobin, sus ponderaciones por defecto son1,la secuencia de procesamiento de solicitudes del servidor es: ABABABABAB....

upstream mysvr { 
   server 127.0.0.1:7878;
   server 192.168.10.121:3333;    
  }

3、roundrobin: se distribuyen diferentes cantidades de solicitudes a diferentes servidores según el tamaño de las ponderaciones configuradas. Si no se configura, se utiliza el valor predeterminado1。La secuencia de solicitudes del servidor es: ABBABBABBABBABB....

 upstream mysvr { 
   server 127.0.0.1:7878 weight=1;
   server 192.168.10.121:3333 weight=2;
}

4、ip_hash: nginx permite que las solicitudes de IP del mismo cliente se envíen al mismo servidor.

upstream mysvr { 
   server 127.0.0.1:7878; 
   server 192.168.10.121:3333;
   ip_hash;
  }

5、si tienes curiosidad por lo anterior4No entiendo muy bien este algoritmo de equilibrio, por favor, revise la imagen que publiqué en mi artículo anterior, puede que sea más fácil de entender.

¿Te sientes ahora que la configuración de equilibrio de carga de nginx es especialmente simple y poderosa? Entonces, no ha terminado, sigamos, aquí vamos a deslizarnos.

Explicación de varios parámetros de estado de configuración de equilibrio de carga de nginx.

  • down, indica que el servidor actual no participa en el equilibrio de carga.
  • backup, máquina de respaldo reservada. Solo se solicita a la máquina de respaldo cuando todas las otras máquinas no de respaldo fallan o están ocupadas, por lo que esta máquina tiene la menor presión.
  • max_fails, el número permitido de fallos de solicitud, por defecto es1. Cuando se supera el número máximo, se devuelve el error definido por el módulo proxy_next_upstream.
  • fail_timeout, el tiempo de inactividad del servicio después de que se han producido max_fails fallos. max_fails se puede usar junto con fail_timeout.
upstream mysvr { 
   server 127.0.0.1:7878 weight=2 max_fails=2 fail_timeout=2;
   server 192.168.10.121:3333 weight=1 max_fails=2 fail_timeout=1;  
  }

Aquí puede que se pueda decir que el algoritmo de equilibrio de carga integrado de nginx ya no tiene stock. Si quieres entender más profundamente el algoritmo de equilibrio de carga de nginx, puedes conocer algunos complementos que ofrece el sitio web oficial de nginx.

Eso es todo el contenido de este artículo, espero que haya ayudado a su aprendizaje y que todos apoyen a Tutorial de Gritos.

Declaración: el contenido de este artículo se ha obtenido de la red, pertenece al propietario original, el contenido se ha contribuido y subido por los usuarios de Internet de manera autónoma. Este sitio no posee los derechos de propiedad, no ha sido editado por humanos y no asume ninguna responsabilidad legal relacionada. Si encuentra contenido sospechoso de infracción de derechos de autor, por favor envíe un correo electrónico a: notice#oldtoolbag.com (al enviar un correo electrónico, por favor reemplace # con @) para denunciar, y proporcione evidencia relevante. Una vez confirmado, este sitio eliminará inmediatamente el contenido sospechoso de infracción.

Te gustará