Nginx e diferentes versões do PHP FPM + PHP

4

Devido a um melhor entendimento do que desejo alcançar graças a Mark e suas anteriores responder , estou postando uma variação (esperançosamente) mais clara e ligeiramente diferente da minha pergunta anterior, já que o segmento atingiu a saturação;

Eu estou tentando ter vários sites WordPress em um servidor nginx, onde cada site requer uma versão diferente do PHP. Eu quero conseguir isso usando várias versões do PHP-FPM, cada uma executando uma versão diferente do PHP, separada para nginx.

Eu, então, quero usar .conf files para controlar qual servidor PHP-FPM cada site usa, permitindo que o site seja executado na versão do PHP desejada. (De acordo com a seção comentários )

Atualmente, meu bloco de servidor para testsite1 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;
    }
}

Está localizado em /var/nginx/sites-available/testsite1 e está ligado ao /var/nginx/sites-enabled/testsite1 . Cada bloco de servidor é a localização em um arquivo separado em sites-available

testsite1
testsite2
testsite3

Eu 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. Eu também preciso de orientação sobre como configurar vários arquivos .conf para definir qual servidor PHP-FPM cada site WordPress usará.

(essencialmente, eu preciso de mãos dadas durante todo o processo ...)

    
por myol 27.02.2015 / 16:44

1 resposta

7

Na minha experiência, uma estrutura de servidor simples da seguinte forma, o que é suficiente para o seu caso.

Suposição

You have about two hours to set them up.

Suposição de ambiente do servidor

1 x Nginx server (Front-end, to process static files)

2 x PHP-FPM server (Back-end, to process PHP script)

1 x database server (Either in another separated server or in Nginx server is okay)

Nginx server can be accessed by Public Network and Private Network

PHP-FPM servers and DB server can only be accessed by Nginx server (Private Network)

Rede pública , o que significa que pode ser acessado por pessoas que têm internet.

Rede privada , que pode ser vista 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 o VPS no Linode e no DigitalOcean, ambos fornecerão IP de rede privada, você poderá seguir as instruções dadas por eles para configurá-lo.

Se não, você pode configurar sua própria VPN (Rede Privada Virtual) ou usar seu roteador para criar um, é fácil, você pode GOOGLE tudo o que você precisa.

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

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

Embora façamos o PHP-FPM como dedicado a partir do Nginx, no entanto, os arquivos PHP dos sites não podem ser passados através da porta TCP e do Unix.

Assim, você precisa gerenciar sua pasta raiz para o servidor da Web.

Opções para gerenciar a pasta do site

  1. Uploading your websites to Nginx server AND PHP-FPM servers with SAME folder PATH

  2. Write a script to synchronous files to all of your servers

  3. Using GIT to all your servers.

  4. Creating a NFS (Network File System) on Nginx or another dedicated server

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

First, manage all your websites files in one server

Second, very easy to maintain

Third, backup in minutes (This should be another question)

※ NFS server acts as a pure storage server for your websites

Algumas pessoas podem considerar o uso da latência de rede do NFS, no entanto, como para vários sites que estão aguardando para serem gerenciados, o NFS é uma maneira simples e eficiente.

Você pode usar o GOOGLE "NFS no Linux" para concluir a instalação e configuração dessa etapa, o que custa cerca de uma hora para ser mais recente.

No entanto, esteja ciente de que o servidor NFS também deve estar em uma Rede Privada .

Quando o NFS, o PHP-FPM e o Nginx estão na mesma Rede Privada , a latência da rede deve ser menor.

Então vamos configurar o nginx.conf

Suposição

Your Nginx public IP is 202.123.abc.abc, listen 80(or 443 if SSL enabled)

Your PHP-FPM 5.5 is on 192.168.5.5, listen 9008

Your PHP-FPM 5.6 is on 192.168.5.6, listen 9008

(additional example) Your HHVM 3.4 is on 192.168.5.7 , listen 9008

And you consider PHP 5.5 is your most used PHP version

    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; 

Above lines should be put before the last }

Em seguida, vá criando uma pasta chamada vhosts dentro da pasta de nginx.conf

Suposição

You have another one application is using PHP 5.6

You have another application is using 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;
     }

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

Reinicie seu servidor e divirta-se!

EDITADO

Para instalar diferentes versões do PHP-FPM, você pode compilar você mesmo, ou usando uma pilha existente.

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

Usando o método, (Assumindo que sua máquina instalou o WGET e o UNZIP)

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

$ unzip server.zip

$ cd EZHTTP-master

$ chmod +x start.sh

$ ./start.sh

Choose 1 in the first screen

Choose 1 in the second screen (LNMP)

Choose 1 when asking you which version of nginx you want to install(do_not_install)

Choose 1 when asking you which version of mysql you want to install(do_not_install)

Choose what version you want when asking you which version of PHP you want to install

Remain all settings be the default (Make you manage PHP-FPM easily in the future)

Choose what extra extensions you want, of course you can ignore cause all common extensions will be installed later.

Let this shell start compiling!

    
por 27.02.2015 / 17:37