configuración del entorno php (configuración correcta de nginx y php)

1. Nginx se da cuenta del principio del análisis dinámico php

nginx es un servidor http de alto rendimiento y un servidor proxy inverso. Es decir, nginx se puede utilizar como servidor HTTP para la publicación de sitios web o como servidor proxy inverso para equilibrar la carga. Pero debe tenerse en cuenta que: nginx en sí no analiza archivos php. Las solicitudes de páginas PHP serán entregadas por nginx a la dirección IP y al puerto monitoreado por el proceso FastCGI, que será procesado por php-fpm (un administrador de procesos fastcgi de terceros) como un servidor de análisis dinámico, y finalmente los resultados del procesamiento. será devuelto a nginx. Es decir, nginx transfiere solicitudes dinámicas al back-end php-fpm a través de la función de proxy inverso, a fin de realizar el soporte de análisis para PHP. Este es el principio básico de Nginx para lograr el análisis dinámico de PHP. 

 

Primero, necesitas comprender algunos conceptos. (Nginx + php-fpm + fastcgi)

  • Nginx es un 非阻塞IO & IO复用modelo. A través de la función similar a epoll proporcionada por el sistema operativo, se pueden procesar múltiples solicitudes de clientes en un hilo. Los procesos de Nginx son subprocesos, es decir, solo hay un subproceso en cada proceso, pero este subproceso puede servir a varios clientes.

  • PHP-FPM es un modelo de bloqueo de un solo subproceso. pm.max_children Especifica el número máximo de procesos y pm.max_requests especifica cuántas solicitudes maneja y reinicia cada proceso (debido a que PHP ocasionalmente tiene pérdidas de memoria, debe reiniciarse). Cada proceso de PHP-FPM tiene solo un hilo, pero un proceso solo puede servir a un cliente a la vez.

  • fastCGI: Para resolver la comunicación entre diferentes intérpretes de idiomas (como los intérpretes php y python) y el servidor web, apareció el protocolo cgi. Siempre que escriba programas de acuerdo con el protocolo cgi, puede comunicarse entre el intérprete de idiomas y webwerver. Como el programa php-cgi. Pero cada vez que el servidor web recibe una solicitud, bifurcará un proceso CGI y luego matará el proceso después de que finalice la solicitud. Si hay 10,000 solicitudes, bifurque y elimine el proceso php-cgi 10,000 veces. fastcgi es una versión mejorada de cgi. Fast-cgi no matará el proceso cada vez que se procese la solicitud, pero mantendrá el proceso para que el proceso pueda manejar varias solicitudes a la vez. Mejora enormemente la eficiencia.

Suplemento: Conocimiento relevante de proxy inverso y proxy directo (en resumen, proxy-proxy directo es el cliente; proxy-proxy inverso es el servidor)

El propósito del proxy de reenvío:
                (1) Acceso a recursos previamente inaccesibles, como Google
                (2) Se puede almacenar en caché para acelerar el acceso a los recursos
                (3) Autorización de acceso del cliente y el acceso a Internet está autenticado
                (4) El proxy puede registrar registros de acceso de usuarios en línea Gestión de comportamiento, ocultar información del usuario del exterior)

El propósito del proxy inverso: proxy inverso, "el proxy es el servidor", utilizado principalmente en el caso de implementación distribuida de clústeres de servidores, el proxy inverso oculta la información del servidor.
               (1) Para garantizar la seguridad de la red interna, el proxy inverso se usa generalmente como la dirección de acceso a la red pública, y el servidor web es la red interna.
               (2) El equilibrio de carga se usa para optimizar la carga del sitio web a través del servidor proxy inverso

2. Cómo configurar nginx para implementar análisis dinámico php por nginx

1. Comprender el sentido común de la configuración de nginx (nginx.conf)

La composición de nginx.conf y la gramática de configuración básica se explican en otro artículo.Aquí presentaremos brevemente varias gramáticas que se utilizan para analizar la configuración de PHP:

2.nginx parsing php ejemplo de configuración

servidor {escucha 8000 backlog = 4096; servidor_nombre www.baidu.com localhost; access_log logs / access.log main; root / home / leimengyao / api / app / htdocs; ubicación / {index index.php index.html index.htm; try_files $ uri $ uri / /index.php?$args;}ubicación ~ \ .php $ {#fastcgi_pass 127.0.0.1:9000;fastcgi_pass unix: /home/leimengyao/php7/var/run/php-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME / home / leimengyao / api / app / htdocs $ fastcgi_script_name; include fastcgi_params;} error_page 404 /404.html;location = /404.html {root / usr / share / nginx} # / html redirigir las páginas de error del servidor a la página estática /50x.html#error_page 500 502 503 504 /50x.html;location = /50x.html {root / usr / share / nginx / html;} ubicación ~ /\.ht {denegar todo ;}}

Como se configuró anteriormente, cuando llega una solicitud http, el proceso de procesamiento es el siguiente:

Tome http://10.94.120.124:8000/ A / B? C = 1 & d = 4 como ejemplo:

  • Después de que llega la solicitud http, el número de puerto monitoreado en el bloque global del servidor se compara con el servidor correspondiente. Luego proceda a la coincidencia de la ruta de ubicación.

  • Primero coincida con la ubicación /. En esta regla de coincidencia, primero busque el archivo $ uri en el directorio raíz (/ home / leimengyao / api / app / htdocs) a través de try_files; si no hay coincidencia, busque el directorio raíz $ uri / directorio; si no hay coincidencia, el último elemento /index.php?$args coincidirá, es decir, se emite una "sub-solicitud interna", que es equivalente a que nginx inicie una solicitud http a http: // 10.94.120.124: 8000 / index.php? C = 1 & d = 4

  • Esta sub-solicitud será capturada location ~ \.php${ ... }, es decir, ingrese al programa de procesamiento FastCGI (nginx debe configurarse a través del módulo FastCGI, y los parámetros php relevantes se pasan a php-fpm para su procesamiento. Los parámetros relacionados con fastcgi_pass se configuran en este elemento , y los recursos solicitados por el usuario se envían Parse php-fpm. La sintaxis de configuración relacionada del módulo nginx FastCGI se presentará a continuación). El URI y los parámetros específicos se pasan a los programas FastCGI y WordPress en REQUEST_URI, por lo que no se ven afectados por los cambios de URI. ! ! ! .

     
    1. función estática pública detectPath () {

    2. if (! empty ($ _ SERVER ['SCRIPT_URL'])) {

    3. $ ruta = $ _SERVER ['SCRIPT_URL'];

    4. } más {

    5. // como: www.baidu.com/A/B?saadf=esdf

    6. if (isset ($ _ SERVER ['REQUEST_URI'])) {

    7. // $ _ SERVIDOR ['REQUEST_URI'] = "/ m / test? Saadf = esdf";

    8. $ request_uri = parse_url ($ _ SERVER ['REQUEST_URI'], PHP_URL_PATH);

    9. if (falso! == $ request_uri) {

    10. $ ruta = $ request_uri;

    11. // echo $ ruta; / A / B

    12. //salida;

    13. } elseif ($ _SERVER ['REQUEST_URI'] && strpos ($ _ SERVER ['REQUEST_URI'], '?')! == falso) {

    14. $ ruta = strstr ($ _ SERVER ['REQUEST_URI'], '?', verdadero);

    15. }

    16. } más {

    17. $ ruta = $ _SERVER ['PHP_SELF'];

    18. }

    19. }

    20. return $ ruta;

    21. }

3. Configuración de Nginx. PHP FastCGI

Primero debe comprender algunos documentos. (Nginx.conf + fastcgi_params + php-fpm.conf + php.ini)

  • El archivo fastcgi_params generalmente se almacena en / usr / local / etc / nginx (Ubuntu se puede almacenar en / etc / nginx), que define las variables de entorno básicas para el módulo FastCGI. Estas variables de entorno fastcgi se utilizarán al configurar fastcgi_params de nginx. El contenido es el siguiente:

  • El módulo PHP FastCGI de Nginx.conf permite que nginx funcione con FastCGI y controla qué parámetros se pasarán de forma segura. El significado de la configuración común de parámetros fastcgi se presentará en detalle a continuación. El ejemplo de configuración es el siguiente:

     
    1. ubicación / {

    2. fastcgi_pass localhost: 9000;

    3. fastcgi_index index.php;

    4.  

    5. fastcgi_param SCRIPT_FILENAME / home / www / scripts / php $ fastcgi_script_name;

    6. fastcgi_param QUERY_STRING $ query_string;

    7. fastcgi_param REQUEST_METHOD $ request_method;

    8. fastcgi_param CONTENT_TYPE $ content_type;

    9. fastcgi_param CONTENT_LENGTH $ content_length;

    10. }

 

Https://www.jianshu.com/p/9bae5c49a163

       Al comprobar, se encontró que el directorio del archivo de configuración está en el directorio / etc, pero la carga de php.ini se muestra como ninguna; cambie al directorio en / etc para comprobar que no hay ningún archivo php.ini.

Copie php.ini.default a php.ini, ejecute php --ini nuevamente para verificar que el archivo php.ini se haya cargado correctamente

La vista php -m listará las extensiones instaladas de la línea de comando PHP Cli.

Vea el comando del directorio de instalación de la extensión php: php-config | grep -i extension ( http://www.blogdaren.com/post-2520.html )

Cambie a este directorio para ver la expansión

En segundo lugar, comprenda el significado de algunas configuraciones fastcgi comunes en nginx.conf

  • fastcgi_pass: Este parámetro establece el modo de comunicación entre nginx y php-fpm. Hay dos modos de comunicación entre nginx y php-fpm, uno en formato socket y el otro en formato tcp. Puede configurar ambas formas, pero debe asegurarse de que el modo de monitoreo configurado por nginx sea consistente con el modo de monitoreo configurado por php-fpm.conf. ( https://segmentfault.com/q/1010000004854045 , https://www.jianshu.com/p/eab11cd1bb28 )

Entre ellos, TCP es IP y puerto, que pueden cruzar servidores. Y UNIX Domain Socket no pasa por la red y solo se puede usar en escenarios donde Nginx y PHP-FPM están en el mismo servidor. El que use depende de su Configuración de PHP-FPM:
Método 1:
php-fpm.conf: listen = 127.0.0.1:9000
nginx.conf: fastcgi_pass 127.0.0.1:9000;
Método 2:
php-fpm.conf: listen = / tmp / php-fpm. sock
nginx.conf: fastcgi_pass unix: /tmp/php-fpm.sock;
donde php-fpm.sock es un archivo, generado por php-fpm, y el tipo es srw-rw ----.

 

UNIX Domain Socket se puede utilizar para dos procesos no relacionados. Es un mecanismo IPC ampliamente utilizado. Por ejemplo, la comunicación entre el servidor X Window y el programa GUI se realiza a través de UNIX Domain Socket. Este método de comunicación se produce en el kernel del sistema en lugar de Tanto las conexiones de dominio UNIX como las conexiones largas pueden evitar la creación frecuente de conexiones TCP cortas que causan demasiadas conexiones TIME_WAIT. Para los dos programas de comunicación entre procesos, el proceso de UNIX Domain Socket no irá a la capa TCP. , Directamente en forma de archivo, comunícate con un socket de flujo. Si es un Socket TCP, debes ir a la capa IP. Para un servidor que no es el mismo, el Socket TCP va más.

Socket de dominio UNIX:
Nginx <=> socket <=> PHP-FPM
TCP Socket (bucle de retorno local):
Nginx <=> socket <=> TCP / IP <=> socket <=> PHP-FPM
TCP Socket (Nginx y PHP- FPM está ubicado en un servidor diferente):
Nginx <=> socket <=> TCP / IP <=> capa física <=> enrutador <=> capa física <=> TCP / IP <=> socket <=> PHP-FPM

  • fastcgi_index:

  • fastcgi_param:

 

Después de modificar todos los archivos de configuración anteriores, debe reiniciar nginx y php-fpm para que el contenido modificado surta efecto:

Tres. Nginx realiza análisis dinámicos de PHP. Errores comunes en el proceso de configuración

  1. php-fpm necesita algunos cambios de configuración (duración del tiempo de espera: request_slowlog_timeout y otro    php-fpm request_terminate_timeout configurado incorrectamente causado por errores 502 )

  2. Error de configuración de Nginx (fastcgi_param SCRIPT_FILENAME)

  3. Nginx + Php-fpm un error mágico 502

  4. nginx + php-fpm abre index.php y se muestra en blanco

  5. instalación del complemento internacional php, instalación del complemento de depuración (extensión php.ini)

  6. La información de la caché de php está desactivada ( https://www.cnblogs.com/JohnABC/p/3529786.html    !! Activar la caché causará muchos problemas, dependiendo de la situación)

  7. ? Proceso de ejecución de PHP: https://www.jianshu.com/p/042c56e08939

Cuatro. Configure el entorno de desarrollo artifact PhpStrom en Mac

https://blog.csdn.net/tfy_2425482491/article/details/79377672

Haga clic en depurar para informar el siguiente error: instalar la extensión de depuración

Five. Php herramienta de gestión de dependencias-compositor

 

Seis. Otro

    redis (https://www.jianshu.com/p/018bbf5ff42a

    php call_user_func_array (https://www.jianshu.com/p/1c0f30d8722d

 

referencias:

http://www.cnblogs.com/mangguoxiansheng/p/5967745.htmll

https://segmentfault.com/q/1010000004854045

reglas de reescritura de nginx  https://segmentfault.com/a/1190000002797606

 

Supongo que te gusta

Origin blog.csdn.net/benli8541/article/details/113091543
Recomendado
Clasificación