Nginx Xiaobai notas de entrada de nivel de niñera, ¡no perderé si las leo!

1. Conceptos básicos de Nginx

1.1 Introducción a Nginx

  1. Nginx es un servidor web proxy inverso y HTTP de alto rendimiento
  2. Se caracteriza por una menor ocupación de memoria y una fuerte capacidad de concurrencia.
  3. Nginx está especialmente desarrollado para la optimización del rendimiento, puede resistir la prueba de alta carga y los informes indican que puede admitir hasta 50,000 conexiones simultáneas



1.2 Conceptos relacionados

1.2.1 Proxy inverso

reenviar proxy

Configure un servidor proxy en el cliente (navegador) para acceder a Internet a través del servidor proxy.

proxy inverso

  1. Proxy inverso, de hecho, el cliente desconoce el proxy, porque el cliente puede acceder a él sin ninguna configuración, solo necesitamos enviar el servicio al servidor proxy inverso, y el servidor proxy inverso selecciona el servidor de destino para obtener los datos Luego, devuélvalo al cliente. En este momento, el servidor proxy inverso y el servidor de destino son un servidor para el mundo exterior, lo que expone la dirección del servidor proxy y oculta la dirección del servidor real.
  2. Comprensión simple: para el cliente, el servidor proxy inverso se considera a sí mismo como el servidor de destino. En cuanto a lo que voy a hacer, no le pregunte al cliente, simplemente no lo sabe.


1.2.2 Equilibrio de carga

Un solo servidor no lo soluciona, aumentamos el número de servidores, luego repartimos las solicitudes a cada servidor, y repartimos la carga a diferentes servidores, que es lo que llamamos balanceo de carga.



1.2.3 Separación dinámica y estática

Para acelerar la velocidad de análisis del sitio web, diferentes servidores pueden analizar páginas dinámicas y páginas estáticas para acelerar la velocidad de análisis. Reduzca la presión sobre el servidor único original.




2. Instalación de Nginx

  1. Descarga la versión 1.12.2 de Nginx desde el sitio web oficial

  2. Instalar materiales relacionados con Nginx:

    • Instale pcre: wget http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz ¡Puede arrastrar directamente desde Windows a Xshell!

      descomprimir

      Vaya al directorio descomprimido. Ejecutar ./configure (marcar)

      Ejecute el comando: hacer && hacer instalar

      Ver la versión: pcre-config --version

    • 安装zlib, oepnssl:yum -y install make zlib zlib-devel gcc-c++libtool openssl openssl-devel

  3. Instale Nginx: ¡Idem para instalar pcre!

  4. Después de que la instalación sea exitosa, habrá una carpeta adicional local/nginx en /usr, y habrá una secuencia de comandos de inicio en nginx/sbin

  5. Después del inicio, el firewall debe abrir el puerto 80 y luego acceder a 192.168.200.128:80




3. Comandos comunes de Nginx

Requisitos previos para usar los comandos de Nginx: Ingrese al directorio de Nginx: /usr/local/nginx/sbin

Comandos comunes

  1. Verifique el número de versión de nginx: ./nginx -v
  2. Inicie nginx: ./nginx
  3. Apagar nginx: ./nginx -s sop
  4. Recargar nginx: ./nginx -s recargar



4. Archivo de configuración de Nginx

Ubicación

/usr/local/nginx/conf/nginx.conf

composición

  1. El archivo de configuración de Nginx consta de tres partes:

    • Bloque global : el contenido desde el principio del archivo de configuración hasta el bloque de eventos establece principalmente algunas instrucciones de configuración que afectan el funcionamiento general del servidor nginx . Incluye principalmente la configuración del usuario (grupo) que ejecuta el servidor Nginx, la cantidad de procesos de trabajo que se pueden generar, la ruta de almacenamiento del PID del proceso, la ruta y el tipo de almacenamiento del registro y la introducción de archivos de configuración.

      worker_processes = 1
      // 这是Nginx服务器并发处理服务的关键配置,worker_processes值越大,可以支持的并发处理量也就越多,但是会受到硬件、软件设备的制约
      
    • bloque de eventos : las directivas involucradas afectan principalmente la conexión de red entre el servidor Nginx y el usuario.

      events {
          worker_connections 1024          // nginx服务器支持的最大连接数
      }
      
    • Bloque http : la parte configurada con más frecuencia del servidor Nginx. Las directivas de bloque global de Http incluyen la importación de archivos, la definición de MIME-TYPE, la personalización del registro, el tiempo de espera de la conexión y el número máximo de solicitudes por enlace. El bloque de servidor está relacionado con el host virtual, incluido el bloque de servidor global y el bloque de ubicación.




5. Ejemplo de configuración de Nginx

5.1 Preparación del proxy inverso

  1. ¡Instale e inicie Tomcat! ¡Puerto 8080!

  2. Habilite los puertos 80, 8080, 8081, 8082, 9001 para facilitar las pruebas posteriores

  3. proceso de acceso




5.2 Instancia de proxy inverso 1

Efecto

Ingrese www.123.com en la barra de direcciones del navegador y luego salte a la página de Tomcat.

Proceso

  1. Configure la relación correspondiente entre el nombre de dominio y la ip en el archivo de hosts del sistema de ventanas

    [La transferencia de la imagen del enlace externo falló, el sitio de origen puede tener un mecanismo anti-leech, se recomienda guardar la imagen y cargarla directamente (img-10fdI0YG-1617459962046) (E:\study notes\picture\image-20210324230132222.png )]

  2. Configuración de reenvío de solicitudes en nginx (configuración de proxy inverso)

  3. ¡Comienza la prueba nginx!




5.3 Instancia de proxy inverso 2

Efecto

Visite http://192.168.200.128:9001/edu/ y salte directamente a 127.0.0.1:8080

Visite http://192.168.200.128:9001/vod/ y salte directamente a 127.0.0.1:8081

Proceso

  1. Dos servidores tomcat, uno en el puerto 8080 y otro en el puerto 80801

  2. Cree carpetas y archivos de prueba: hay un proyecto edu en 8080tomcat, página a.html, hay una oración 8080, 8081tomcat tiene un proyecto vod, página a.html, hay una oración 8081

  3. Configuración de inicio:

    [Falló la transferencia de la imagen del enlace externo, el sitio de origen puede tener un mecanismo anti-leech, se recomienda guardar la imagen y cargarla directamente (img-8C1gJtmc-1617459962049) (E:\study notes\picture\image-20210325214023426.png) ]

    Número de puerto abierto para acceso externo:

  4. prueba




5.4 Instancia de equilibrio de carga

Efecto

Ingrese http://192.168.200.128:9001/edu/a.html en la barra de direcciones del navegador. El efecto de equilibrio de carga se promedia al puerto 8080 y al puerto 8081.

Preparar

  1. Dos servidores Tomcat, 5.3 está listo

  2. En el directorio de aplicaciones web de los dos Tomcats, cree una carpeta llamada edu y cree una página a.html en la carpeta edu para probar

  3. Configure el equilibrio de carga en el archivo de configuración de nginx (¡el primer ayuno rojo se establece en el bloque http!)

    Puede agregar peso = 1, 2 después de cada servidor en el myserver configurado para indicar el peso de la carga

  4. Nginx proporciona varios métodos de distribución:

    • Sondeo (predeterminado): cada solicitud se asigna al servidor backend en orden cronológico, si está inactivo, se eliminará automáticamente
    • peso: el peso representa el peso, el valor predeterminado es 1, cuanto mayor sea el peso, más asignado
    • ip_hash: cada solicitud se asigna de acuerdo con el hash de la ip, para que cada visitante pueda acceder a un servidor en el backend, lo que resuelve el problema de la sesión y lo agrega a la primera línea del servidor de bloque rojo
    • justo (tercero): se asigna de acuerdo con el tiempo de respuesta del servidor backend, y se le da prioridad al tiempo de respuesta corto. Agréguelo a la última línea del primer servidor de bloque rojo.



5.5 Ejemplos de separación dinámica y estática

Separación de la comprensión dinámica y estática.

  1. La separación dinámica y estática de Nginx es simplemente para separar solicitudes dinámicas y estáticas. No puede entenderse como simplemente separar físicamente páginas dinámicas y estáticas. Estrictamente hablando, las solicitudes dinámicas deben separarse de las solicitudes estáticas , lo que puede entenderse como el uso de Nginx para procesar páginas estáticas y Tomcat para procesar páginas dinámicas. Desde el punto de vista de la implementación actual, la separación de dinámico y estático se puede dividir aproximadamente en dos tipos. Uno es simplemente separar archivos estáticos en nombres de dominio separados y colocarlos en servidores separados. También es la solución principal actual para procesar archivos estáticos. paginas Otro método es mezclar y publicar archivos dinámicos y estáticos juntos y separarlos a través de nginx.

  2. Se pueden lograr diferentes reenvíos de solicitudes especificando diferentes nombres de sufijos por ubicación. Al configurar el parámetro expires, puede hacer que la memoria caché del navegador caduque, reduciendo la solicitud y el tráfico antes del servidor. La definición específica de Caduca: es establecer un tiempo de caducidad para un recurso, es decir, no necesita ir al servidor para su verificación, y puede confirmar directamente si caduca a través del navegador, por lo que no hay tráfico adicional. se generará. Este enfoque es ideal para los recursos que cambian con poca frecuencia. (Si el archivo se actualiza con frecuencia, no se recomienda usar Expires to cache), configuré 3d aquí, lo que significa que se accede a la URL dentro de estos 3 días, se envía una solicitud y la hora de la última actualización del archivo en el servidor no ha cambiado, no se cambiará desde el servidor. El servidor obtiene y devuelve el código de estado 304. Si hay alguna modificación, se descarga directamente del servidor y se devuelve el código de estado 200.

Listo para trabajar

Prepare algunos recursos estáticos en el sistema Linux: coloque una página html en www y una imagen en imagen

Colocación específica

  1. Configurar en el archivo de configuración de Nginx

  2. prueba:

    Ingrese http://192.168.200.128/image/01.jpg, configure autoindex on, solo acceda a la imagen y el directorio aparecerá en la lista

    Ingrese a http://192.168.200.128/www/a.html:




5.6 Instancias de alta disponibilidad

comprender la alta disponibilidad

Necesitamos tener esos dos servidores Nginx, keepAlive, direcciones IP virtuales

Listo para trabajar

  1. Dos servidores 192.168.200.128, 192.168.200.129
  2. Instalar nginx en ambos servidores
  3. Keepalived se instala en la carpeta usr en ambos servidores: yum install keepalived -y , una vez completada la instalación, se genera el directorio keepalived, etc. Hay un archivo keepalived.conf

Configuración de alta disponibilidad (configuración maestro-esclavo)

  1. Modifique etc/keepalived/keepalived.conf: maestro de host, es decir, 100, respaldo de esclavo, 90, todos tienen hosts virtuales

    ! Configuration File for keepalived
    
    global_defs {
       notification_email {
         [email protected]
         [email protected]
         [email protected]
       }
       notification_email_from [email protected]
       smtp_server 192.168.200.1
       smtp_connect_timeout 30
       router_id LVS_DEVEL
       vrrp_skip_check_adv_addr
       vrrp_strict
       vrrp_garp_interval 0
       vrrp_gna_interval 0
    }
    
    vrrp_script chk_http_port {
    	script "/usr/local/src/nginx_check.sh"
    
    	interval 2
    
    	weight 2
    }
    
    vrrp_instance VI_1 {
        state BACKUP
        interface ens33
        virtual_router_id 51
        priority 90
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.200.16
            192.168.200.17
            192.168.200.18
        }
    }
    
    virtual_server 192.168.200.100 443 {
        delay_loop 6
        lb_algo rr
        lb_kind NAT
        persistence_timeout 50
        protocol TCP
    
        real_server 192.168.201.100 443 {
            weight 1
            SSL_GET {
                url {
                  path /
                  digest ff20ad2481f97b1754ef3e12ecd3a9cc
                }
                url {
                  path /mrtg/
                  digest 9b3a0c85a887a256d6939da88aabd8cd
                }
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
            }
        }
    }
    
    virtual_server 10.10.10.2 1358 {
        delay_loop 6
        lb_algo rr 
        lb_kind NAT
        persistence_timeout 50
        protocol TCP
    
        sorry_server 192.168.200.200 1358
    
        real_server 192.168.200.2 1358 {
            weight 1
            HTTP_GET {
                url { 
                  path /testurl/test.jsp
                  digest 640205b7b0fc66c1ea91c463fac6334d
                }
                url { 
                  path /testurl2/test.jsp
                  digest 640205b7b0fc66c1ea91c463fac6334d
                }
                url { 
                  path /testurl3/test.jsp
                  digest 640205b7b0fc66c1ea91c463fac6334d
                }
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
            }
        }
    
        real_server 192.168.200.3 1358 {
            weight 1
            HTTP_GET {
                url { 
                  path /testurl/test.jsp
                  digest 640205b7b0fc66c1ea91c463fac6334c
                }
                url { 
                  path /testurl2/test.jsp
                  digest 640205b7b0fc66c1ea91c463fac6334c
                }
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
            }
        }
    }
    
    virtual_server 10.10.10.3 1358 {
        delay_loop 3
        lb_algo rr 
        lb_kind NAT
        persistence_timeout 50
        protocol TCP
    
        real_server 192.168.200.4 1358 {
            weight 1
            HTTP_GET {
                url { 
                  path /testurl/test.jsp
                  digest 640205b7b0fc66c1ea91c463fac6334d
                }
                url { 
                  path /testurl2/test.jsp
                  digest 640205b7b0fc66c1ea91c463fac6334d
                }
                url { 
                  path /testurl3/test.jsp
                  digest 640205b7b0fc66c1ea91c463fac6334d
                }
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
            }
        }
    
        real_server 192.168.200.5 1358 {
            weight 1
            HTTP_GET {
                url { 
                  path /testurl/test.jsp
                  digest 640205b7b0fc66c1ea91c463fac6334d
                }
                url { 
                  path /testurl2/test.jsp
                  digest 640205b7b0fc66c1ea91c463fac6334d
                }
                url { 
                  path /testurl3/test.jsp
                  digest 640205b7b0fc66c1ea91c463fac6334d
                }
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
            }
        }
    }
    
    
  2. Agregar secuencia de comandos de detección en /usr/local/src

    #!/bin/bash
    a=`ps -C nginx -no-header |wc -l`
    if [ $A -eq 0];then
    	/usr/local/nginx/sbin/nginx
    	sleep 2
    	if[  `ps -C nginx  --no-header |wc -l` -eq 0 ];then
    		killall keepalived
    	fi
    fi
    
  3. Inicie nginx y keepalived en ambos servidores: systemctl start keepalived.service

  4. Prueba: ingrese la dirección IP virtual en el archivo de configuración en el navegador: http://192.168.200.16/

  5. Prueba: detenga tanto nginx como keepalived del servidor principal (192.168.200.128), y luego mire el efecto: ¡todavía se puede acceder normalmente! (ip a puede ver el enlace de ip virtual)

Análisis de archivos de configuración

Archivo de script de detección:




6. Principio Nginx

Dos procesos (un maestro y múltiples trabajadores)

flujo de trabajo del trabajador

ventaja

  1. ¡La implementación en caliente se puede hacer con nginx -s reload!
  2. Cada trabajador es un proceso independiente, si hay un problema con uno de los trabajadores, los otros trabajadores son independientes y seguirán compitiendo para realizar el proceso de solicitud sin interrupción del servicio.
  3. ¿Cuántos trabajadores a poner es lo más adecuado? El número de trabajadores y el número de cpus son iguales es lo más adecuado

Número de conexiones conexiones_trabajador

  1. ¿Cuántas conexiones necesita un trabajador para enviar una solicitud?

    Si la solicitud es un servidor de recursos estáticos, ocupará 2 , y si la solicitud es un servidor de fondo como Tomcat, ocupará 4 .

  2. Hay un maestro y cuatro trabajadores en nginx. La cantidad máxima de conexiones admitidas por cada trabajador es 1024. ¿Cuál es la cantidad máxima de conexiones simultáneas admitidas ? Si la solicitud es para un servidor de recursos estáticos, admite una concurrencia de 1024*4/2 = 2048. Si la solicitud es para un servidor Tomcat, admite una concurrencia de 1024 x 4/4 = 1024

Supongo que te gusta

Origin blog.csdn.net/lyyrhf/article/details/115451771
Recomendado
Clasificación