Prólogo

Las funciones de proxy y equilibrio de carga de Nginx son las más utilizadas. Los conocimientos básicos de sintaxis y configuración de Nginx ya se han explicado enConfiguración detallada de Nginxse describe en. Este artículo va directo al grano: primero describe algunas configuraciones sobre la función de proxy y luego explica el equilibrio de carga en detalle.

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

1. Establecer la dirección de redirección de la página 404

error_page 404 https://www.runnob.com; #错误页
proxy_intercept_errors on;    #如果被代理服务器返回的状态码为400或者大于400,设置的error_page配置起作用。默认为off.

2. Si nuestro proxy solo permite aceptar uno de los métodos de solicitud get o post

proxy_method get;    #支持客户端的请求方法。post/get;

3. Establecer la versión del protocolo HTTP compatible

proxy_http_version 1.0 ; #Nginx服务器提供代理服务的http协议版本1.0,1.1,默认设置为1.0版本

4. Si tu servidor Nginx actúa como proxy para 2 servidores web y el algoritmo de equilibrio de carga usa round-robin, cuando una de tus máquinas tenga el programa web IIS cerrado, es decir, el sitio web no sea accesible, el servidor Nginx seguirá distribuyendo solicitudes a ese servidor web inaccesible. Si el tiempo de conexión de respuesta es demasiado largo, la página del cliente esperará la respuesta constantemente, y la experiencia del usuario se verá muy afectada. ¿Cómo evitar que esto suceda? Aquí incluyo una imagen para ilustrar el problema.

Si en el equilibrio de carga ocurre esta situación en web2, Nginx primero irá a web1 para solicitar, pero si Nginx no está configurado correctamente, continuará distribuyendo solicitudes a web2 y esperará la respuesta de web2. Solo cuando se agote el tiempo de respuesta, redistribuirá la solicitud a web1. Si el tiempo de respuesta es demasiado largo, el usuario esperará más tiempo.

La siguiente configuración es una de las soluciones.

proxy_connect_timeout 1;   #nginx服务器与被代理的服务器建立连接的超时时间,默认60秒
proxy_read_timeout 1; #nginx服务器想被代理服务器组发出read请求后,等待响应的超时间,默认为60秒。
proxy_send_timeout 1; #nginx服务器想被代理服务器组发出write请求后,等待响应的超时间,默认为60秒。
proxy_ignore_client_abort on;  #客户端断网时,nginx服务器是否终端对被代理服务器的请求。默认为off.

5. Si se usa la directiva `upstream` para configurar un grupo de servidores como servidores proxy de destino, el algoritmo de acceso entre los servidores sigue las reglas de equilibrio de carga configuradas. Al mismo tiempo, esta directiva se puede usar para configurar, en caso de qué condiciones anómalas, entregar la solicitud al siguiente grupo de servidores para su procesamiento.

proxy_next_upstream timeout;  #反向代理upstream中设置的服务器组,出现故障时,被代理服务器返回的状态值。

Los valores de estado pueden ser: error|timeout|invalid_header|http_500|http_502|http_503|http_504|http_404|off

  • error: se produce un error en el servidor al establecer la conexión, al enviar la solicitud al servidor proxy de destino o al leer la información de respuesta.
  • timeout: se produce un tiempo de espera en el servidor al establecer la conexión, enviar la solicitud al servidor proxy de destino o leer la información de respuesta.
  • invalid_header: el encabezado de respuesta devuelto por el servidor proxy de destino es anómalo.
  • off: no es posible distribuir la solicitud al servidor proxy de destino.
  • http_400, ....: el código de estado devuelto por el servidor proxy de destino es 400, 500, 502, etc.

6. Si deseas obtener la IP real del cliente a través de HTTP en lugar de la dirección IP del servidor proxy, debes realizar la siguiente configuración.

proxy_set_header Host $host; #只要用户在浏览器中访问的域名绑定了 VIP VIP 下面有RS;则就用$host ;host是访问URL中的域名和端口  www.taobao.com:80
proxy_set_header X-Real-IP $remote_addr;  #把源IP 【$remote_addr,建立HTTP连接header里面的信息】赋值给X-Real-IP;这样在代码中 $X-Real-IP来获取 源IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;#在nginx 作为代理服务器时,设置的IP列表,会把经过的机器ip,代理机器ip都记录下来,用 【,】隔开;代码中用 echo $x-forwarded-for |awk -F, '{print $1}' 来作为源IP

Puedes consultar algunos artículos relacionados sobre X-Forwarded-For y X-Real-IP:X-Forwarded-For en los encabezados de solicitud HTTP 。

7. A continuación se muestra parte de mi archivo de configuración sobre la configuración del proxy, solo como referencia.

include       mime.types;   #文件扩展名与文件类型映射表
default_type  application/octet-stream; #默认文件类型,默认为text/plain
#access_log off; #取消服务日志    
log_format myFormat ' $remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #自定义格式
access_log log/access.log myFormat;  #combined为日志格式的默认值
sendfile on;   #允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。
sendfile_max_chunk 100k;  #每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。
keepalive_timeout 65;  #连接超时时间,默认为75s,可以在http,server,location块。
proxy_connect_timeout 1;   #nginx服务器与被代理的服务器建立连接的超时时间,默认60秒
proxy_read_timeout 1; #nginx服务器想被代理服务器组发出read请求后,等待响应的超时间,默认为60秒。
proxy_send_timeout 1; #nginx服务器想被代理服务器组发出write请求后,等待响应的超时间,默认为60秒。
proxy_http_version 1.0 ; #Nginx服务器提供代理服务的http协议版本1.0,1.1,默认设置为1.0版本。
#proxy_method get;    #支持客户端的请求方法。post/get;
proxy_ignore_client_abort on;  #客户端断网时,nginx服务器是否终端对被代理服务器的请求。默认为off.
proxy_ignore_headers "Expires" "Set-Cookie";  #Nginx服务器不处理设置的http相应投中的头域,这里空格隔开可以设置多个。
proxy_intercept_errors on;    #如果被代理服务器返回的状态码为400或者大于400,设置的error_page配置起作用。默认为off.
proxy_headers_hash_max_size 1024; #存放http报文头的哈希表容量上限,默认为512个字符。
proxy_headers_hash_bucket_size 128; #nginx服务器申请存放http报文头的哈希表容量大小。默认为64个字符。
proxy_next_upstream timeout;  #反向代理upstream中设置的服务器组,出现故障时,被代理服务器返回的状态值。error|timeout|invalid_header|http_500|http_502|http_503|http_504|http_404|off
#proxy_ssl_session_reuse on; 默认为on,如果我们在错误日志中发现“SSL3_GET_FINSHED:digest check failed”的情况时,可以将该指令设置为off.

Explicación detallada del equilibrio de carga de Nginx

En el artículoConfiguración detallada de Nginxdije qué algoritmos de equilibrio de carga tiene Nginx. En esta sección explicaré en detalle cómo operar y configurar.

Primero les hablaré sobre la directiva `upstream`. Esta configuración consiste en escribir un grupo de direcciones de servidores proxy de destino y luego configurar el algoritmo de equilibrio de carga. Aquí hay dos formas de escribir las direcciones de los servidores proxy de destino.

upstream mysvr { 
    server 192.168.10.121:3333;
    server 192.168.10.122:3333;
}
server {
    ....
    location  ~*^.+$ {         
        proxy_pass  http://mysvr;  #请求转向mysvr 定义的服务器列表         
    }
}

Luego, vayamos a algo práctico.

1. Respaldo en caliente: si tienes 2 servidores, cuando uno tenga un problema, se activa el segundo servidor para brindar servicio. Orden en que el servidor procesa las solicitudes: AAAAAA, de repente A se cae, BBBBBBBBBBBBBB.....

upstream mysvr { 
    server 127.0.0.1:7878; 
    server 192.168.10.121:3333 backup;  #热备     
}

2. Round-robin: por defecto Nginx usa round-robin con pesos predeterminados de 1. Orden en que el servidor procesa las solicitudes: ABABABABAB....

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

3. Round-robin ponderado: distribuye diferentes cantidades de solicitudes a diferentes servidores según el peso configurado. Si no se configura, el valor predeterminado es 1. El orden de solicitudes del siguiente 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 hará que la misma IP de cliente solicite al mismo servidor.

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

5. Si no entiendes bien los 4 algoritmos de equilibrio anteriores, puedes consultarConfiguración detallada de Nginx, puede que sea más fácil de entender.

A estas alturas, ¿no sientes que la configuración del equilibrio de carga de Nginx es muy sencilla y potente? Pues aún no hemos terminado, continuemos. Aquí divagamos un poco.

Explicación de varios parámetros de estado en la configuración del equilibrio de carga de Nginx.

  • down: indica que el servidor actual no participa temporalmente en el equilibrio de carga.

  • backup: máquina de respaldo reservada. Solo cuando todas las demás máquinas que no son backup fallen o estén ocupadas, se enviarán solicitudes a la máquina backup, por lo que su presión es la más ligera.

  • max_fails: número de fallos de solicitud permitidos, el valor predeterminado es 1. Cuando se supera el número máximo, se devuelve el error definido por el módulo proxy_next_upstream.

  • fail_timeout: tiempo de pausa del servicio después de sufrir 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;    
}

Llegados a este punto, se puede decir que los algoritmos de equilibrio de carga integrados de Nginx ya no dan más de sí. Si deseas comprender más a fondo los algoritmos de equilibrio de carga de Nginx, el sitio oficial de Nginx ofrece algunos complementos que puedes consultar.

Dirección original: https://www.cnblogs.com/knowledgesea/p/5199046.html