Nginx y diferentes versiones de PHP FPM + PHP

Nginx y diferentes versiones de PHP FPM + PHP

Debido a una mejor comprensión de lo que deseo lograr gracias aMarcay su anteriorrespuesta, estoy publicando una variación (con suerte) más clara y ligeramente diferente de mi pregunta anterior ya que ese hilo ha alcanzado la saturación;

Estoy intentando ejecutar varios sitios de WordPress en un servidor nginx, donde cada sitio requiere una versión diferente de PHP. Deseo lograr esto usando múltiples versiones de PHP-FPM, cada una ejecutando una versión diferente de PHP, separada de nginx.

Luego quiero usar .confarchivos para controlar qué servidor PHP-FPM usa cada sitio, permitiendo que ese sitio se ejecute en la versión de PHP deseada.(Según elcomentariossección)

Actualmente, mi bloque de servidor para testsite1 se ve así, ejecutando la versión PHP predeterminada.

server {
    listen 80;
    listen [::]:80;

    root /usr/share/nginx/html/testsite1;
    index index.php index.html index.htm;

    server_name local.testsite1.com;

    location / {
        try_files $uri $uri/ /index.php?q=$uri&$args;
    }

    error_page 404 /404.html;

    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        include fastcgi.conf;
    }
}

Está ubicado /var/nginx/sites-available/testsite1y está vinculado simbólicamente a /var/nginx/sites-enabled/testsite1. Cada bloque de servidor se ubica en un archivo separado dentrosites-available

testsite1
testsite2
testsite3

He compilado una versión diferente de PHP (5.3.3), pero no estoy seguro de cómo configurar varios servidores PHP-FPM y cómo hacer que cada "apunte" a una versión diferente de PHP. También necesito orientación sobre cómo configurar varios .confarchivos para definir qué servidor PHP-FPM utilizará cada sitio de WordPress.

(básicamente, necesito que me tomen de la mano durante todo el proceso...)

Respuesta1

En mi experiencia, una estructura de servidor simple es la siguiente, que es suficiente para su caso.

Suposición

Tienes unas dos horas para configurarlos.

Supuesto del entorno del servidor

1 x servidor Nginx (front-end, para procesar archivos estáticos)

2 x servidor PHP-FPM (Back-end, para procesar script PHP)

1 x servidor de base de datos (ya sea en otro servidor separado o en el servidor Nginx está bien)

Se puede acceder al servidor Nginx medianteRed públicayRed privada

Solo se puede acceder a los servidores PHP-FPM y al servidor DB mediante el servidor Nginx (Red privada)

Red pública, lo que significa que pueden acceder personas que tengan internet.

Red privada, que se puede ver en un grupo de red específico. (Clase A, Clase B, Clase C. Ex, 192.xx.xx.xx o 10.xx.xx.xx o 172.xxx.xxx.xxx)

Si está utilizando VPS en Linode y DigitalOcean, ambos proporcionan IP de red privada, puede seguir las instrucciones que le dan para configurarlo.

Si no, puedes configurar el tuyo propio.VPN (red privada virtual)o usa tu enrutador para construir uno, es fácil, puedes BUSCAR en GOOGLE todo lo que necesitas.

Si estás usando Ubuntu, hacer una VPN con configuración solo te cuesta menos de 5 minutos.

Antes del siguiente paso, le sugerimos que configure las reglas del firewall para evitar posibles ataques. (Utilizando IPTABLES o su contenedor, FirewallD)

Aunque creamos PHP-FPM como dedicado desde Nginx, los archivos PHP de los sitios web no se pueden pasar a través del puerto TCP y del socket Unix.

Por lo tanto, debe administrar su carpeta raíz para el servidor web.

Opciones para administrar la carpeta del sitio web

  1. Subir sus sitios web al servidor Nginx Y a los servidores PHP-FPM con la MISMA RUTA de carpeta

  2. Escriba un script para archivos sincrónicos en todos sus servidores

  3. Usando GIT para todos tus servidores.

  4. Crear un NFS (sistema de archivos de red) en Nginx u otro servidor dedicado

Si está utilizando el sistema *nix, le sugiero la cuarta opción debido a,

Primero, administre todos los archivos de su sitio web en un servidor

En segundo lugar, muy fácil de mantener.

Tercero, copia de seguridad en minutos (esta debería ser otra pregunta)

※ El servidor NFS actúa como un servidor de almacenamiento puro para sus sitios web

Algunas personas pueden considerar el uso de NFS debido a la latencia de la red; sin embargo, en cuanto a varios sitios web que esperan ser administrados, NFS es una forma eficiente y sencilla.

Puede GOOGLE "NFS en Linux" para terminar de instalar y configurar este paso, le cuesta aproximadamente 1 hora para la versión más nueva.

Sin embargo, tenga en cuenta que el servidor NFS debe estar en unaRed privadatambién.

Cuando NFS, PHP-FPM y Nginx están en el mismoRed privada, la latencia de la red debería ser menor.

Entonces configuremos elnginx.conf

Suposición

Su IP pública de Nginx es 202.123.abc.abc, escuche 80 (o 443 si SSL está habilitado)

Tu PHP-FPM 5.5 está en 192.168.5.5, escucha 9008

Tu PHP-FPM 5.6 está en 192.168.5.6, escucha 9008

(ejemplo adicional) Su HHVM 3.4 está en 192.168.5.7, escuche 9008

Y consideras que PHP 5.5 es tu versión de PHP más utilizada.

    server {

         listen 80 default server;
         server_name frontend.yourhost.ltd;
         #root PATH is where you mount your NFS
         root /home/www;   
         index index.php;

    location ~ \.php$ {
        try_files  $uri $uri/ = 404;
        fastcgi_pass   192.168.5.5:9008;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        fastcgi_param  PHP_VALUE  open_basedir=$document_root:/tmp/:/proc/;
        include fastcgi_params;
        fastcgi_buffer_size 512k;
        fastcgi_buffers 256 4k;
        fastcgi_busy_buffers_size 512k;
        fastcgi_temp_file_write_size 512k;
        fastcgi_intercept_errors on;

    }

    }
#Here to set up you vhosts
include vhosts/*.conf; 

Las líneas anteriores deben colocarse antes de la última.}

Luego, ve creando una carpeta llamada vhostsdentro de la carpeta denginx.conf

Suposición

Tienes otra aplicación que usa PHP 5.6

Tienes otra aplicación que está usando HHVM.

Para PHP 5.6 (vhosts/app1.conf)

       server {
         server_name app1.yourhost.ltd;
         listen 202.123.abc.abc:80;
         index index.php;
         #root PATH is where you mount your NFS
         root /home/app1;
         #Include your rewrite rules here if needed
         include rewrite/app1.conf;

         location ~ \.php($|/){
             try_files  $uri $uri/ = 404;

             fastcgi_pass   192.168.5.6:9008;
             fastcgi_index  index.php;
             include        fastcgi_params;
             set $path_info "";
             set $real_script_name $fastcgi_script_name;
               if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
                   set $real_script_name $1;
                   set $path_info $2;
                }
             fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
             fastcgi_param SCRIPT_NAME $real_script_name;
             fastcgi_param PATH_INFO $path_info;
            fastcgi_param  PHP_VALUE         open_basedir=$document$
         }
      location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
                    expires      30d;
      }

       location ~ .*\.(js|css)?$ {
                    expires      12h;
       }

        access_log  /var/wwwlog/app1/access.log access;
        error_log  /var/wwwlog/app1/error.log error;
     }

Para HHVM (vhosts/app2.conf)

       server {
         server_name app2.yourhost.ltd;
         listen 202.123.abc.abc:80;
         index index.php;
         #root PATH is where you mount your NFS
         root /home/app2;
         #Include your rewrite rules here if needed
         include rewrite/app2.conf;

         location ~ \.hh($|/){
             try_files  $uri $uri/ = 404;

             fastcgi_pass   192.168.5.7:9008;
             fastcgi_index  index.hh;
             include        fastcgi_params;
             set $path_info "";
             set $real_script_name $fastcgi_script_name;
               if ($fastcgi_script_name ~ "^(.+?\.hh)(/.+)$") {
                   set $real_script_name $1;
                   set $path_info $2;
                }
             fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
             fastcgi_param SCRIPT_NAME $real_script_name;
             fastcgi_param PATH_INFO $path_info;
             fastcgi_param  PHP_VALUE         open_basedir=$document$
         }
      location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
                    expires      30d;
      }

       location ~ .*\.(js|css)?$ {
                    expires      12h;
       }

        access_log  /var/wwwlog/app2/access.log access;
        error_log  /var/wwwlog/app2/error.log error;
     }

De esta manera, incluso puedes agregar diferentes certificados SSL para tus vhosts.

¡Reinicia tu servidor y disfruta!

EDITADO

Para instalar diferentes versiones de PHP-FPM, puede compilarlo usted mismo o utilizar la pila existente.

Recomendar https://github.com/centos-bz/EZHTTP/archive/master.zip para ahorrar tiempo.

Método de uso (suponiendo que su máquina tenga instalado WGET y UNZIP)

$ wget --sin-cheque-certificadohttps://github.com/centos-z/EZHTTP/archive/master.zip?time=$(fecha +%s) -O servidor.zip

$ descomprimir servidor.zip

$ cd EZHTTP-maestro

$ chmod +x inicio.sh

$ ./inicio.sh

Elija 1 en la primera pantalla

Elija 1 en la segunda pantalla (LNMP)

Elija 1 cuando le pregunte qué versión de nginx desea instalar (do_not_install)

Elija 1 cuando le pregunte qué versión de MySQL desea instalar (do_not_install)

Elige qué versión quieres cuando te pregunten qué versión de PHP quieres instalar

Mantenga todas las configuraciones predeterminadas (le permitirá administrar PHP-FPM fácilmente en el futuro)

Elija qué extensiones adicionales desea; por supuesto, puede ignorarlas porque todas las extensiones comunes se instalarán más adelante.

¡Deja que este shell comience a compilarse!

información relacionada