el uso de Nginx de resumen (c)

el uso de Nginx de resumen (c)

Análisis Arquitectura Nginx

nginx estructura modular
módulo de Nginx involucrado en el módulo básico, estándar HTTP módulos, módulos opcionales de HTTP, el módulo de servicio de correo y módulos de terceros y otras cinco categorías.


Módulo Core
El módulo de núcleo es esencial para el servidor Nginx refiere a la operación normal del módulo, que proporciona el núcleo de los servicios básicos Nginx tales como la gestión de procesos, control de acceso, registro de errores y así sucesivamente.
La función principal incluye soporte para dos tipos, uno es las principales funciones, incluyendo la gestión de procesos, control de acceso, registro de error, el análisis sintáctico de configuración y así sucesivamente,
el otro es necesaria para responder a las características solicitud de evento, incluyendo mecanismo dirigido por eventos, la expresión regular descifrado y así sucesivamente.

Se compone de los siguientes módulos:

ngx_core_module
ngx_errlog_module
ngx_conf_module
ngx_regex_module
ngx_events_module
ngx_event_core_module
ngx_epoll_module

 

Estándar HTTP módulo

Estándar HTTP módulo es un módulo que contiene compilado Nginx, que soporta características estándar del servidor Nginx HTTP.

模块	                          功能
ngx_http_core	                配置端口,URI分析,服务器响应错误处理,别名控制以及其他HTTP核心事务
ngx_http_access_module	        基于IP地址的访问控制(允许/拒绝)
ngx_http_auth_basic_module      基于HTTP的身份认证
ngx_http_autoindex_module       处理以“/”结尾的请求并自动生成目录列表
ngx_http_browser_module	        解析HTTP请求头中的“User-Agent”域的值
ngx_http_charset_module	        指定网页编码
ngx_http_empty_gif_module       从内存创建一个1 x 1的透明gif图片,可以快速调用
ngx_http_fastcgi_module	        对FastCGI的支持
ngx_http_geo_module	            将客户端的IP转化为键值对变量,该模块主要用来针对客户的的IP来定义变量
ngx_http_gzip_module	        压缩请求响应,可以减少数据传输
ngx_http_headers_filter_module	设置HTTP响应头
ngx_http_index_module	        处理以“/”结尾的请求,如果没有找到该目录下的index页,就将请求转给ngx_http_autoindex_module模块处理
ngx_http_limit_req_module	    限制来自客户端的请求的响应和处理速率
ngx_http_limit_conn_module	    限制来自客户端的连接的响应和处理速率
ngx_http_log_module	            自定义access日志
ngx_http_map_module	            创建任意键值对变量
ngx_http_memcached_module	    对Memcached的支持
ngx_http_proxy_module	        支持代理事务
ngx_http_referer_module	        对HTTP头中的”referer”进行过滤处理,比如,实现防盗链功能
ngx_http_rewrite_module	        实现nginx的rewrite功能
ngx_http_scgi_module	        对SCGI的支持
ngx_http_upstream_module	    定义一组服务器,可以接收来自代理、Fastcgi、Memcached的中重定向,主要用于负载均衡

 

Opcional módulo HTTP

Alternativamente HTTP módulo se utiliza principalmente para extender la función estándar HTTP, es posible hacer frente a alguna petición HTTP especial. Al compilar Nginx, si no se especifica estos módulos, el valor por defecto no está instalado.

模块	                        功能
ngx_http_addition_module	  在响应请求的页面开始或者结尾添加文本信息
ngx_http_degradation_module	  在低内存的情形下允许Nginx服务器返回444错误或204错误
ngx_http_perl_module	      在Nginx的配置文件中可以使用Perl脚本
ngx_http_flv_module	          支持将Flash多媒体信息按照流文件传输,可以根据客户端指定的开始位置返回Flash
ngx_http_geoip_module	      支持解析基于GeoIP数据库的客户端请求
ngx_google_perflools_module	  支持Google Performance Tools的一套用于C++Profile的工具集
ngx_http_image_filter_module  支持将H.264/AAC编码的多媒体信息(后缀名通常为mp4、m4v或m4a)按照流文件传输,常与ngx_http_flv_module模块一起使用
ngx_http_random_index_module  Nginx接收到以“/”结尾的请求时,在对应的目录下随机选择一个文件作为index文件
ngx_http_secure_link_module	  支持对请求链接的有效性检查
ngx_http_ssl_module	          对HTTPS/SSL支持
ngx_http_stub_status_module	  支持返回Nginx服务器的统计信息,一般包括处理连接的数量、连接成功的数量、处理的请求数、读取和返回的Header信息数等信息
ngx_http_sub_module	          使用指定的字符串替换响应信息中的信息
ngx_http_dav_module	          支持HTTP协议和WebDAV协议中PUT、DELETE、MKCOL、COPY和MOVE方法
ngx_http_xslt_module	      将XML响应信息使用XSLT(拓展样式表转换语言)进行转换

 

módulo de servicio de correo
se utiliza principalmente para apoyar el servicio de correo Ningx.

módulos de terceros
no tienen Nginx oficial, sino por la organización de terceros o módulos individuales desarrollados para implementar una función en particular.
eco-nginx-módulo soporta el uso de eco, sueño, tiempo, y otros tipos de comandos shell en el archivo de configuración de Nginx ejecutivo,
lua-Nginx Nginx-módulo es compatible con el lenguaje de scripting Lua.

 

El mecanismo de solicitud web nginx


Sincronización mecanismo
síncrono, asíncrono se produce cuando el cliente envía una solicitud, el servidor procesa la petición del cliente.
mecanismo de sincronización, significa que el cliente envía una solicitud, es necesario esperar a que el servidor (kernel) después de la información de retorno, el siguiente y luego continuar a enviar una solicitud.
Un mecanismo de sincronización, sincroniza todas las solicitudes en el lado servidor, es decir, el emisor y el receptor para procesar la solicitud es ritmo constante.

mecanismo asíncrono
mecanismo asíncrono, significa que el cliente realiza una solicitud, sin esperar a que la información de retorno servidor (kernel), enviar una petición para continuar en la siguiente.
En el mecanismo asíncrono, todas las solicitudes del remitente que forman una cola, entonces el receptor notifica al remitente ha sido procesada.

Ejemplo: una recepción de hotel, durante los períodos pico de la temporada se llevará una gran parte del banquete de teléfono programado.
Si ese es el mecanismo de sincronización, la recepción después de cada toma una llamada telefónica a no colgar el teléfono, sino indagar si el banquete restante, encontró los resultados, decirle al cliente.
Si ese es el mecanismo asíncrono caso, cada uno conectado a una recepción de teléfono predeterminado responder directamente a los clientes, una respuesta, esta vez a la recepción para pedir información sobre este asunto entregado a otro colega,
después de la recepción colgó el teléfono, las cosas siguen para procesar otros clientes, cuando otro colega para consultar los resultados después de la notificación a la recepción y luego notificará al cliente.

Obstrucción
de bloqueo y sin bloqueo IO se produjo en la programación, tales como el kernel en el disco IO.
Bajo el modo de bloqueo, proceso / hilo antes de obtener el resultado final, el sistema cuelga, la llamada bloqueada en el proceso de bloquear el proceso no puede hacer nada,
hasta que los resultados finales de nuevo a él, que no se reanudó estado de ejecución .

Sin bloqueo
de no bloqueo y el bloqueo de lo contrario, el proceso / hilo antes de obtener el resultado final, y no entrar en un estado de suspensión, pero el proceso puede continuar a realizar nuevas tareas.
Cuando los resultados finales de nuevo al proceso, envía los resultados al cliente.

Ejemplo: el caso sigue siendo el teléfono programado banquete de recepción del hotel.
A continuación, el papel ya no es la recepción, pero sus colegas preguntar si el resto del banquete. Si se bloquea el camino, los compañeros restantes durante la consulta de si el banquete, la necesidad inocentemente
esperando a que regresara al resultado del sistema de gestión de hotel, durante este período no puede hacer otras cosas.
Si se trata de no bloqueo, el colega de espera para el sistema de gestión de hotel devuelve los resultados a él esta vez, puede hacer otras cosas, como el caso podrán comunicar a la recepción del banquete restante.

 

El mecanismo de solicitud de Nginx
Nginx razón para apoyar de alta concurrencia, porque Nginx utilizar el mecanismo asíncrono sin bloqueo, por Nginx es el modelo orientado a eventos para implementar un mecanismo de este tipo.

En el modelo orientado a eventos de Nginx, todas las peticiones iniciadas por el cliente en el servidor serán marcados como un evento, Nginx recogerá estos eventos "Recopilador de eventos" en el interior,
a continuación, poner estos eventos para el kernel de tratar.

 

nginx modelo orientado a eventos
modelo controlado por eventos es un medio para lograr asíncrono no bloqueante. modelo controlada por eventos, un proceso (hilo) en él.

Para el servidor web, la solicitud del cliente A al conectar con el servidor, un proceso (proceso de trabajo de Nginx) del servidor procesará la solicitud,
este proceso cuando no hay un final resultado se devuelve al cliente A, el cliente tratar con él B. terminal de solicitar
Servidor al cliente A y el cliente B peticiones enviadas al evento como "colector evento",
y "colector evento" después se recogió para el caso a la "evento remitente" a "controlador de eventos "para su procesamiento.
Después de los últimos controladores de eventos "" termina de procesar el evento, notificar al proceso de entrega legal servidor envía los resultados de vuelta al cliente A, el cliente B.

En este proceso, los procesos del servidor hacen pertenecen a nivel de usuario, y el manejo de esta parte de la obra evento pertenece al nivel del núcleo.
Es decir se requiere el modelo orientado a eventos como el soporte del kernel del sistema operativo.

nginx modelo orientado a eventos

Nginx es el modelo orientado a eventos, ayudas seleccionan, encuesta, epoll, rtsig, kqueue, / dev / encuesta, eventport y así sucesivamente.
El más comúnmente utilizados son los tres primeros, qué modelo kqueue utiliza para apoyar la plataforma de modelo orientado a eventos de la serie BSD. kqueue es una variante del modelo de encuesta, esencialmente el mismo que epoll.
/ Dev / encuesta es una plataforma Unix, modelo orientado a eventos, que es principalmente en Solaris7 y por encima de, HP / UX11.22 y por encima de, IRIX6.5.15 y por encima de,
la plataforma Tru64 Unix y 5.1A o posterior.
eventport se utiliza para apoyar Solaris10 y el modelo controlado por eventos anteriormente

 

seleccione el modelo

Linux y Windows son compatibles, seleccionar el modelo utilizando los pasos son:

1. Crear un evento de interés conjunto de descriptores para un descriptor, puede centrarse en su principal evento de lectura (Leer), escritura eventos (escritura), y eventos excepción (Excepción).
En algunos modelos, para crear tres tipos de eventos conjunto de descriptores.

2. Llame a la función select () es proporcionado por la parte inferior, a la espera de que se produzca el evento.

3. Polling describe todos los eventos para cada evento en el conjunto de descriptor carácter, comprueba si se produce un evento correspondiente, si no se va a procesar

 

modelo de encuesta

modelo de encuesta es el modelo orientado a eventos en la plataforma Linux, introducido en Linux2.1.23 en plataforma Windows no admite este modelo. Poll sustancialmente el mismo modelo y el modelo de seleccionar el modo de funcionamiento, excepto que, seleccionar el modelo de la creación de un conjunto de descriptores 3, pero sólo para crear una encuesta conjunto modelo de descriptores

 

modelo epoll

modelo epoll variantes pertenecen al modelo de encuesta, introducido en Linux2.5.44. epoll más eficiente que la encuesta, ya que no tiene que sondear todo el conjunto de descriptores, pero se centrará en el conjunto de eventos del núcleo de Linux, cuando hay cambio, el núcleo se enviará un aviso

 

nginx arquitectura de
servidor Nginx utilizando el modo multi-proceso maestro / trabajador.

El proceso principal (proceso de Maestro) después del inicio, recibir y procesar las señales externas;
después del proceso principal comienza a generar uno o varios proceso hijo (proceso de trabajo) por la función tenedor (), cada proceso hijo será inicializado, y la llamada al módulo de eventos recibir y procesar el trabajo.

 

Plato principal (proceso de Master)

La función principal de comunicaciones internas y externas y para gestionar otros procesos, específicamente los siguientes puntos:

* Archivo de configuración de lectura Nginx y verificar su validez y corrección

* Crear, se unen y cerrar la toma

* De acuerdo a la generación de configuración, procesos de gestión

* Recepción de instrucciones externas, tales como reinicio, abajo cerrado, directiva de servicios de recarga

* Gestión de archivos de registro

 

proceso hijo (proceso de trabajo)

Es generado por el proceso primario, para generar el número se puede definir en el archivo de configuración. Las características principales del proceso son:

Recibir una petición del cliente *

* Pide sucesivamente en varias tratamiento de filtración módulos funcionales

* IO llama, obtener los datos de respuesta

* Comunicarse con los servidores de servicios de fondo, servidor back-end recibe un resultado de procesamiento

* El almacenamiento en caché de datos, el acceso a la caché del índice, la consulta y la memoria caché llamada de datos

* Envío de una solicitud, en respuesta a las peticiones de los clientes

* Recibir instrucciones de proceso principales, tales como reinicio, recarga y salida

 

proceso hijo (proceso de trabajo)

Es generado por el proceso primario, para generar el número se puede definir en el archivo de configuración. Las características principales del proceso son:

Recibir una petición del cliente *

* Pide sucesivamente en varias tratamiento de filtración módulos funcionales

* IO llama, obtener los datos de respuesta

* Comunicarse con los servidores de servicios de fondo, servidor back-end recibe un resultado de procesamiento

* El almacenamiento en caché de datos, el acceso a la caché del índice, la consulta y la memoria caché llamada de datos

* Envío de una solicitud, en respuesta a las peticiones de los clientes

* Recibir instrucciones de proceso principales, tales como reinicio, recarga y salida

 

Nginx configuración de host virtual
el mismo puede ejecutar múltiples sitios en una sola máquina, que es varios nombres de dominio. En un entorno de producción, por lo general configurar máquinas virtuales para satisfacer la demanda.

Nginx predeterminado host virtual
por defecto del host virtual es que no importa lo que el nombre de dominio se resuelve en el servidor, el acceso a la máquina virtual predeterminada.

Recordemos, nginx nginx.conf perfil maestro de cada servidor {} es un anfitrión virtual (estación). En general, si no se especifica, entonces el primer servidor {} es la configuración del host virtual predeterminado.

Por supuesto, también podemos especificar y estar dentro del servidor {} seguido de la default_server escuchar 80, de manera que el servidor especificado {} es la máquina virtual predeterminada.

linsten 80 default_server;        #以80端口为例

Por lo general, en las especificaciones del pedido y no están configurados en el archivo de configuración global es un número bueno  server{} , pero  conf crear el directorio siguiente  vhostdirectorio, a continuación,  vhost crear un directorio de archivos de configuración de host virtual, basta con añadir una línea en el archivo de configuración:

# vim /usr/local/nginx/conf/nginx.conf           #在http{}配置部分加上一行
include vhost/*.conf;
  • Compruebe el archivo de configuración:
# cat /usr/local/nginx/conf/nginx.conf

user nobody nobody;         #全局配置部分
worker_processes 2;
error_log /usr/local/nginx/logs/nginx_error.log crit;
pid /usr/local/nginx/logs/nginx.pid;
worker_rlimit_nofile 51200;

events                      #events配置部分
{
    use epoll;
    worker_connections 6000;
}

http                        #http配置部分,server{}属于http配置部分
{
    include mime.types;
    default_type application/octet-stream;
    server_names_hash_bucket_size 3526;
    server_names_hash_max_size 4096;
    log_format combined_realip '$remote_addr $http_x_forwarded_for [$time_local]'
    ' $host "$request_uri" $status'
    ' "$http_referer" "$http_user_agent"';
    sendfile on;
    tcp_nopush on;
    keepalive_timeout 30;
    client_header_timeout 3m;
    client_body_timeout 3m;
    send_timeout 3m;
    connection_pool_size 256;
    client_header_buffer_size 1k;
    large_client_header_buffers 8 4k;
    request_pool_size 4k;
    output_buffers 4 32k;
    postpone_output 1460;
    client_max_body_size 10m;
    client_body_buffer_size 256k;
    client_body_temp_path /usr/local/nginx/client_body_temp;
    proxy_temp_path /usr/local/nginx/proxy_temp;
    fastcgi_temp_path /usr/local/nginx/fastcgi_temp;
    fastcgi_intercept_errors on;
    tcp_nodelay on;
    gzip on;
    gzip_min_length 1k;
    gzip_buffers 4 8k;
    gzip_comp_level 5;
    gzip_http_version 1.1;
    gzip_types text/plain application/x-javascript text/css text/htm
    application/xml;

    include vhost/*.conf;
}
  • Crear archivo de configuración del servidor de dos {}:
# mkdir -p /data/wwwroot/www.1.com /data/wwwroot/www.2.com

# echo "www.1.com" > /data/wwwroot/www.1.com/index.html

# echo "www.2.com" > /data/wwwroot/www.2.com/index.html

# mkdir /usr/local/nginx/conf/vhost

# vim /usr/local/nginx/conf/vhost/www.1.com.conf          #写入下面内容
server {
    listen 80;
    server_name www.1.com;
    root /data/wwwroot/www.1.com;
}

# vim /usr/local/nginx/conf/vhost/www.2.com.conf          #写入下面内容
server {
    listen 80;
    server_name www.2.com;
    root /data/wwwroot/www.2.com;
}
  • configuración Recargar:
# /usr/local/nginx/sbin/nginx -t

# /usr/local/nginx/sbin/nginx -s reload
  • prueba de acceso:
# curl -x127.0.0.1:80 www.1.com
www.1.com

# curl -x127.0.0.1:80 www.2.com
www.2.com

# curl -x127.0.0.1:80 www.3.com          #可以看出来,www.1.com是默认虚拟主机,虽然我们没有指定
www.1.com

En circunstancias normales, tenemos que especificar el host virtual por defecto, ya que no especifican que la primera fila de server{}la máquina virtual predeterminada, esto es un poco inestable.

  • Especifique el host virtual por defecto:
# vim /usr/local/nginx/conf/vhost/default.conf             #写入下面内容
server {
    listen 80 default_server;            #指定默认虚拟主机
    deny all;            #将非该服务器上的站点访问拒绝
}
# /usr/local/nginx/sbin/nginx -t

# /usr/local/nginx/sbin/nginx -s reload
  • prueba de acceso:
# curl -x127.0.0.1:80 www.3.com
<html>
<head><title>403 Forbidden</title></head>              #提示403禁止访问
<body bgcolor="white">
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.14.0</center>
</body>
</html>

Esto parece más razonable, no en el sitio del servidor se le puede negar el acceso, en lugar de a la máquina virtual predeterminada.

 

Virtuales de configuración de host Especificación
Especificaciones generales para, incluyen archivo de configuración del servidor virtual, y luego crear un directorio conf directorio de host virtual en el archivo de configuración global, definen la configuración del host virtual en el directorio de host virtual, que es parte del servidor de configuración {}.

En el acceso por defecto especificado anteriormente antes de que la máquina virtual no hemos determinado índice (página de índice) en www.1.com.conf y www.2.com.conf, que por defecto visitará index.html, que si el índice especificado no es el índice .html hacer?

  • Especifica el índice:
# vim /usr/local/nginx/conf/vhost/www.1.com.conf      
server {
    listen 80;
    server_name www.1.com;
    index 1.html;                                #添加这一行
    root /data/wwwroot/www.1.com;
}
# /usr/local/nginx/sbin/nginx -t

# /usr/local/nginx/sbin/nginx -s reload
  • prueba de acceso:
# curl -x127.0.0.1:80 www.1.com         
<html>
<head><title>403 Forbidden</title></head>             #提示403禁止访问,索引页有个特性:找不到会提示403,而不是404
<body bgcolor="white">
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.14.0</center>
</body>
</html>
# echo "111111" > /data/wwwroot/www.1.com/1.html           

# curl -x127.0.0.1:80 www.1.com
111111                #有了1.html之后就会默认访问到索引页

Mientras tanto, la server{} sección de configuración también apoyan la resolución de nombres de dominio pan-, siguiendo un nombre de dominio principal podría ser un montón de nombres de dominio de segundo nivel, que será utilizado para resolver la sartén.

  • análisis especificado-Pan:
# vim /usr/local/nginx/conf/vhost/www.2.com.conf 
server {
    listen 80;
    server_name *.2.com;             #指定域名泛解析,假如2.com是主域名
    root /data/wwwroot/www.2.com;
    index index.html;
}
# /usr/local/nginx/sbin/nginx -t

# /usr/local/nginx/sbin/nginx -s reload
  • prueba de acceso:
# curl -x127.0.0.1:80 2.com
<html>
<head><title>403 Forbidden</title></head>              #直接访问主域名,提示403禁止访问
<body bgcolor="white">
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.14.0</center>
</body>
</html>

# curl -x127.0.0.1:80 1.2.com
www.2.com

# curl -x127.0.0.1:80 2.2.com
www.2.com

# curl -x127.0.0.1:80 sdjwefwe.2.com            #访问二级域名才可以访问到index
www.2.com

Para acceder al nombre de dominio principal, incluso fue al índice, el nombre de dominio puede ser separada por espacios:

server_name 2.com *.2.com; 

 

Basado en el puerto host virtual

Alojamiento Web no necesariamente se escucha en el puerto 80, pero el mismo nombre de dominio no puede repetirse en el puerto, los nombres de dominio bajo diferentes puertos pueden repetirse.

  • El mismo dominio que puerto definido:
# vim /usr/local/nginx/conf/vhost/www.1.com.conf              
server {
    listen 80;
    server_name www.1.com;
    index index.html;                        #更改index
    root /data/wwwroot/www.1.com;
}

# cp /usr/local/nginx/conf/vhost/www.1.com.conf /usr/local/nginx/conf/vhost/www.1.com.bak.conf

# cat !$
server {
    listen 80;
    server_name www.1.com;
    index index.html;
    root /data/wwwroot/www.1.com;
}

# /usr/local/nginx/sbin/nginx -t             
nginx: [warn] conflicting server name "www.1.com" on 0.0.0.0:80, ignored            #会有报错提示,server name 冲突
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
  • Las diferentes definiciones del mismo dominio portuario:
# mkdir /data/wwwroot/www.1.com.bak

# echo "www.1.com:8080" > /data/wwwroot/www.1.com.bak/index.html

# vim /usr/local/nginx/conf/vhost/www.1.com.bak.conf
server {
    listen 8080;               #更改监听端口
    server_name www.1.com;
    index index.html;
    root /data/wwwroot/www.1.com.bak;
}
# /usr/local/nginx/sbin/nginx -t

# /usr/local/nginx/sbin/nginx -s reload
  • prueba de acceso:
# curl -x127.0.0.1:80 www.1.com
www.1.com

# curl -x127.0.0.1:8080 www.1.com
www.1.com:8080

 

 

Publicados 370 artículos originales · ganado elogios 88 · vistas 290 000 +

Supongo que te gusta

Origin blog.csdn.net/qq_35029061/article/details/100100698
Recomendado
Clasificación