Nginx e diferentes versões de PHP FPM + PHP

Nginx e diferentes versões de PHP FPM + PHP

Devido a uma melhor compreensão do que desejo alcançar graças aMarcae seu anteriorresponder, estou postando uma variação (espero) mais clara e ligeiramente diferente da minha pergunta anterior, pois o tópico atingiu a saturação;

Estou tentando executar vários sites WordPress em um servidor nginx, onde cada site requer uma versão diferente de PHP. Desejo conseguir isso usando várias versões do PHP-FPM, cada uma executando uma versão diferente do PHP, separada do nginx.

Quero então usar .confarquivos para controlar qual servidor PHP-FPM cada site usa, permitindo que esse site seja executado na versão PHP desejada.(Conformecomentáriosseção)

Atualmente meu bloco de servidor para testite1 se parece com isso, executando a versão padrão do PHP.

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;
    }
}

Ele está localizado /var/nginx/sites-available/testsite1e está vinculado simbolicamente a /var/nginx/sites-enabled/testsite1. Cada bloco de servidor está localizado em um arquivo separado dentrosites-available

testsite1
testsite2
testsite3

Compilei uma versão diferente do PHP (5.3.3), mas não tenho certeza de como configurar vários servidores PHP-FPM e como fazer cada 'ponto' para uma versão diferente do PHP. Também preciso de orientação sobre como configurar vários .confarquivos para definir qual servidor PHP-FPM cada site WordPress usará.

(essencialmente, preciso de ajuda durante todo o processo...)

Responder1

Na minha experiência, uma estrutura de servidor simples como segue, que é suficiente para o seu caso.

Suposição

Você tem cerca de duas horas para configurá-los.

Suposição de ambiente de servidor

1 x servidor Nginx (Front-end, para processar arquivos estáticos)

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

1 x servidor de banco de dados (em outro servidor separado ou no servidor Nginx está tudo bem)

O servidor Nginx pode ser acessado porRede públicaeRede privada

Servidores PHP-FPM e servidor DB só podem ser acessados ​​pelo servidor Nginx (Rede privada)

Rede pública, o que significa que pode ser acessado por pessoas que possuem internet.

Rede privada, que pode ser visto em um grupo de rede específico. (Classe A, Classe B, Classe C. Ex, 192.xx.xx.xx ou 10.xx.xx.xx ou 172.xxx.xxx.xxx)

Se você estiver usando VPS no Linode e DigitalOcean, ambos fornecem IP de rede privada, você pode seguir as instruções fornecidas por eles para configurá-lo.

Caso contrário, você pode configurar o seu próprioVPN (rede privada virtual)ou use seu roteador para construir um, é fácil, você pode pesquisar no Google tudo o que precisa.

Se você estiver usando Ubuntu, fazer uma VPN com configuração custa apenas menos de 5 minutos.

Antes da próxima etapa, sugiro que você configure as regras de firewall para evitar possíveis ataques. (Usando IPTABLES ou seu wrapper, FirewallD)

Embora façamos o PHP-FPM dedicado do Nginx, os arquivos PHP dos sites não podem ser passados ​​​​pela porta TCP e pelo soquete Unix.

Assim, você deve gerenciar sua pasta raiz do servidor web.

Opções para gerenciar a pasta do site

  1. Fazendo upload de seus sites para o servidor Nginx E servidores PHP-FPM com o MESMO PATH da pasta

  2. Escreva um script para arquivos síncronos para todos os seus servidores

  3. Usando GIT para todos os seus servidores.

  4. Criando um NFS (Network File System) no Nginx ou outro servidor dedicado

Se você estiver usando o sistema *nix, sugiro a quarta opção devido a,

Primeiro, gerencie todos os arquivos do seu site em um servidor

Em segundo lugar, muito fácil de manter

Terceiro, backup em minutos (esta deve ser outra questão)

※ O servidor NFS atua como um servidor de armazenamento puro para seus sites

Algumas pessoas podem considerar o uso do NFS para causar latência na rede; no entanto, como para vários sites que aguardam para serem gerenciados, o NFS é uma maneira simples e eficiente.

Você pode usar o GOOGLE "NFS on Linux" para concluir a instalação e configuração desta etapa, custa cerca de 1 hora para o mais recente.

No entanto, esteja ciente de que o servidor NFS deve estar em umRede privadatambém.

Quando NFS, PHP-FPM e Nginx estão no mesmoRede privada, a latência da rede deverá ser menor.

Então vamos configurar onginx.conf

Suposição

Seu IP público Nginx é 202.123.abc.abc, ouça 80 (ou 443 se SSL estiver habilitado)

Seu PHP-FPM 5.5 está em 192.168.5.5, ouça 9008

Seu PHP-FPM 5.6 está em 192.168.5.6, ouça 9008

(exemplo adicional) Seu HHVM 3.4 está em 192.168.5.7 , ouça 9008

E você considera que o PHP 5.5 é sua versão PHP mais usada

    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; 

As linhas acima devem ser colocadas antes da última}

Então, vá criando uma pasta chamada vhostsdentro da pasta denginx.conf

Suposição

Você tem outro aplicativo usando PHP 5.6

Você tem outro aplicativo 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;
     }

Desta forma, você pode até adicionar diferentes certificados SSL para seus vhosts.

Reinicie seu servidor e divirta-se!

EDITADO

Para instalar diferentes versões do PHP-FPM, você pode compilá-lo sozinho ou usando a pilha existente.

Recomendo https://github.com/centos-bz/EZHTTP/archive/master.zip economizar seu tempo

Usando o método, (supondo que sua máquina tenha instalado WGET e UNZIP)

$ wget --no-check-certificadohttps://github.com/centos-z/EZHTTP/archive/master.zip?time=$(data +%s) -O server.zip

$ descompacte server.zip

$ cd mestre EZHTTP

$ chmod +x start.sh

$./start.sh

Escolha 1 na primeira tela

Escolha 1 na segunda tela (LNMP)

Escolha 1 ao perguntar qual versão do nginx você deseja instalar (do_not_install)

Escolha 1 ao perguntar qual versão do mysql você deseja instalar (do_not_install)

Escolha qual versão você deseja ao perguntar qual versão do PHP você deseja instalar

Mantenha todas as configurações como padrão (faça com que você gerencie PHP-FPM facilmente no futuro)

Escolha quais extensões extras você deseja, é claro que você pode ignorar, pois todas as extensões comuns serão instaladas posteriormente.

Deixe este shell começar a compilar!

informação relacionada