uso y configuración de nginx

1. ¿Qué es nginx?

1. Definición de nginx : Nginx es un servicio HTTP y proxy inverso de alto rendimiento, así como un servicio IMAP/POP3/SMTP.

  1. Procesar solicitudes de respuesta rápidamente
  2. Altas conexiones concurrentes
  3. bajo consumo de memoria
  4. Tiene alta confiabilidad
  5. Alta escalabilidad
  6. Implementación en caliente

El diseño de separación del proceso de administración maestro y el proceso de trabajo permite que Nginx tenga una función de implementación en caliente. El archivo ejecutable de Nginx se puede actualizar bajo la premisa de un servicio ininterrumpido las 24 horas del día, los 7 días de la semana, y la configuración también se puede modificar sin detener el servicio. archivos, reemplazar archivos de registro y otras funciones

2. Capaz de procesar una gran cantidad de conexiones paralelas : Nginx puede admitir 50,000 conexiones paralelas en los resultados de las pruebas oficiales, pero en operaciones reales, puede admitir de 20,000 a 40,000 conexiones paralelas, por el contrario, el número de conexiones paralelas de Tomcat es solo de unos pocos cientos.

3.Comparado con Apache
Nginx fue escrito con el objetivo claro de superar el rendimiento del servidor web Apache.

  • Nginx proporciona archivos estáticos listos para usar, usa mucha menos memoria que Apache y puede manejar aproximadamente cuatro veces más solicitudes por segundo que Apache. El rendimiento con baja concurrencia es comparable al de Apache, a veces incluso menor, pero con alta concurrencia, Nginx puede mantener un bajo consumo de recursos y un alto rendimiento. También hay un diseño altamente modular y la redacción del módulo es simple y concisa.
  • El costo de esta ganancia de rendimiento es una flexibilidad reducida, como la capacidad de anular la configuración de acceso de todo el sistema por archivo (Apache usa archivos .htaccess para hacer esto, y Nginx no tiene dicha funcionalidad incorporada). Para agregar módulos de terceros a Nginx es necesario volver a compilar la aplicación desde el código fuente utilizando módulos vinculados estáticamente. Esto se superó parcialmente en la versión 1.9.11, que agregó carga dinámica de módulos. Sin embargo, los módulos aún deben compilarse al mismo tiempo que Nginx y no todos los módulos son compatibles con este sistema; algunos requieren el proceso de vinculación estática anterior.

4.Apache contra Nginx

Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquíInsertar descripción de la imagen aquí

5. Comparación de servidores web de uso común

Comparar elementos\servidor apache nginx Lighttpd
proxy proxy muy bien muy bien generalmente
Reescritor bien muy bien generalmente
Fcgi no es bueno bien muy bien
Implementación en caliente no apoyo apoyo no apoyo
Presión del sistema muy grande muy pequeña menor
estabilidad bien muy bien no es bueno
seguridad bien generalmente generalmente
Procesamiento de archivos estáticos generalmente muy bien bien
proxy inverso generalmente muy bien generalmente

2.módulo nginx

1. El diseño modular general es una característica importante de Nginx, e incluso la función principal del servidor http también es un módulo.

2. Los módulos de la versión anterior de Nginx son estáticos. Agregar y eliminar módulos requiere volver a compilar Nginx. 1.9.11 y las versiones más recientes ya admiten la carga dinámica de módulos.

3. Un diseño altamente modular es la base arquitectónica de Nginx. El servidor Nginx se descompone en múltiples módulos. Cada módulo es un módulo funcional y solo es responsable de sus propias funciones. Los módulos siguen estrictamente el principio de "alta cohesión y bajo acoplamiento". ". en principio

4. El diagrama del módulo es el siguiente:
Insertar descripción de la imagen aquí
5. Módulo principal : el módulo principal es un módulo esencial para el funcionamiento normal del servidor Nginx y proporciona funciones básicas como registro de errores, análisis de archivos de configuración, mecanismos controlados por eventos y procesos. gestión.

6. Módulo HTTP estándar : el módulo HTTP estándar proporciona funciones relacionadas con el análisis del protocolo HTTP, como: configuración de puerto, configuración de codificación de página web, configuración del encabezado de respuesta HTTP, etc.

7. Módulo HTTP opcional : El módulo HTTP opcional se utiliza principalmente para ampliar las funciones HTTP estándar, lo que permite a Nginx manejar algunos servicios especiales, como: transmisión multimedia Flash, análisis de solicitudes GeoIP, soporte SSL, etc.

8. Módulo de servicio de correo : el módulo de servicio de correo se utiliza principalmente para admitir el servicio de correo de Nginx, incluida la compatibilidad con el protocolo POP3, el protocolo IMAP y el protocolo SMTP.

9. Módulos de terceros : los módulos de terceros se utilizan para ampliar las aplicaciones del servidor Nginx y completar funciones definidas por el desarrollador, como: compatibilidad con Json, compatibilidad con Lua, etc.

Tres escenarios de aplicación nginx:

Nginx es un servidor HTTP y un servidor proxy inverso gratuito, de código abierto y de alto rendimiento; también es un servidor proxy IMAP, POP3 y SMTP; Nginx se puede utilizar como servidor HTTP para la publicación y el procesamiento de sitios web, y se puede utilizar Nginx como servidor proxy inverso Implementación del equilibrio de carga del proxy
Insertar descripción de la imagen aquí

1. Acerca de la agencia: en este momento, hay dos roles involucrados, uno es el rol de agente y el otro es el rol de destino. El proceso en el que el rol de agente accede al rol de destino para completar algunas tareas a través de este agente se llama agente. proceso de operación, como un monopolio en la vida Tienda ~ Un cliente compró un par de zapatos en una tienda adidas. Esta tienda es el agente, el rol de agente es el fabricante de adidas y el rol objetivo es el usuario.

2. Proxy de reenvío : "Actúa como un proxy para el cliente y realiza solicitudes en nombre del cliente". Es un servidor entre el cliente y el servidor de origen. Para obtener contenido del servidor de origen, el cliente envía un solicitud al proxy. Una solicitud especifica el destino (servidor original), y luego el proxy reenvía la solicitud al servidor original y devuelve el contenido obtenido al cliente. El cliente debe realizar algunas configuraciones especiales para usar el proxy de reenvío.

Regala una castaña:

En el entorno de red actual, si necesitamos acceder a ciertos sitios web extranjeros debido a necesidades técnicas, encontrará que no podemos acceder a ciertos sitios web extranjeros a través de un navegador. En este momento, todos pueden usar una operación FQ Para acceder, el método principal de FQ es encontrar un servidor proxy que pueda acceder a sitios web extranjeros, enviamos la solicitud al servidor proxy, y el servidor proxy accede al sitio web extranjero y luego nos pasa los datos a los que accedemos.

El modo de proxy anterior se llama proxy de reenvío. La característica más importante del proxy de reenvío es que el cliente tiene muy clara la dirección del servidor al que desea acceder; el servidor solo sabe de qué servidor proxy proviene la solicitud, pero no de qué cliente específico proviene. from; forward proxy El modo enmascara u oculta información real del cliente. Veamos un diagrama esquemático:
Insertar descripción de la imagen aquí
el cliente debe configurar un servidor proxy de reenvío, por supuesto, la premisa es conocer la dirección IP del servidor proxy de reenvío y el puerto del programa agente. Como se muestra en la imagen
Insertar descripción de la imagen aquí

3. Finalidad de la representación remitida:

  1. Acceda a recursos que antes eran inaccesibles, como Google
  2. Se puede almacenar en caché para acelerar el acceso a los recursos.
  3. Autorizar el acceso del cliente y autenticarse en línea
  4. El agente puede registrar registros de acceso de los usuarios (gestión del comportamiento en línea) y ocultar la información del usuario desde el exterior.

4. Proxy inverso : "Actúa como un proxy para el servidor y recibe solicitudes en nombre del servidor. Se utiliza principalmente en el caso de implementación distribuida de clústeres de servidores. El proxy inverso oculta la información del servidor.

Regala una castaña:

Por ejemplo, el número de visitantes que se conectan al sitio web a la misma hora todos los días se ha disparado. Un solo servidor está lejos de poder satisfacer el creciente deseo de compra de la gente. En este momento ha surgido un término familiar: implementación distribuida; Es decir, el problema de limitar el número de visitantes se resuelve implementando múltiples servidores; la mayoría de las funciones de un determinado sitio web también se implementan directamente usando Nginx como proxy inverso, y al encapsular Nginx y otros componentes, tiene un nombre elegante: Tengine, los niños interesados ​​pueden visitar el sitio web oficial de Tengine para ver información específica: http://tengine.taobao.org/

Entonces, ¿cómo implementa el proxy inverso las operaciones de clúster distribuido? Primero veamos el diagrama esquemático
Insertar descripción de la imagen aquí
1. A través del diagrama anterior, puede ver claramente que cuando varios clientes envían solicitudes al servidor, el servidor Nginx las distribuye al servidor después de recibirlas. Servidor de procesamiento de negocios back-end para procesar de acuerdo con ciertas reglas. En este momento, la fuente de la solicitud es clara, es decir, el cliente, pero no está claro qué servidor maneja la solicitud. Nginx desempeña el papel de Es un Función de proxy inverso
2. El cliente desconoce la existencia del proxy. El proxy inverso es transparente para el mundo exterior. Los visitantes no saben que están accediendo a un proxy porque el cliente puede acceder a él sin ninguna configuración.

5. El papel del proxy inverso:

  1. Para garantizar la seguridad de la red interna, el proxy inverso generalmente se usa como dirección de acceso a la red pública y el servidor web es la red interna.
  2. Equilibrio de carga, a través de servidor proxy inverso para optimizar la carga del sitio web

6. Escenario del proyecto: normalmente, cuando operamos un proyecto real, es probable que existan proxy directo y proxy inverso en un escenario de aplicación. La solicitud del cliente proxy proxy directo para acceder al servidor de destino, y el servidor de destino es un servidor de interés simple inverso. , proxy inverso para múltiples servidores de procesamiento de negocios reales, la topología específica es la siguiente
Insertar descripción de la imagen aquí

7. La diferencia entre los dos: aquí hay una imagen para ilustrar la diferencia entre proxy directo y proxy inverso, como se muestra en la figura.
Insertar descripción de la imagen aquí

  • En el proxy directo, el Proxy y el Cliente pertenecen a la misma LAN (en el cuadro de la imagen) y la información del cliente está oculta
  • En el proxy inverso, el Proxy y el Servidor pertenecen a la misma LAN (en el cuadro de la figura), lo que oculta la información del servidor.
  • De hecho, lo que hace Proxy en ambos proxy es enviar y recibir solicitudes y respuestas en nombre del servidor, sin embargo, desde un punto de vista estructural, la izquierda y la derecha se intercambian, por lo que el método de proxy que apareció más tarde se llama inverso. apoderado.

4. Instalación de nginx

Hay dos formas de instalar nginx en centos, una es yum install y la otra es compilación e instalación. Por supuesto, la primera forma es más simple, pero tiene ciertas deficiencias. Por ejemplo, necesitamos usar módulos específicos de terceros. ., en este momento es necesario utilizar la compilación y la instalación.

1.Instalar marca

yum -y install autoconf automake make

Insertar descripción de la imagen aquí

2.Instalar g++

yum -y install gcc gcc-c++

Insertar descripción de la imagen aquí

3. Instale bibliotecas dependientes de nginx

yum -y install wget pcre pcre-devel zlib zlib-devel openssl openssl-devel

Insertar descripción de la imagen aquí

4. Descargar nginx

wget http://nginx.org/download/nginx-1.24.0.tar.gz

Insertar descripción de la imagen aquí
5. Descomprimir

tar -zxvf nginx-1.24.0.tar.gz

Insertar descripción de la imagen aquí
6. Compile e instale (ingrese al directorio nginx)

./configure  --prefix=/root/nginx  # 编译源码,指定安装位置

Insertar descripción de la imagen aquí

make && make install

Insertar descripción de la imagen aquí

7. Configurar variables de entorno

  1. Editar archivo de perfil
vi /etc/profile
  1. Agregue la ubicación de nginx en la última línea
export PATH=$PATH:/root/nginx/sbin
  1. Actualizar variables de entorno
source /etc/profile

8. Apague el firewall

  1. Cerrado temporalmente
systemctl stop firewalld.service
  1. Cerrado permanentemente
systemctl disable firewalld.service

5. Comandos comunes de Nginx

1. Empezar

#不指定启动配置文件,默认为NGINX_HOME/conf/nginx.conf
nginx

# 如果指定配置文件
nginx -c nginx.conf

2.Detener

nginx -s stop

3.Salir

nginx -s quit

4.Cerrar

# 查看nginx进程号
ps -aux | grep nginx

# 杀掉进程
kill -9 nginx

5. Vuelva a cargar el archivo de configuración.

nginx -s reload

6. Compruebe si el archivo de configuración es correcto.

nginx -t -c /路径/nginx.conf

7. Ver el archivo de configuración.

nginx -T

8. Verifique la información de la versión de nginx.

nginx -v

6. Estructura del archivo de configuración

1. Estructura de archivos

1. El archivo de configuración de Nginx generalmente se encuentra en el directorio conf en el directorio de instalación de Nginx. Todo el archivo se compone de bloques. Cada bloque está representado por llaves "{}". Se pueden anidar otros niveles de bloque en el bloque, entre los cuales main La capa es el nivel más alto
2. El archivo de configuración de nginx tiene principalmente 4 partes, principal (configuración global), servidor (configuración del host), upstream (configuración del servidor ascendente, principalmente proxy inverso, configuración relacionada con el equilibrio de carga) y ubicación (coincidencias de URL). una ubicación específica) configuración), cada sección contiene varias instrucciones

  • La configuración de la sección Principal afecta la configuración de todas las demás secciones;
  • La parte del Servidor se utiliza principalmente para especificar el nombre de dominio, la IP y el puerto del host de la máquina virtual;
  • Las instrucciones ascendentes se utilizan para configurar una serie de servidores back-end, configurar el proxy inverso y equilibrar la carga de los servidores back-end;
  • La parte Ubicación se utiliza para hacer coincidir la ubicación de la página web (por ejemplo, con el directorio "/", "/images", etc.)

3. La relación entre ellos es que el servidor hereda el principal, la ubicación hereda el servidor y el nivel ascendente no heredará ni será heredado.

4. Entre estas cuatro partes, cada parte contiene varias instrucciones. Estas instrucciones incluyen principalmente instrucciones del módulo principal de Nginx, instrucciones del módulo de eventos e instrucciones del módulo central HTTP. Al mismo tiempo, cada parte también puede usar otras instrucciones del módulo HTTP, como como módulo Http SSL, módulo HttpGzip Static y módulo Http Addition, etc.

Insertar descripción de la imagen aquí
5. El archivo de configuración real de nginx puede ser el siguiente

########### 每个指令必须有分号结束。#################
#user administrator administrators;  #配置用户或者组,默认为nobody nobody。
#worker_processes 2;  #允许生成的进程数,默认为1
#pid /nginx/pid/nginx.pid;   #指定nginx进程运行文件存放地址
error_log log/error.log debug;  #制定日志路径,级别。这个设置可以放入全局块,http块,server块,级别以此为:debug|info|notice|warn|error|crit|alert|emerg
events {
    
    
    accept_mutex on;   #设置网路连接序列化,防止惊群现象发生,默认为on
    multi_accept on;  #设置一个进程是否同时接受多个网络连接,默认为off
    #use epoll;      #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
    worker_connections  1024;    #最大连接数,默认为512
}
http {
    
    
    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;  #连接超时时间,默认为65s,可以在http,server,location块。

    upstream mysvr {
    
       
      server 127.0.0.1:7878;
      server 192.168.10.121:3333 backup;  #热备
    }
    error_page 404 https://www.baidu.com; #错误页
    server {
    
    
        keepalive_requests 120; #单连接请求上限次数。
        listen       4545;   #监听端口
        server_name  127.0.0.1;   #监听地址       
        location  ~*^.+$ {
    
           #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
           #root path;  #根目录
           #index vv.txt;  #设置默认页
           proxy_pass  http://mysvr;  #请求转向mysvr 定义的服务器列表
           deny 127.0.0.1;  #拒绝的ip
           allow 172.18.5.54; #允许的ip           
        }
        # 第一个程序,hellow world
        location /sayhello {
    
    
            default_type text/html;
            return 200 "nginx hello world";
        }
    }
}

2. Configuración global

user nobody nobody;
worker_processes 2;
error_log logs/error.log notice;
pid logs/nginx.pid;
 
events{
    
    
    use epoll;
    worker_connections 65536;
}

1.usuario: comando del módulo principal, especifica el usuario y el grupo de usuarios para ejecutar el proceso de Nginx Worker. De forma predeterminada, lo ejecuta la cuenta de nadie.

Usuario es un comando del módulo principal que especifica el usuario y el grupo de usuarios para ejecutar el proceso de Nginx Worker. De forma predeterminada, lo ejecuta la cuenta de nadie.
Insertar descripción de la imagen aquí

2.worker_processes: el comando del módulo principal especifica la cantidad de procesos que Nginx iniciará. Cada proceso de Nginx consume un promedio de 10 M ~ 12 M de memoria. Se recomienda especificar la misma cantidad que la cantidad de CPU.

Si work_processes 2 está configurado en este lugar, entonces habrá dos procesos de trabajo.
Insertar descripción de la imagen aquí

3.error_log: comando del módulo principal, utilizado para definir el archivo de registro de errores global. Los niveles de salida del registro incluyen depuración, información, aviso, advertencia, error y crítico. Entre ellos, el registro de salida de depuración es el más detallado y el crítico El registro de salida es el mínimo.

La ruta del archivo de registro generalmente se encuentra en el directorio de registros del directorio de instalación de nginx.
Insertar descripción de la imagen aquí

4.pid: instrucción del módulo principal, utilizada para especificar la ubicación del archivo de almacenamiento del proceso pid

El número de proceso es el mismo que el de nginx master. Solo existe cuando nginx se está ejecutando. Si nginx se detiene, el pid también se eliminará.
Insertar descripción de la imagen aquí

5. comando de evento de eventos: consiste en establecer el modo de trabajo de Nginx y el límite superior del número de conexiones.

3.comando de evento de eventos

El comando de eventos es para configurar el modo de trabajo de Nginx y el límite superior del número de conexiones.

1.uso: comando del módulo de eventos, utilizado para especificar el modo de trabajo de Nginx

Los modos de trabajo admitidos por Nginx incluyen select, poll, kqueue, epoll, rtsig y /dev/poll. Select y poll son modos de trabajo estándar. Kqueue y epoll son modos de trabajo eficientes. La diferencia es que epoll se usa en la plataforma Linux. ., y kqueue se usa en sistemas BSD. Para sistemas Linux, el modo de trabajo epoll es la primera opción.

2.worker_connections: directiva del módulo de eventos, utilizada para definir el número máximo de conexiones para cada proceso Nginx, el valor predeterminado es 1024

El número máximo de conexiones de cliente está determinado por trabajadores_procesos y trabajadores_conexiones, es decir, Max_client=worker_processes*worker_connections
​ Cuando actúa como un proxy inverso, max_clients se convierte en: max_clients = trabajador_procesos * trabajador_conexiones/4.
El número máximo de conexiones de un proceso está limitado por el número máximo de archivos abiertos del proceso del sistema Linux. La configuración de Workers_connections no puede tener efecto hasta que se ejecute el comando del sistema operativo "ulimit -n 65536".

4. Configuración del servidor HTTP

El código de configuración de Nginx para las propiedades relacionadas con el servidor HTTP es el siguiente:

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"';
    # 启动零拷贝提高性能
    sendfile        on;
    # 设置keepalive长连接超时时间
    keepalive_timeout  65;
    # 引入子配置文件
    include /nginx/conf/conf.d/*.conf;
}

1.incluir: la instrucción del módulo principal se utiliza para configurar los archivos incluidos en el archivo de configuración, lo que puede reducir la complejidad del archivo de configuración principal y dispersar las configuraciones específicas de otros módulos en diferentes carpetas.

2.default_type: pertenece a la directiva del módulo central HTTP. El tipo predeterminado aquí se establece en flujo binario, que se usa cuando el tipo de archivo no está definido. Por ejemplo, cuando el entorno PHP no está configurado, Nginx no lo analizará En este momento, acceda al archivo PHP con un navegador y aparecerá una ventana de descarga.

3.log_format: log_format es la instrucción del módulo HttpLog de Nginx, que se utiliza para especificar el formato de salida del registro de Nginx. main es el nombre de este formato de salida de registro, al que se puede hacer referencia en la instrucción access_log a continuación.

log_format main '$remote_addr - $remote_user [$time_local] '
'"$request" $status $bytes_sent '
'"$http_referer" "$http_user_agent" '
'"$gzip_ratio"';

log_format download '$remote_addr - $remote_user [$time_local] '
'"$request" $status $bytes_sent '
'"$http_referer" "$http_user_agent" '
'"$http_range" "$sent_http_content_range"';

Siete, host virtual Nginx

  1. El llamado host virtual en los servicios web es un sitio web independiente, que corresponde a un nombre de dominio independiente (también puede ser una IP o un puerto), tiene programas y recursos independientes y puede proporcionar de forma independiente servicios externos para que los usuarios accedan. .
  2. En Nginx, se utiliza una etiqueta de servidor {} para identificar un host virtual. Un servicio web puede tener múltiples pares de etiquetas de host virtual, es decir, puede admitir múltiples sitios de host virtual al mismo tiempo. Hay dos tipos de hosts virtuales: hosts virtuales basados ​​en nombres de dominio y hosts virtuales basados ​​en IP+puerto.

1. Preparación

1. Primero inicialice el siguiente directorio de prueba.

mkdir -p /root/nginx/html/{
    
    andy01,andy02}/

Insertar descripción de la imagen aquí
2. Cree un archivo de índice

Cree un archivo de índice en el directorio andy01

vi /root/nginx/html/andy01/index.html
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>andy01</title>
  <head>
  <body>
      <H1>
          Andy01   --->   这是Andy01测试文件
      </H1>
  </body>
</html>

Cree un archivo de índice en el directorio andy02

vi /root/nginx/html/andy02/index.html
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>andy01</title>
  <head>
  <body>
      <H1>
          Andy02   --->   这是Andy02测试文件
      </H1>
  </body>
</html>

2. Configurar el host virtual

1. Cree la carpeta conf.d en el directorio conf del directorio de instalación de nginx y guarde nuestra propia configuración de nginx.

mkdir -p /root/nginx/conf/conf.d

Insertar descripción de la imagen aquí
2. Modifique el archivo de configuración de nginx y agregue el siguiente contenido

  1. Ingrese el archivo nginx.conf
vi /root/nginx/conf/nginx.conf
  1. Agregar contenido
# 在http模块末尾添加配置,引入我们自己写的所有配置文件
include conf.d/*.conf; 

3. Cree el archivo de configuración hostserver.conf en la carpeta conf.d con el siguiente contenido:
1. Edite el archivo conf.d

vi hostserver.conf

2.Agregue el siguiente contenido

server {
    
    
    listen       80;
    charset utf-8;
    server_name  www.andy01.com;
    location /{
    
    
        root html/andy01;
        index  index.html index.htm;
        expires  7d;
    }
}

server {
    
    
    listen      80 ;
    charset utf-8;
    server_name  www.andy02.com;
    location /{
    
    
        root html/andy02;
        index  index.html index.htm;
        expires  7d;
    }
}

4. Configurar el host local

192.168.44.116 www.andy01.com
192.168.44.116 www.andy02.com

5. Prueba de acceso
1. Visite www.andy01.com
Insertar descripción de la imagen aquí
2. Visite www.andy02.com
Insertar descripción de la imagen aquí
6. Si ocurre el siguiente error
Insertar descripción de la imagen aquí
, modifique el archivo nginx.conf
Insertar descripción de la imagen aquí
7. Orden de coincidencia del host virtual

  • Máxima prioridad: coincidencia exacta
  • Segunda prioridad: comodín primero
  • Tercera prioridad: último comodín

3.Coincidencia de host predeterminada

La función del host virtual predeterminado es: si hay varios nombres de dominio accedidos que apuntan a este servidor web, pero no se agrega un nombre de dominio al host virtual nginx, se accederá al host virtual predeterminado (pan-analytics)

server {
    
    
    # 将域名www.andy02.com 设置为默认虚拟主机
    listen       80 default;
    charset utf-8;
    server_name  www.andy02.com;
    location /{
    
    
        root html/andy02;
        index  index.html index.htm;
        expires  7d;
    }
}

Insertar descripción de la imagen aquí
Prueba: 192.168.44.136
Insertar descripción de la imagen aquí

8. El papel de la ubicación

Ubicación significa "posicionamiento". Se realizan diferentes procesamientos de acuerdo con las diferentes solicitudes de URL. En el host virtual (servidor), la configuración de la ubicación es esencial y diferentes partes del sitio web se pueden ubicar mediante diferentes métodos de procesamiento.

1. reglas de ubicación

1. Regla de ubicación: la sección de ubicación coincide con el URI solicitado por el cliente especificando el patrón. Permite hacer coincidir cada ubicación definida en función del URI solicitado por el usuario. Cuando coincide, la solicitud será procesada por la configuración en el bloque de configuración de ubicación correspondiente, como control de acceso y otras funciones.

2. gramática

location [修饰符] pattern {…}

3. Descripción de modificadores de uso común.

Modificador Función
nulo La coincidencia de prefijos puede coincidir con los URI con el prefijo de la ruta que debe coincidir.
= coincidencia exacta
~ Coincidencia de patrones de expresión regular, distingue entre mayúsculas y minúsculas
~* Coincidencia de patrones de expresión regular, sin distinción entre mayúsculas y minúsculas
^~ La coincidencia exacta de prefijos, similar al comportamiento sin modificadores, también comienza con el módulo especificado, la diferencia es que si el patrón coincide, deja de buscar otros patrones y no admite expresiones regulares.
/ Coincidencia universal, cualquier solicitud será coincidente.

2. Preparativos

1. Configurar el host local

192.168.44.136 www.andy.com

2. Agregue un nuevo archivo de configuración location.conf al directorio conf/con.d en el directorio de instalación de ngxin.

touch location.conf

3. Coincidencia de prefijos

Sin modificador significa que debe comenzar con el patrón especificado. No hay ningún modificador delante del patrón especificado. Escriba el uri que debe coincidir directamente después de la ubicación. Su prioridad es segunda después de la coincidencia regular.

server {
    
    
    listen       80;
    server_name www.location.com;
    charset   utf-8;
    location /abc {
    
    
        default_type text/html;
         return 200 "前缀匹配-abc...";
    }
}

Entonces el siguiente contenido se puede combinar correctamente:

  • www.andy.com/abc
  • www.andy.com/abc/
  • www.andy.com/abc?..

4. Coincidencia exacta

La coincidencia exacta usa = para indicar que cuando nginx realiza una coincidencia de ruta, la coincidencia exacta tiene la máxima prioridad. Una vez que la solicitud coincide con precisión, nginx dejará de buscar otros elementos coincidentes.

server {
    
    
    listen       80;
    server_name www.andy.com;
    charset   utf-8;
    location = /abc {
    
    
        default_type text/html;
        return 200 "精确匹配-abc-accurate";
    }
}

1. Entonces el siguiente contenido se puede combinar correctamente:

  • www.andy.com/abc
  • www.andy.com/abc?..

2, el siguiente contenido no se puede igualar

  • www.andy.com/abc/
  • www.andy.com/abc/def

5. Coincidencia exacta de prefijos

La prioridad de la coincidencia de prefijo exacto es superada solo por la coincidencia exacta. Una vez que nginx coincide con éxito el prefijo exacto de una solicitud, deja de buscar otros elementos coincidentes.

server {
    
    
    listen       80;
    server_name www.andy.com;
    charset   utf-8;
    location ^~ /abc {
    
    
        default_type text/html;
        return 200 "精确前缀匹配-abc-prefix";
    }
}

Entonces el siguiente contenido se puede combinar correctamente

  • www.andy.com/abc
  • www.andy.com/abc/
  • www.andy.com/abc?..

6. Expresiones regulares

La coincidencia regular se divide en dos tipos: distingue entre mayúsculas y minúsculas y no distingue entre mayúsculas y minúsculas, representadas por ~ y ~* respectivamente; después de que falla una solicitud de coincidencia exacta y de prefijo exacto, si se configura una ubicación de coincidencia regular relevante, nginx intentará hacer la solicitud Realice coincidencias periódicas. Cabe señalar que no existe prioridad entre las coincidencias regulares, sino que se coinciden en el orden en que aparecen en el archivo de configuración, una vez que coincida con el anterior, la búsqueda se detendrá y continuará.

1. Distingue entre mayúsculas y minúsculas

~: Indica que la expresión regular especificada distingue entre mayúsculas y minúsculas, como por ejemplo:

server {
    
    
    listen       80;
    server_name www.andy.com;
    charset   utf-8;
    location ~ ^/abc$ {
    
    
        default_type text/html;
        return 200 "正则区分大小写-abc-regular-x";
    }
}

Entonces el siguiente contenido se puede combinar correctamente:

  • www.andy.com/abc
  • www.andy.com/abc?.…

Lo siguiente no coincidirá:

  • www.andy.com/abc/
  • www.andy.com/ABC
  • www.andy.com/abcde

2. No distingue entre mayúsculas y minúsculas

~*: Indica que la expresión regular especificada no distingue entre mayúsculas y minúsculas, como por ejemplo:

server {
    
    
    listen       80;
    server_name www.andy.com;
    charset   utf-8;
    location ~* ^/abc$ {
    
    
         default_type text/html;
         return 200 "正则不区分大小写-abc-regular-Y";
    }
}

Entonces lo siguiente coincidirá correctamente:

  • www.ubicación.com/abc
  • www.ubicación.com/abc?.…
  • El siguiente contenido de www.location.com/ABC
    no se puede igualar:
  • www.ubicación.com/abc/
  • www.ubicación.com/abcde

7. Coincidencia universal

La coincidencia universal está representada por / y puede coincidir con todas las solicitudes. Generalmente, habrá una regla de coincidencia universal al final del archivo de configuración de nginx. Cuando otras reglas de coincidencia no son válidas, la solicitud se enrutará a la regla de coincidencia universal para su procesamiento. ; si la coincidencia universal no está configurada y otras Cuando todas las reglas de coincidencia fallan, nginx devolverá un error 404

server {
    
    
    listen       80;
    server_name www.andy.com;
    charset   utf-8;
    location /{
    
    
        default_type text/html;
        return 200 "通用匹配-default";
    }
}

8. Comparación de prioridades

server {
    
    
    listen       80;
    server_name www.andy.com;
    charset   utf-8;
    default_type text/html;
    location = /abc {
    
    
        return 200 "精确匹配-abc";
    }
    location ^~ /abc {
    
    
        return 200 "精确前缀匹配-abc";
    }
    location ~ ^/abc$ {
    
    
        return 200 "正则匹配-abc";
    }
    location /abc {
    
     
        return 200 "前缀匹配-abc";
    }
    location /{
    
    
        return 200 "通用匹配-default";
    }
}

andy /abc y andy ^~ /abc coinciden con aquellos que comienzan con /abc. Si existen al mismo tiempo, se informará un error.

9. Ejemplo completo

server {
    
    
    listen       80;
    server_name www.andy.com;
    default_type text/html;
    charset   utf-8;
    location = / {
    
    
        return 200 "规则A";
    }
    location = /login {
    
    
        return 200 "规则B";
    }
    location ^~ /static/ {
    
    
        return 200 "规则C";
    }
    location ^~ /static/files {
    
    
        return 200 "规则X";
    }
    location ~ \.(gif|jpg|png|js|css)$ {
    
    
        return 200 "规则D";
    }
    location ~* \.js$ {
    
    
        return 200 "规则E";
    }
    location /img {
    
    
        return 200 "规则Y";
    }
    location / {
    
    
        return 200 "规则F";
    }
}
solicitud-uri Reglas de enrutamiento de coincidencias
http://www.andy.com/ Regla A
http://www.andy.com/login Regla B
http://www.andy.com/register Regla F
http://www.andy.com/static/a.html Regla C
http://www.andy.com/static/files/a.txt ReglaX
http://www.andy.com/a.png Regla D
http://www.andy.com/a.PNG Regla F
http://www.andy.com/img/a.gif Regla D
http://www.andy.com/img/a.tiff Regla Y

10. Orden coincidente

Insertar descripción de la imagen aquí
1. Orden de coincidencia y prioridad, de mayor a menor:

  • Las coincidencias exactas con "=" tienen prioridad
  • expresión regular
  • coincidencia exacta sin modificadores

2. Las reglas específicas de casación son las siguientes:

  • = Cuando llegue una coincidencia precisa, detenga la acción de ubicación y vaya directamente a una coincidencia precisa.
  • Cuando se alcanza una coincidencia general (incluida la coincidencia de prefijo exacto), primero se recopilan todas las coincidencias comunes y, finalmente, se compara la más larga.
  • Si la coincidencia ordinaria más larga se declara como una coincidencia de prefijo exacto, esta coincidencia se realizará directamente y se detendrá la ubicación.
  • Si la coincidencia ordinaria más larga no es una coincidencia de prefijo exacta, continúe con la ubicación habitual.
  • Ejecute la coincidencia regular en el orden del código y detenga la ubicación cuando se llegue a la primera ubicación normal.

Nota: Cuando aparecen varias expresiones regulares, siga el orden en que están definidas en el archivo de configuración.

11.proceso de coincidencia de rutas

Insertar descripción de la imagen aquí
Suponiendo que la ruta de solicitud http es http://192.168.0.132:8088/mvc/index?id=2, el proceso de coincidencia es el siguiente:

  • Desensamble la URL completa en nombre de dominio/puerto/ruta/parámetros
  • Primero, asigne el nombre de dominio/puerto al host virtual del servidor de destino.
  • La parte de la ruta participa en la coincidencia de ubicación, ruta = parte coincidente de la ruta1 + parte restante de la ruta2
  • Ingrese al proceso interno del cuerpo del método de ubicación.
  • Si se trata de un procesamiento de archivos estáticos, ingrese el directorio de destino para buscar el archivo: cuando use el comando raíz, busque el archivo correspondiente a la ruta1 + ruta2; cuando use el comando alias, busque el archivo correspondiente a la ruta2.
  • Si es un proxy, cuando tiene el formato proxy_pass=ip:puerto, reenvía la ruta ruta1+ruta2 a Tomcat; cuando tiene el formato proxy_pass=ip:puerto/xxx, reenvía la ruta ruta2. a Tomcat, y los parámetros siempre siguen al reenvío.

12. Sugerencias prácticas de uso

Por lo tanto, en el uso real, personalmente creo que hay al menos tres definiciones de reglas coincidentes, de la siguiente manera:

#直接匹配网站根,通过域名访问网站首页比较频繁,使用这个会加速处理,官网如是说。
#这里是直接转发给后端应用服务器了,也可以是一个静态首页
# 第一个必选规则
location = / {
    
    
    proxy_pass http://tomcat:8080/index
}
# 第二个必选规则是处理静态文件请求,这是nginx作为http服务器的强项
# 有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用
location ^~ /static/ {
    
    
    alias /webroot/static/;
}

location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ {
    
    
    root /webroot/res/;
}
# 第三个规则就是通用规则,用来转发动态请求到后端应用服务器
# 非静态文件请求就默认是动态请求,自己根据实际把握
# 毕竟目前的一些框架的流行,带.php,.jsp后缀的情况很少了
location / {
    
    
    proxy_pass http://tomcat:8080/
}

9.Proxy inverso de Nginx

1. Agregue andy_test.conf al directorio conf/conf.d en el directorio de instalación de nginx

touch  andy_test.conf

2. Configurar el host local

192.168.44.136 www.andy_test.com

3. Edite el archivo andy_test.conf y agregue el siguiente contenido

server {
    
    
    listen 80;
    server_name www.andy_test.com;
    default_type text/html;
    charset   utf-8;
    location /{
    
    
        proxy_pass http://192.168.44.136:8081;
    }                                                                                                 
}  

10. Equilibrio de carga de Nginx

1.Configuración básica

El equilibrio de carga se utiliza para seleccionar un servidor de la lista de servidores backend definida por el módulo "upstream" para aceptar solicitudes de los usuarios. Un módulo upstream más básico es así. El servidor en el módulo es la lista de servidores:

#动态服务器组
upstream dynamicserver {
    
    
    server 192.168.44.136:8081; #tomcat 1
    server 192.168.44.136:8082; #tomcat 2
    server 192.168.44.136:8083; #tomcat 3
}

Una vez completada la configuración del módulo ascendente, debe revertir el acceso especificado a la lista de servidores mediante proxy:

#其他页面反向代理到tomcat容器
location /{
    
    
    proxy_pass http://dynamicserver;
}

Esta es la instancia de equilibrio de carga más básica, pero no es suficiente para satisfacer las necesidades reales; actualmente el módulo ascendente del servidor Nginx admite 6 métodos de distribución. La configuración completa es la siguiente

upstream dynamicserver {
    
    
    server 192.168.44.136:8081; #tomcat 1
    server 192.168.44.136:8082; #tomcat 2
    server 192.168.44.136:8083; #tomcat 3
}
server {
    
    
    server_name www.andy_test.com;
    default_type text/html;
    charset   utf-8;
    location /{
    
    
        proxy_pass http://dynamicserver;
    }
}

2.parámetros comunes ascendentes

Descripción de parámetros

servidor Dirección de servicio inversa más puerto
peso Pesos
tiempo de espera_fallo Se utiliza junto con max_fails.
max_fails Establezca el número máximo de fallas dentro del tiempo establecido por el parámetro fail_timeout. Si todas las solicitudes al servidor fallan dentro de este tiempo, se considerará que el servidor está inactivo.
max_conns Número máximo de conexiones permitidas
tiempo_fallo El período de tiempo que el servidor se considerará inactivo; el valor predeterminado es 10 segundos
respaldo Marque este servidor como servidor de respaldo al que se enviarán las solicitudes cuando se detenga el servidor principal.
abajo El servidor de etiquetas está inactivo permanentemente
comienzo lento Cuando el nodo vuelva a funcionar, no se una inmediatamente

3.负载均衡策略

在这里,只详细说明Nginx自带的负载均衡策略,第三方不多描述

负载策略 描述
轮询 默认方式
weight 权重方式
ip_hash 依据ip分配方式
least_conn 最少连接方式
fair(第三方) 响应时间方式
url_hash(第三方) 依据URL分配方式

1.轮询:最基本的配置方法,上面的例子就是轮询的方式,它是upstream模块默认的负载均衡默认策略,每个请求会按时间顺序逐一分配到不同的后端服务器

#动态服务器组
upstream dynamicserver {
    
    
    server 192.168.44.136:8081; #tomcat 1
    server 192.168.44.136:8082; #tomcat 2
    server 192.168.44.136:8083; #tomcat 3
}

注意:

  • 在轮询中,如果服务器down掉了,会自动剔除该服务器
  • 缺省配置就是轮询策略
  • 此策略适合服务器配置相当,无状态且短平快的服务使用

配置示例:

upstream dynamicserver {
    
    
    server 192.168.44.136:8081; #tomcat 1
    server 192.168.44.136:8082; #tomcat 2
    server 192.168.44.136:8083; #tomcat 3
}

server {
    
    
    server_name www.andy_test.com;
    default_type text/html;
    charset   utf-8;
    location /{
    
    
        proxy_pass http://dynamicserver;
    }
}

2.weight:权重方式,在轮询策略的基础上指定轮询的几率

#动态服务器组
upstream dynamicserver {
    
    
    server 192.168.44.136:8081  weight=2;#tomcat 1
    server 192.168.44.136:8082;          #tomcat 2
    server 192.168.44.136:8083;          #tomcat 3
}

weight参数用于指定轮询几率,weight的默认值为1,;weight的数值与访问比率成正比,比如Tomcat 7.0被访问的几率为其他服务器的两倍

注意:

  • 权重越高分配到需要处理的请求越多。
  • 此策略比较适合服务器的硬件配置差别比较大的情况

3.ip_hash:指定负载均衡器按照基于客户端IP的分配方式,这个方法确保了相同的客户端的请求一直发送到相同的服务器,以保证session会话,这样每个访客都固定访问一个后端服务器,可以解决session不能跨服务器的问题

upstream dynamicserver {
    
    
    #保证每个访客固定访问一个后端服务器
    ip_hash;  
    server 192.168.44.136:8081;#tomcat 1
    server 192.168.44.136:8082;#tomcat 2
    server 192.168.44.136:8083;#tomcat 3  
}

注意:

  • 在nginx版本1.3.1之前,不能在ip_hash中使用权重(weight)
  • ip_hash不能与backup同时使用
  • 此策略适合有状态服务,比如session
  • 当有服务器需要剔除,必须手动down掉

4,least_conn:把请求转发给连接数较少的后端服务器,轮询算法是把请求平均的转发给各个后端,使它们的负载大致相同;但是,有些请求占用的时间很长,会导致其所在的后端负载较高,这种情况下,least_conn这种方式就可以达到更好的负载均衡效果

upstream dynamicserver {
    
    
    #把请求转发给连接数较少的后端服务器
    least_conn;  
    server 192.168.44.136:8081;#tomcat 1
    server 192.168.44.136:8082;#tomcat 2
    server 192.168.44.136:8083;#tomcat 3
}

注意:此负载均衡策略适合请求处理时间长短不一造成服务器过载的情况

3.负载均衡重试策略

基础失败重试:为了方便理解,使用了以下配置进行分析(proxy_next_upstream 没有特殊配置

upstream dynamicserver {
    
    
    server 192.168.44.136:8081 fail_timeout=60s max_fails=3;
    server 192.168.44.136:8082 fail_timeout=60s max_fails=3;
    server 192.168.44.136:8083 fail_timeout=60s max_fails=3;
}

配置说明:max_fails=3 fail_timeout=60s代表在60秒内请求某一应用失败3次,认为该应用宕机,后等待60秒,这期间内不会再把新请求发送到宕机应用,而是直接发到正常的那一台,时间到后再有请求进来继续尝试连接宕机应用且仅尝试1次,如果还是失败,则继续等待60秒…以此循环,直到恢复

模拟异常:模拟后端异常的方式是直接将对应服务关闭,造成 connect refused 的情况,对应 error 错误

最初始阶段,所有服务器都正常,请求会按照轮询方式依次转发给 AB 两个 Server 处理。假设这时 A 节点服务崩溃,端口不通,则会出现这种情况:

  • 请求 1 转到 A 异常,再重试到 B 正常处理,A fails +1
  • 请求 2 转到 B 正常处理
  • 请求 3 转到 A 异常,再重试到 B 正常处理,A fails +1 达到 max_fails 将被屏蔽 60s
  • 屏蔽 A 的期间请求都只转给 B 处理,直到屏蔽到期后将 A 恢复重新加入存活列表,再按照这个逻辑执行

如果在 A 的屏蔽期还没结束时,B 节点的服务也崩溃,端口不通,则会出现:

  1. 请求 1 转到 B 异常,此时所有线上节点异常,会出现:
    • AB 节点一次性恢复,都重新加入存活列表
    • 请求转到 A 处理异常,再转到 B 处理异常
    • 触发 no live upstreams 报错,返回 502 错误
    • 所有节点再次一次性恢复,加入存活列表
  2. 请求 2 依次经过 AB 均无法正常处理, 触发 no live upstreams 报错,返回 502 错误

错误重试:有时候我们系统出现500等异常的情况下,希望nginx能够到其他的服务器进行重试,我们可以配置那些错误码才进行重试

配置说明:在nginx的配置文件中,proxy_next_upstream项定义了什么情况下进行重试,官网文档中给出的说明如下

Syntax: proxy_next_upstream error | timeout | invalid_header | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | off ...;
Default:    proxy_next_upstream error timeout;
Context:    http, server, location

默认情况下,当请求服务器发生错误或超时时(error timeout),会尝试到下一台服务器,还有一些其他的配置项如下

错误状态 描述
error 与服务器建立连接,向其传递请求或读取响应头时发生错误;
timeout 在与服务器建立连接,向其传递请求或读取响应头时发生超时;
invalid_header 服务器返回空的或无效的响应;
http_500 服务器返回代码为500的响应;
http_502 服务器返回代码为502的响应;
http_503 服务器返回代码为503的响应;
http_504 服务器返回代码504的响应;
http_403 服务器返回代码为403的响应;
http_404 服务器返回代码为404的响应;
http_429 服务器返回代码为429的响应(1.11.13);
non_idempotent 通常,请求与 非幂等 方法(POST,LOCK,PATCH)不传递到请求是否已被发送到上游服务器(1.9.13)的下一个服务器; 启用此选项显式允许重试此类请求;
off 禁用将请求传递给下一个服务器

这里面我们配置了500等错误的时候会进行重试:

upstream dynamicserver {
    
    
    server 192.168.44.136:8081 fail_timeout=60s max_fails=3; #tomcat 1
    server 192.168.44.136:8082 fail_timeout=60s max_fails=3; #tomcat 2
}

server {
    
    
        server_name www.andy_test.com;
        default_type text/html;
        charset   utf-8;
        location/{
    
    
            proxy_pass http://dynamicserver;
            #下一节点重试的错误状态
            proxy_next_upstream error timeout http_500 http_502 http_503 http_504;
       }
}

模拟异常:在正常的情况下如果500错误会直接出现异常页面,现在我们加入了以上500重试策略,重试错误的流程和上面流程是一样的

限制重试方式:默认配置是没有做重试机制进行限制的,也就是会尽可能去重试直至失败,Nginx 提供了以下两个参数来控制重试次数以及重试超时时间

  1. proxy_next_upstream_tries:设置重试次数,默认 0 表示无限制,该参数包含所有请求 upstream server 的次数,包括第一次后之后所有重试之和
  2. proxy_next_upstream_timeout:设置重试最大超时时间,默认 0 表示不限制,该参数指的是第一次连接时间加上后续重试连接时间,不包含连接上节点之后的处理时间

配置说明:

upstream dynamicserver {
    
    
      server 192.168.44.136:9001 fail_timeout=60s max_fails=3; #Server A
      server 192.168.44.136:9002 fail_timeout=60s max_fails=3; #Server B
}

server {
    
    
        server_name www.andy_test.com;
        default_type text/html;
        charset   utf-8;
        location /{
    
    
            proxy_pass http://dynamicserver;
            # 连接超时时间是3s
            proxy_connect_timeout 3s;
            #表示在 6 秒内允许重试 3 次,只要超过其中任意一个设置,Nginx 会结束重试并返回客户端响应
            proxy_next_upstream_timeout 6s;
            proxy_next_upstream_tries 3;
       }
}

backup 服务器:Nginx 支持设置备用节点,当所有线上节点都异常时启用备用节点,同时备用节点也会影响到失败重试的逻辑,因此单独列出来介绍

backup 处理逻辑:upstream 的配置中,可以通过 backup 指令来定义备用服务器,其含义如下

  1. 正常情况下,请求不会转到到 backup 服务器,包括失败重试的场景
  2. 当所有正常节点全部不可用时,backup 服务器生效,开始处理请求
  3. 一旦有正常节点恢复,就使用已经恢复的正常节点
  4. backup 服务器生效期间,不会存在所有正常节点一次性恢复的逻辑
  5. 如果全部 backup 服务器也异常,则会将所有节点一次性恢复,加入存活列表
  6. 如果全部节点(包括 backup)都异常了,则 Nginx 返回 502 错误

配置说明:

upstream dynamicserver {
    
    
  server 192.168.44.136:8081; #Service A
  server 192.168.44.136:8082; #Server B
  server 192.168.44.136:8083 backup; #backup
}

server {
    
    
        server_name www.andy_test.com;
        default_type text/html;
        charset   utf-8;
        location /{
    
    
            proxy_pass http://dynamicserver;
       }
}

在最初始阶段,所有服务器都正常,请求会按照轮询方式依次转发给 AB 两个节点处理,当只有 A 异常的情况下,与上文没有 backup 服务器场景处理方式一致,这里就不重复介绍了

假设在 A 的屏蔽期还没结束时,B 节点的服务也崩溃,端口不通,则会出现:

  1. 请求 1 转到 B 处理,异常,此时所有线上节点异常,会出现
    • AB 节点一次性恢复,都重新加入存活列表
    • 请求转到 A 处理异常,再重试到 B 处理异常,两者 fails 都 +1
    • 因 AB 都异常,启用 backup 节点正常处理,并且 AB 节点一次性恢复,加入存活列表
  2. 请求 2 再依次经过 A、B 节点异常,转到 backup 处理,两者 fails 都达到 max_fails:
    • AB 节点都将会被屏蔽 60s,并且不会一次性恢复
    • backup 节点正式生效,接下来所有请求直接转到 backup 处理
    • 直到 AB 节点的屏蔽到期后,重新加入存活列表

假设 AB 的屏蔽期都还没结束时,C 节点的服务也崩溃,端口不通,则会出现

  1. 请求 1 转到 C 异常,此时所有节点(包括 backup)都异常,会出现
    • ABC 三个节点一次性恢复,加入存活列表
    • 请求转到 A 处理异常,重试到 B 处理异常,最后重试到 C 处理异常
    • 触发 no live upstreams 报错,返回 502 错误
    • 所有节点再次一次性恢复,加入存活列表
  2. 请求 2 依次经过 AB 节点异常,重试到 C 异常,最终结果如上个步骤,返回 502 错误

十一.Nginx 常用案例

1. Archivos proxy estáticos:

server {
    
    
    listen       10086;
    server_name  www.andy_test.com;
    location / {
    
    
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;
        proxy_redirect off;
    }

    location /data/ {
    
    
         #这里是重点,就是代理这个文件夹
        alias '/usr/local/data/'; 
        expires    7d;
    }
}

Acceda a http://localhost:10086/data/. Los siguientes recursos son los recursos para acceder a la carpeta /usr/local/data.

2. Proxy inverso

server {
    
    
    listen       80;
    server_name  www.adny_test.com;;
    location / {
    
    
        proxy_pass http://127.0.0.1:8080;
        index  index.html index.htm .jsp;
    }
}

3. Configuración entre dominios

server {
    
    
        listen       80;
        server_name  www.andy_test.com;

    if ( $host ~ (.*).andy_test.com){
    
    
        set $domain $1;##记录二级域名值
    }
    #是否允许请求带有验证信息
    add_header Access-Control-Allow-Credentials true;
    #允许跨域访问的域名,可以是一个域的列表,也可以是通配符*
    add_header Access-Control-Allow-Origin  *;
    #允许脚本访问的返回头
    add_header Access-Control-Allow-Headers 'x-requested-with,content-type,Cache-Control,Pragma,Date,x-timestamp';
    #允许使用的请求方法,以逗号隔开
    add_header Access-Control-Allow-Methods 'POST,GET,OPTIONS,PUT,DELETE';
    #允许自定义的头部,以逗号隔开,大小写不敏感
    add_header Access-Control-Expose-Headers 'WWW-Authenticate,Server-Authorization';
    #P3P支持跨域cookie操作
    add_header P3P 'policyref="/w3c/p3p.xml", CP="NOI DSP PSAa OUR BUS IND ONL UNI COM NAV INT LOC"';
    if ($request_method = 'OPTIONS') {
    
    ##OPTIONS类的请求,是跨域先验请求
            return 204;##204代表ok
     }
}

Supongo que te gusta

Origin blog.csdn.net/weixin_44702984/article/details/131164119
Recomendado
Clasificación