El principio de funcionamiento de appache y nginx

servidor web

servidor web, también conocido como servidor WWW (World Wide Web), la función principal es proporcionar un servicio de información de navegación en línea.

solicitud HTTP de protocolo de capa.

formato de documento HTML.

Navegador localizador uniforme de recursos (URL).

servidores Web a menudo en modo B / S (Navegador / Servidor) para proporcionar servicios. Browser y la interacción del servidor es el siguiente:


 GET /index.php HTTP / 1.1

 + --------------- + + ---------------- +
 | + -------------------> |
 | navegador | | servidor |
 | <------------------- + |
 + --------------- + + ---------------- +

                   HTTP / 1.1 200 OK
 

Navegador envía una petición HTTP (Solicitud) al servidor.

servidor de navegador recibe los datos de petición, después del análisis, los datos de respuesta (la respuesta) a la salida del navegador.

Navegador recibe los datos de respuesta al servidor, después del análisis, los resultados finales se muestran en el navegador.

Apache y Nginx pertenecen al servidor Web, ambos de los cuales han alcanzado el protocolo HTTP 1.1.

Apache general

Apache HTTPServer es un servidor web de código abierto Apache Software Foundation, puede ejecutarse en la mayoría del sistema operativo del ordenador, debido a su adhesión a la plataforma y la seguridad. software de servidor Web es ampliamente usado es uno de los más populares. Es rápido, fiable, y se puede ampliar a través de una API sencilla, el Perl / Python, etc. intérprete integrado en el servidor. - Wikipedia

componentes de Apache

Apache se basa en el diseño modular, no es gran parte del código de núcleo, la mayoría de las funciones se distribuyen entre los diferentes módulos, cada módulo de carga en la demanda cuando inicia el sistema.


"texto"> + ---------- +
      + - | módulo | ----------------- +
      | + ---------- + |
      | + ------------ +
+ ----------- + Apache HTTPD | módulo php |
| módulo | + ------------ +
+ + ----------- + ---------- + |
      + ---------- + -------- | MPM | +
                 | + ---- + --- + - +
               + + ----------- -v | |
               | ARP <- + |
               + ------ + ------ + |
                      | |
      + --------------- ------------- v v - +
      | Sistema Operativo |
      + -------------------------------- +
 

MPM (Multi -ProcessingModules, el módulo de multiprocesamiento) es uno de los componentes básicos de Apache, Apache para utilizar los recursos del sistema operativo por MPM, para el proceso y la gestión de grupo de subprocesos. Apache Con el fin de obtener el mejor rendimiento operativo para diferentes plataformas (Unix / Linux, ventana) está optimizado para proporcionar un MPM diferente para diferentes plataformas, los usuarios pueden elegir de acuerdo a la situación actual, en la que los más comúnmente utilizados son MPM prefork trabajador y dos clases. Por lo que su servidor está funcionando de qué manera, en función del proceso de instalación de los parámetros de compilación de Apache MPM especificados en los parámetros del compilador por defecto X para el prefork.

Dado que la mayoría Unix no soporta verdaderos hilos, por lo que el uso de pre-derivado sub-proceso (prefork) forma, como hilos de Windows o Solaris compatible con estas plataformas, basadas en trabajador modo mixto roscado multi-multi-proceso es una opción buena. En Apache Otro componente importante es la TAE (Apacheportable RuntimeLibrary), a saber, la biblioteca Apache Portable Runtime, que es una biblioteca de llamadas al sistema operativo abstractos, usando Apache utiliza para implementar los componentes internos del sistema operativo, mejorar la portabilidad del sistema el sexo. Apache para PHP de análisis, que es, por muchos en el php Módulo Módulo para completar.

Apache ciclo de vida
"texto"> + ------------------------------------------ -------------------- +
   | + --------------------- + fase de arranque |
   | | sistema de arranque de configuración | |
   | + ---------- + ---------- + |
   | | |
   | ---------- + v: --- + ------- |
   | | módulo de inicialización | |
   | + - + -------- + -------- + - + |
   | | | | |
   | + - ----------- + | + ------ ------- + v | + -------------- + |
   | | Sub-proceso de inicialización | <+ | sub-proceso de inicialización | +> | sub-proceso de inicialización | |
   | + ------ + ------ + ---- + ------- + - + + ------- + ------ + |
   + ----------------------------- --------------------------------- +
   | | | | fase operativa |
   | + ---- V - - + v + ---- + ---- + ---- + ---- v |
   | | solicitud de circulación | | solicitud de circulación | | solicitud de circulación | |
   | + ---- + --- - + + + ---- ---- ---- + + + + ---- |
   | | | | |
   | + ------ + ------ + --- v v ------ ------ + + + ------ --- v |
   | | proceso termina niño | | proceso hijo extremo | | proceso hijo extremo | |
   | + ---- --------- + + + + ------------- ------------- + |
   + ------------------------------------------------- ------------- +
 

Este ciclo de vida es un perfork esquemática en el trabajo, se puede observar en la figura, Apache tiene que iniciar un proceso separado para cada solicitud de procesar.

modo de funcionamiento de Apache prefork el principio de funcionamiento

Un solo proceso de control (el padre) es responsable de producir el niño, el proceso hijo para el seguimiento de estas solicitudes y responder. Apache siempre trata de mantener algunas piezas (piezas) o sub-procesos están inactivos para la solicitud inminente. El cliente no tendrá que esperar para producir el niño antes de obtener el servicio. En los sistemas Unix, el proceso padre es normalmente el puerto 80 para la unión a ejecutarse como root, mientras que los procesos hijo de Apache generados típicamente a un usuario con privilegios bajos. Instrucciones para el usuario y de grupo para pocos privilegios de usuario para configurar el proceso hijo. Los usuarios que ejecutan proceso hijo deben tener permiso para leer el contenido de sus servicios, pero otros recursos servicios externos deben tener los menos posibles privilegios.

las obras de los trabajadores

El número de hilos por proceso puede tener es fijo. El servidor aumentará o disminuirá el número de procesos en función de la carga. Un solo proceso de control (el padre) es responsable de establecer el proceso hijo. Cada proceso hijo para establecer el número de hilos ThreadsPerChild servicio y un hilo de escucha, la solicitud de acceso escuchas hebra de escucha y servicio de entrega roscado y responder. Apache siempre trata de mantener un modo de espera (de repuesto) o agrupación de hebras de servicio inactivo. De esta manera, los clientes no tienen que esperar a que el establecimiento de un nuevo proceso o un nuevo hilo puede ser procesada. En Unix, para ser capaz de enlazar con el puerto 80, el proceso primario es generalmente comenzó como raíz, entonces, procesos e hilos niño Apache con el fin de establecer un usuario con privilegios bajos. Instrucciones para el usuario y permisos de grupo para configurar los procesos hijo de Apache. A pesar de que el niño debe tener acceso de lectura a su contenido proporcionado, pero debe darle menos privilegiados como sea posible. Además, a menos que el suexec, de lo contrario, estas instrucciones para configurar los permisos serán heredados por los scripts CGI.

Apache se ejecuta la fase de puesta en marcha

Durante la fase de arranque, Apache principal de análisis del archivo de configuración (por ejemplo http.conf Incluir instrucciones y configurar el archivo de configuración, etc.), módulo de carga (por ejemplo MOD php.so, MOD perl.so etc.) de inicialización y recursos del sistema (como archivos de registro, segmento de memoria compartida, etc.) de trabajo. En esta etapa, Apache con el fin de obtener el máximo de derechos de uso de los recursos del sistema serán raíz privilegiada usuario (sistemas X) o administrador super administrador (sistemas Windows) para puesta en marcha completa.

Este proceso se puede utilizar para entender por la figura siguiente:


"Texto"> + -------- +
       | empezar |
       + ---- + --- +
            |
 + ---------- ---------- v - + http.conf analiza el archivo de configuración principal en la información de configuración,
 | perfil analítico | como el LoadModule, la AddType
 + ---------- + ----------------------- + instrucciones tales como se carga en la memoria
            |
 + ------------ + ---------- AddModule v base, y otras instrucciones LoadModule
 | estática de carga / módulo dinámico | cargado módulos de Apache, como mod_php5. así es
 + ---------- + ------------ + cargado en la memoria, el espacio de direcciones asignado a la Apache.
            |
 + ------------ ---------- + v archivos de registro, segmentos de memoria compartida, los vínculos de base de datos
 | inicialización del sistema de recursos | tales como la inicialización
 + ------- + ------------ + ---
            |
        + v --- ---- +
        | extremo |
        + -------- +


fase operativa

En la fase de explotación, el trabajo principal de Apache es procesar las solicitudes de servicio del usuario. En esta etapa, los usuarios de Apache a renunciar a los niveles de privilegio, utilizan autoridad ordinaria, que se basa principalmente en consideraciones de seguridad, para evitar violaciones de la seguridad debido a defectos en el código causada.

Dado que el mecanismo de gancho Apache, permitiendo módulo Apache (incluye un módulo interno y los módulos externos, por ejemplo mod_php5.so, mod_perl.so etc.) se inyecta en el ciclo de procesamiento de solicitud de función personalizada. función personalizada mod_php5.so/php5apache2.dll es contener, por inyección en el mecanismo de gancho Apache, responsable de gestionar la petición en cada etapa del flujo de procesamiento de Apache php.

ciclo de procesamiento de solicitudes de Apache se divide en 11 fases, seguido por: Post-Read-Request, URITranslation, Cabecera de análisis, AccessControl, autenticación, autorización, verificación de tipos MIME, corrección, respuesta, registro, limpieza.

Apache ciclo de vida de solicitud de procesamiento http:

 

Después de la lectura de solicitud Fase: Flujo de procesamiento de solicitudes normal, que es el módulo de primera etapa puede ser insertada en el gancho. Para aquellos que quieren temprana en las solicitudes módulo de procesamiento, esta etapa puede ser utilizada.

Traducción URI etapa: Apache trabajo principal en esta etapa: URL mapea solicitud al sistema de archivos local. módulo de gancho puede ser insertado en esta etapa, para llevar a cabo su propia lógica de mapeo. mod_alias es el uso de esta fase de la obra.

Cabecera de análisis de fase: Apache en las principales fases de trabajo: comprobación de encabezado de solicitud. Puesto que el módulo puede realizar el encabezado de solicitud tarea de inspección en cualquier flujo de procesamiento de solicitudes de punto, de manera que el gancho se utiliza muy poco. mod_setenvif es el uso de esta fase de la obra.

La etapa de control de acceso: el trabajo principal de Apache en esta fase: Dependiendo del archivo de configuración para comprobar si se permite a las solicitudes de acceso a los recursos. Apache comandos lógicos estándar para lograr la permitidos y denegados. MOD authz anfitrión es el uso de esta fase de la obra.

fase de autenticación: el trabajo principal de Apache en esta fase: un usuario se autentica de acuerdo con la configuración del perfil de política, y establecer el campo Nombre de usuario. módulo de gancho puede ser insertado en esta etapa, para poner en práctica un método de autenticación.

fase de autorización: trabajo principal Apache en esta fase: si se permite a usuario autenticado realizar la operación solicitada de acuerdo con el perfil. módulo de gancho puede ser insertado en esta etapa, para lograr un método de gestión de derechos de usuario.

Tipo MIME fase de comprobación: Apache trabajo principal en esta etapa: las reglas de acuerdo con el tipo MIME del recurso solicitado para ser utilizado determina los controladores de contenido. Los módulos estándar MOD negociación y MOD MIME implementa este gancho.

Fase de corrección: Esta es una etapa común, antes de permitir que el módulo generador de contenido, los procesos de operación necesarios. Y Post la Leer Solicitud Del mismo modo, es un gancho capaz de capturar cualquier información, el gancho es el más comúnmente utilizado.

Fase de respuesta: el trabajo principal de Apache en esta fase: el contenido de generación devuelve al cliente, el cliente es responsable de enviar una respuesta adecuada. Esta etapa es la parte central del proceso de tratamiento general.

etapa de la tala: el trabajo principal de Apache en esta fase: Después de registrar la respuesta transacción ha sido enviado al cliente. Los módulos de Apache pueden modificar o reemplazar el registro estándar.

etapa Limpieza: Apache en esta etapa el trabajo principal: la limpieza de esta solicitud después de la finalización de la transacción entorno heredado, tales como archivos de procesamiento, directorios o toma cerrada y así sucesivamente, esta es la última vez que una etapa de procesamiento de solicitudes de Apache.

Nginx general

Nginx (pronunciado con el motor x) es desarrollado por un servidor web ligero ruso programador IgorSysoev, proxy inverso de servidor y correo electrónico (IMAP / POP3) servidor proxy. Rusia inicialmente por un gran portal y motor de búsqueda Rambler (en ruso: Рамблер) uso. - Wikipedia

Funciona el módulo con Nginx

Nginx por el núcleo y los módulos, donde el núcleo es muy pequeño y compacto diseño, el trabajo realizado es muy simple, con sólo mirar las solicitudes de clientes asignados a un perfil locationblock (ubicación es una configuración de nginx comando de URL Causa), y cada instrucción en esta ubicación se puede configurar de diferentes módulos para comenzar a completar el trabajo.

módulos de Nginx se dividen en módulos básicos, los módulos de base y módulos de terceros de la estructura:

módulos básicos: HTTP módulo, los módulos de evento y módulo de correo

El módulo base: acceso HTTP módulo, HTTP FastCGI módulo, módulo HTTP Proxy y HTTPRewrite módulo,

módulos de terceros: HTTP Upstream módulo de Solicitud Hash, módulos de Aviso y HTTP AccessKey módulo.

El módulo se divide en las siguientes tres categorías Nginx de la función:

Los manipuladores (módulos de procesador). Tales módulos de proceso directamente la solicitud, y envía la información de contenido y similares encabezados y operaciones de modificación. módulos de procesador Manipuladores típicamente tienen sólo una.

Los filtros (bloque de filtro). Tal otro módulo de contenido de las operaciones de modificación de la salida del módulo de procesador, la salida final de la Nginx.

Los proxies (módulo de clase de proxy). Estos módulos son la HTTPUpstream como módulos de Nginx, algunos de los principales y de back-end servicios tales como FastCGI, etc. interactúan para lograr proxy de servicio y balanceo de carga capacidades.


"texto"> + ^
        Http solicitud | | Http Respuesta
                     | |
    + --------- + ------ ----- v + + ---- + ---- +
    | Conf | Nginx Core | | filtern |
    + --------- + ------ + + + ----- ---- ---- ^ +
                     | |
                     | + ---- + ---- +
                     | | filter2 |
elegir un manejador | + ---- ---- ^ +
conf basada | |
                     | + ---- + ---- +
                     | | Filter1 |
                     | + ---- ---- ^ +
                     | | Generar contenido
               + ----- v -------------------- + ---- +
               | Handler |
               + + -------------------------------
 

Nginx sí hacen poco trabajo real, cuando se recibió una solicitud HTTP, es sólo por buscar el archivo de configuración para asignar la solicitud a un locationblock, y cada instrucción en esta ubicación se configurará en diferentes módulos para empezar para completar el trabajo, por lo que el módulo puede ser visto como trabajadores laborales reales Nginx. En un lugar generalmente involucra un módulo controlador de comandos y una pluralidad de módulos de filtro (por supuesto, una pluralidad de ubicación puede ser compartida con el mismo módulo). módulo controlador se encarga de las solicitudes de control, generadas en respuesta a la finalización de los contenidos, y el módulo de filtro de contenido para procesar la respuesta.

Nginx arquitectura y flujo de trabajo

 

La figura es Nginx de la arquitectura que es similar a la condición de trabajo Trabajador Apache, Nginx cada proceso de trabajo gestiona un gran número de hilos, el hilo es la relación real de las solicitudes previstas en el trabajador.

De hecho, toda la lógica de negocio en el proceso de trabajo. proceso de trabajo tiene una función para realizar un bucle infinito, constantemente procesamiento de solicitudes de clientes recibidos y procesados ​​hasta que se detenga todo el servicio nginx. Trabajador en esta función se ejecuta dice lo siguiente:

Mecanismos (tales como epoll, kqueue, etc.) generados por los acontecimientos relacionados con el sistema de operación.

Recibir y procesar estos eventos, el caso recibió datos, el nivel más alto resultante de la solicitud de objeto.

El encabezado de la solicitud de procesamiento y el cuerpo.

Responder y enviar de vuelta al cliente.

La finalización de la solicitud de procesamiento.

Re-inicializar el temporizador y otros eventos.

Nginx 和 FastCGI FastCGI

FastCGI es telescópicamente una interfaz de alta velocidad para la comunicación entre el servidor HTTP y lenguaje de script dinámico. El FastCGI apoyo HTTPServer populares más, incluyendo Apache, Nginx y lighttpd y así sucesivamente. Al mismo tiempo, FastCGI también muchos lenguajes de script, entre ellos PHP.

FastCGI es el desarrollo de mejoras proviene de CGI. El principal inconveniente del modo de interfaz CGI tradicional es pobre desempeño, ya que tendrá que reiniciar la secuencia de comandos cada vez que los encuentros del analizador HTTP programa servidor para realizar la resolución dinámica, a continuación, devuelve los resultados al servidor HTTP. Casi no está disponible cuando se trata de alta accesos concurrentes. Además de seguridad tradicional modo de interfaz CGI también es pobre, ahora se utiliza muy poco.

modo de interfaz FastCGI usando la estructura C / S, y que se distingue desde el servidor HTTP del servidor de análisis de la escritura, la escritura comienzan analizando el uno o más análisis daemon de scripts en el servidor. Cuando el servidor HTTP cada vez que se encuentran con un programa dinámico que puede ser entregada directamente al proceso FastCGI se lleva a cabo, entonces el resultado será devuelto al navegador. De esta manera usted puede hacer una solicitud HTTP del servidor que trata exclusivamente con la estática o la espalda servidor de scripts resultado dinámico para el cliente, lo que mejora el rendimiento de todo el sistema de aplicación en gran medida.

Nging y FastCGI cooperación

Nginx no soporta llamadas directas a programas externos o resolver todos los programas externos (incluyendo PHP) deben ser llamados a través de la interfaz FastCGI. interfaz FastCGI es un zócalo bajo Linux (Este conector puede ser un conector de archivos, también puede ser ipsocket).

El siguiente proceso se ejecute bajo Nginx PHP para ilustrar. PHP-FPM es administrado FastCGI un gerente, que existe como un PHP plug-ins.

Administrador de procesos FastCGI PHP-FPM propia inicialización, se inicia el proceso principal de PHP-FPM y empezar un proceso CGI start_servers niño. El principal proceso php-FPM principalmente la gestión de procesos hijo fastcgi, escuchando 9000 puerto. proceso espera fastcgi niño para una conexión desde el servidor web.

Cuando llega una petición de cliente Web ServerNginx es, por ubicación Nginx instrucción a todos los archivos php sufijo 127.0.0.1:9000 para ser procesado, es decir, por la localización Nginx instrucción a todo el archivo con la extensión PHP son cruz 127.0.0.1:9000 a tratar.

Proceso FastCGI Administrador de PHP-FPM seleccionado y conectado a un intérprete CGI sub-proceso. Servidor web se enviarán a las variables de entorno CGI y FastCGI proceso hijo la entrada estándar.

FastCGI proceso hijo para completar el proceso después de que los mensajes de salida y el error estándar de la misma rentabilidad de conexión de servidor web. Cuando el proceso FastCGI niño cierra la solicitud de conexión vendrá a completar el proceso.

proceso hijo FastCGI espera entonces y el proceso de gestor de procesos FastCGI desde la parte inferior (que se ejecuta en el WebServer) está conectado.

Apache y Nginx comparan comparación de características

Nginx y Apache, son HTTP software de servidor, ejecutar las mismas funciones son diseño modular, compatible con la interfaz lenguaje universal, tales como PHP, Perl, Python, etc., y también es compatible hacia adelante y proxy inverso, alojamiento web, reescritura de URL, compresión y transmisión, la transmisión de encriptación SSL.

Implementar las mismas funciones, todos los módulos de Apache soportados por los módulos de Nginx dinámico y compilación estática, y se compilan estáticamente,

Para soporte FastCGI, Apache apoyo fcgi mal, pero el apoyo de Nginx fcgi es muy bueno;

En el proceso de conexión, Nginx epoll apoyo, pero no soporta Apache;

En cuanto al uso del espacio, el paquete de instalación Nginx es sólo unos pocos cientos de K, en comparación con Apache y Nginx es definitivamente un monstruo.

ventajas Nginx Apache relativa

Ligero, también desde el servicio web, ocupan menos memoria que apache y recursos

proceso estático, el rendimiento de procesamiento estática Nginx más de tres veces mayor que el Apache

concurrente anti, no bloqueante solicitud de procesamiento Nginx es asíncrona, y el Apache se bloquea tipo, de bajo consumo de recursos Nginx alto rendimiento puede mantenerse bajo alta concurrencia. En el modo de Apache + PHP (prefork), si una gran PHP front-end o procesamiento lento de los casos bajo presión, que es propenso a Apache altísimo número de procesos, negando así los servicios fenómeno.

diseño altamente modular, relativamente simple para escribir un módulo

Activistas de la comunidad, todos los tipos de módulos de alto rendimiento producen rápidamente ah

ventajas Apache nginx relativa

reescribir, reescribir nginx poderoso que el

Módulo sobre más pensamiento básico se puede encontrar

Pequeño insecto, nginx número relativamente grande de error

Ultra-estable

el apoyo de Apache para PHP es relativamente simple, Nginx necesidad de cooperar con otros servicios de fondo

Seleccionar ventaja de Nginx

Como un servidor Web: archivos estáticos Nginx, archivos de índice, la eficiencia de la indexación automática es muy alta.

Como un servidor proxy, Nginx se puede lograr sin el almacenamiento en caché de proxy inverso para acelerar y mejorar la velocidad del sitio.

Como un servidor de equilibrio de carga, ya sea Nginx admite directamente dentro de los rieles y PHP, también puede apoyar HTTP servidor proxy en servicio exterior, y también soporta el uso de un sencillo algoritmo de tolerancia a fallos y balanceo de carga.

En términos de rendimiento, Nginx está diseñado para optimizar el rendimiento y el desarrollo, lograr un gran énfasis en la eficiencia. Se utiliza el modelo de encuesta kernel (epoll y kqueue), puede soportar más conexiones simultáneas puede soportar hasta 50 responden a 000 conexiones simultáneas, y sólo toma unos recursos de memoria muy bajos.

En cuanto a la estabilidad, Nginx ha tomado una tecnología de asignación de recursos por etapas, haciendo que la tasa de ocupación de la CPU y la memoria es muy bajo. dijo el funcionario de Nginx, Nginx no mantiene los 10 000 conexiones activas, pero estas conexiones sólo ocupa 2,5 MB de memoria, por lo tanto, ataques de denegación de este tipo para Nginx es básicamente ningún efecto.

En cuanto a la alta disponibilidad, Nginx apoya el despliegue en caliente, especialmente la velocidad de inicio rápido, por lo que puede, o configurar la actualización de la versión de software sin interrupción del servicio, incluso si la carrera durante meses sin necesidad de reiniciar también, se puede hacer casi 7 x 24 horas funcionar sin interrupción.

El uso Nginx y Apache

Debido a Nginx y Apache respectivas ventajas, muchas personas optaron por dejar que los dos coexisten en el servidor. En el lado del servidor para que el frente Nginx, después de Apache. El Nginx hacer balanceo de carga y proxy inverso, y los archivos estáticos, dinámicos solicitudes hablar (como las aplicaciones PHP) a Apache a mango

Publicado ocho artículos originales · elogios ganado 13 · Vistas a 60000 +

Supongo que te gusta

Origin blog.csdn.net/qq_37655695/article/details/60966926
Recomendado
Clasificación