Preguntas frecuentes de la entrevista de Nginx





1. ¿Qué es Nginx y cuáles son sus ventajas?

Nginx, es un servidor web y un servidor proxy inverso para los protocolos HTTP, HTTPS, SMTP, POP3 e IMAP.

Las funciones principales son las siguientes:

1. Proxy inverso y directo
2. Equilibrio de carga, descarga
3. Host virtual (host de enlace)

ventaja:

Multiplataforma, configuración simple, sin bloqueo, alta conexión concurrente, bajo consumo de memoria, bajo costo.


2. ¿Cuál es la diferencia entre proxy directo y proxy inverso?

Inserte la descripción de la imagen aquí
Proxy de reenvío

El proxy de reenvío es un servidor ubicado entre el cliente y el servidor de origen. Para obtener contenido del servidor de origen, el cliente envía una solicitud al proxy y especifica el servidor de origen, y luego el proxy reenvía la solicitud al servidor de origen. y devuelve el contenido obtenido al final del cliente. El servidor proxy y el cliente están en la misma LAN.


Por ejemplo, software fanqiang. Sabía que quería visitar Google, así que le dije al servidor proxy que me lo enviara.

Proxy inverso

El funcionamiento real del proxy inverso es que el servidor proxy acepta solicitudes de conexión en la red. Reenvía la solicitud al servidor de la red interna y devuelve el resultado del servidor al cliente que solicita la conexión a la red. El servidor proxy y el servidor original están en la misma red de área local.


Por ejemplo, si quiero visitar Taobao, no sé si las imágenes, json, css se devuelven desde el mismo servidor, pero no me importa, es un procesamiento de proxy inverso, no sé el original servidor.


3. ¿Cómo maneja Nginx las solicitudes HTTP?

Combina un mecanismo multiproceso (un solo hilo) y un método asíncrono sin bloqueo.

1. Mecanismo multiproceso (un solo hilo)

Siempre que el servidor recibe un cliente, el proceso maestro del servidor (proceso maestro) genera un proceso hijo (proceso trabajador) para establecer una conexión con el cliente para interactuar, hasta que se desconecta la conexión, el proceso hijo finaliza.

2. Mecanismo de no bloqueo asincrónico

Cada proceso de trabajo utiliza el modo sin bloqueo asíncrono, que puede manejar múltiples solicitudes de clientes. Se utiliza el modelo epoll, se proporciona una cola y se resuelve la cola.


Cuando un proceso de trabajo recibe la solicitud del cliente, llama a IO para su procesamiento. Si el resultado no se puede obtener de inmediato, procesa otras solicitudes (es decir, sin bloqueo); y el cliente no necesita esperar una respuesta durante este período. y puede procesar otras cosas (es decir, asincrónicas).


Cuando el IO regrese, se notificará al proceso del trabajador; el proceso es notificado y suspende temporalmente la transacción actual para responder a la solicitud del cliente.

¿Por qué es tan rápido? Puede consultar la introducción oficial de Nginx: http://www.aosabook.org/en/nginx.html


4. ¿Cómo funcionan el maestro y el trabajador de Nginx?

Esto está relacionado con el multiproceso y el hilo único de Nginx. (Un proceso tiene solo un hilo principal).

¿Por qué utilizar un solo hilo?

El hilo único se utiliza para procesar solicitudes de forma asíncrona y sin bloqueo (los administradores pueden configurar la cantidad de procesos de trabajo del proceso principal de Nginx), sin asignar recursos de CPU y memoria para cada solicitud, ahorrando muchos recursos y reduciendo mucho contexto de CPU Cambio, para que Nginx admita una mayor simultaneidad.

Proceso simple:

Después de que se inicia el proceso maestro del programa principal, este recibe y procesa señales externas a través de un bucle for; el


proceso principal genera subprocesos de trabajo a través de la función fork (), y cada subproceso ejecuta un bucle for para realizar la recepción y procesamiento de eventos por parte del Servidor Nginx.

Proceso detallado:

1. Después de que se inicie Nginx, habrá un proceso maestro y múltiples procesos de trabajo independientes.


2. El maestro recibe señales del mundo exterior, primero establece el socket (listenfd) que necesita escuchar, y luego bifurca múltiples procesos de trabajo y luego envía señales a cada proceso de trabajo.Cada proceso puede manejar la conexión.


3. El listenfd de todos los procesos de trabajo será legible cuando llegue una nueva conexión. Para garantizar que solo un proceso maneje la conexión, todos los procesos de trabajo se adelantan a accept_mutex antes de registrar los eventos de lectura de listenfd, y el proceso que toma el bloqueo de mutex registra el evento de lectura listenfd , llame a aceptar en el evento de lectura para aceptar la conexión.


4. Cuando un proceso de trabajo acepta la conexión, comienza a leer la solicitud, analizar la solicitud, procesar la solicitud, generar datos y luego devolverlos al cliente y finalmente desconectarse.


5. ¿Cuáles son los comandos más utilizados en Nginx?

启动             nginx
停止             nginx -s stop 或 nginx -s quit
重启             nginx -s reload 或 service nginx reload
重载指定配置文件  .nginx -c /usr/local/nginx/conf/nginx.conf
查看 nginx 版本  nginx -v

6. ¿Cuál es la diferencia entre 500, 502, 503 y 504 en nginx?

500 :

Error interno del servidor Error interno del servicio, como error de secuencia de comandos, error de sintaxis del lenguaje de programación.

502 :

Error de puerta de enlace incorrecta, puerta de enlace incorrecta. Por ejemplo, el servidor tiene actualmente demasiadas conexiones, la respuesta es demasiado lenta, el material de la página es demasiado y el ancho de banda es lento.

503 :

Servicio temporalmente no disponible, el servicio no está disponible, el servidor web no puede manejar solicitudes HTTP, puede estar sobrecargado temporalmente o el servidor no está disponible por mantenimiento.

504 :

Tiempo de espera de puerta de enlace Tiempo de espera de puerta de enlace, el tiempo de ejecución del programa es demasiado largo para provocar el tiempo de espera de respuesta, por ejemplo, el programa debe ejecutarse durante 20 segundos y el tiempo de espera de respuesta máximo de nginx es de 10 segundos, por lo que habrá un tiempo de espera.


7. ¿Entiende la compresión Nginx y cómo habilitarla?

Después de habilitar la compresión gzip de nginx, se reducirá el tamaño de los recursos estáticos como imágenes, css, js, etc., lo que puede ahorrar ancho de banda y mejorar la eficiencia de transmisión, pero consumirá recursos de la CPU.

gzip on;  
#开启gzip压缩功能
gzip_min_length 1k;
#设置允许压缩的页面最小字节数,页面字节数从header头的content-length中获取。默认值是0,不管页面多大都进行压缩。建议设置成大于1k。如果小于1k可能会越压越大。
gzip_buffers 4 16k;
#压缩缓冲区大小。表示申请4个单位为16k的内容作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储gzip压缩结果。
gzip_http_version 1.0;
#压缩版本(默认1.1,前端为squid2.5时使用1.0)用于设置识别http协议版本,默认是1.1,目前大部分浏览器已经支持gzip解压,使用默认即可。
gzip_comp_level 2;
#压缩比率。用来指定gzip压缩比,1压缩比量小,处理速度快;9压缩比量大,传输速度快,但处理最慢,也必将消耗cpu资源。
gzip_types text/plain application/x-javascript text/css application/xml;
#用来指定压缩的类型,“text/html”类型总是会被压缩。
gzip_vary on;
#vary header支持。该选项可以让前端的缓存服务器缓存经过gzip压缩的页面,例如用squid缓存经过nginx压缩的数据。

Nota: Objetos que necesitan y no necesitan ser comprimidos
(1) Archivos de texto sin formato html, js, css, xml, html que son mayores de 1k.
(2) No comprima imágenes, videos, etc., porque no solo lo harán no se reducirá, pero se consumirá durante la compresión de recursos de memoria y CPU.


8. La diferencia entre Nginx y Apache y Tomcat

La diferencia entre Tomcat y Nginx / Apache:

1. Nginx / Apache es un servidor web y Apache Tomact es un contenedor de servlets

2. Tomcat puede analizar jsp, nginx y apache son solo servidores web, que pueden entenderse simplemente como que solo brindan servicios de archivos estáticos html.

La diferencia entre Nginx y Apache:

1) Nginx es liviano, que también sirve como servicio web y ocupa menos memoria y recursos que Apache.

2) Nginx es anti-concurrencia, nginx procesa solicitudes de forma asincrónica y sin bloqueo, mientras que apache está bloqueando. Bajo alta concurrencia, nginx puede mantener bajos recursos, bajo consumo y alto rendimiento.

3) Nginx proporciona equilibrio de carga, que se puede utilizar como proxy inverso y servidor front-end

4) Hilo único multiproceso Nginx, sin bloqueo asíncrono; Sincronización multiproceso de Apache, bloqueo.


9. ¿Qué estrategias de equilibrio de carga tiene Nginx?

Estrategias de equilibrio de carga proporcionadas por Nginx de forma predeterminada:

1. Sondeo (predeterminado) round_robin

Cada solicitud se asigna a diferentes servidores back-end uno por uno en orden cronológico. Si el servidor back-end está inactivo, se puede eliminar automáticamente.

2. IP hash ip_hash

Cada solicitud se asigna de acuerdo con el resultado hash de la ip de acceso, de modo que cada visitante tenga acceso fijo a un servidor back-end, que puede resolver el problema de compartir sesiones.
Por supuesto, en escenarios reales, generalmente no considere usar ip_hash para resolver el uso compartido de sesiones.

3. Conecta al menos menos_conn

La siguiente solicitud se enviará al servidor con el menor número de conexiones activas.

4. peso

Cuanto mayor sea el valor del peso, mayor será la probabilidad de acceso asignada. Se utiliza principalmente para lograr una utilización razonable de los recursos cuando el rendimiento de cada servidor back-end es desigual. También se pueden apoyar otras estrategias a través de complementos.


10. ¿Nginx ha realizado la separación de recursos dinámicos y estáticos? ¿Por qué quieres hacerlo?

La separación de recursos dinámicos y recursos estáticos es permitir que las páginas web dinámicas en sitios web dinámicos distingan los recursos constantes de los recursos en constante cambio de acuerdo con ciertas reglas.

Por ejemplo, js, css, hrml se devuelven desde el servidor A. La imagen se devuelve desde el servidor B y otras solicitudes se devuelven desde el servidor Tomcat C.

Las aplicaciones en segundo plano se implementan por separado para mejorar la velocidad de acceso de los usuarios al código estático. Y ahora hay servicios CDN, no es necesario limitar el ancho de banda del servidor.


11. ¿Entiende el módulo ngx_http_upstream_module?

El módulo ngx_http_upstream_module se utiliza para definir varios servidores en grupos de servidores, a los que se puede hacer referencia mediante instrucciones de entrega fastcgi, entrega proxy, entrega uwsgi, entrega memcached y entrega scgi.

Por ejemplo, visite www.a.com cache + scheduling:

http{
    
    
    proxy_cache_path /var/cache/nginx/proxy_cache levels=1:2:2 keys_zone=proxycache:20m inactive=120s max_size=1g; # 缓存
    upstream mysqlsrvs{
    
    
        ip_hash;                        # 源地址hash调度方法 写了backup就不可用
        server 172.18.99.1:80 weight=2; # weight权重
        server 172.18.99.2:80;          # 标记down,配合ip_hash使用,实现灰度发布
        server 172.18.99.3:80 backup;   # backup将服务器标记为“备用”,即所有服务器均不可用时才启用 
    }
}
server{
    
    
    server_name www.a.com;
    proxy_cache proxycache;
    proxy_cache_key $request_uri;
    proxy_cache_valid 200 302 301 1h;
    proxy_cache_valid any 1m;
    location / {
    
    
        proxy_pass http://mysqlsrvs;
    }
}

12. ¿Entiende la limitación actual y cómo es la limitación actual?

Nginx proporciona dos métodos de limitación de corriente, uno es controlar la tasa y el otro es controlar el número de conexiones simultáneas.

1. Tasa de control

Artículo de referencia .

El módulo ngx_http_limit_req_module proporciona un algoritmo de depósito con fugas, que puede limitar la frecuencia de procesamiento de una sola solicitud de IP.

1.1 Límite de corriente normal:

基于客户端192.168.1.1进行限流,
定义了一个大小为10M,名称为myLimit的内存区,用于存储IP地址访问信息。
rate设置IP访问频率,rate=5r/s表示每秒只能处理每个IP地址的5个请求。
http {
    
    
	limit_req_zone 192.168.1.1 zone=myLimit:10m rate=5r/s;
}

server {
    
    
	location / {
    
    
		limit_req zone=myLimit;
		rewrite / http://www.hac.cn permanent;
	}
}

Explicación de parámetros:

limit_req_zone: Defina los objetos que deben restringirse.
zone: Defina una zona de memoria compartida para almacenar información de acceso.
tasa: se utiliza para establecer la tasa de acceso máxima.

El límite actual de Nginx se basa en la unidad de milisegundos, lo que significa que procesar 5 solicitudes en 1 segundo se convertirá en solo procesar una solicitud cada 200 ms. Si se procesó una solicitud en 200 ms, pero llega una nueva, Nginx se negará a procesar la solicitud.

1.2 El tráfico en ráfagas limita la frecuencia de acceso

La tasa anterior se establece en 5r / s. Si a veces el tráfico aumenta repentinamente, la solicitud que exceda el límite será rechazada y se devolverá un 503. El tráfico repentino afectará al negocio. En este momento, se puede agregar el parámetro de ráfaga y generalmente se usa junto con nodelay.

server {
    
    
	location / {
    
    
		limit_req zone=myLimit burst=20 nodelay;
		rewrite / http://www.hac.cn permanent;
	}
}

burst = 20 nodelay significa que estas 20 solicitudes se procesan inmediatamente y no se pueden retrasar, lo que equivale a un trabajo especial. Sin embargo, incluso si estas 20 solicitudes repentinas se procesan de inmediato, las solicitudes posteriores no se procesarán de inmediato.

Burst = 20 equivale a 20 pits en la cola de caché. Incluso si se procesa la solicitud, estas 20 posiciones solo se pueden liberar en 100 ms.


2, los
artículos de referencia de conexiones concurrentes de control .
Artículo 2 de referencia .

ngx_http_limit_conn_module proporciona la función de limitar el número de conexiones.

limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn_zone $server_name zone=perserver:10m; 

server {
    
      
    listen       80;
    server_name  localhost;
    charset utf-8;
    location / {
    
    
        limit_conn perip 10;      # 单个客户端ip与服务器的连接数.
        limit_conn perserver 100; #限制与服务器的总连接数
        root   html;
        index  index.html index.htm;
    }
}

La clave de limit_conn perip 10 es $ binary_remote_addr, lo que significa que una sola IP puede contener hasta 10 conexiones al mismo tiempo.
La clave de limit_conn perserver 100 es $ server_name, que representa el número total de conexiones simultáneas que el host virtual (servidor) puede manejar al mismo tiempo.

Supongo que te gusta

Origin blog.csdn.net/QiuHaoqian/article/details/112257367
Recomendado
Clasificación