Configurando Nginx e Apache para diversas versões do PHP

Sejam, bem vindos ao quinto post do blog, tendo em vista que já temos um Nginx configurado e/ou um Apache , iremos prepara-los para poder executar as diversas versões do PHP.

Sendo necessário seguir os passos dos posts:
Configurando NGINX, PHP-FPM e Mysql no Fedora
Instalando mais de uma versão do PHP com repositórios Remi

Configurando o Nginx

Iremos criar um host para testar a versão 5.6 do php

1- criar um diretório para testar versão

sudo mkdir /var/www/html/testar_versao/ ; echo '<?php phpinfo();?>'; /var/www/html/testar_versao/index.php

RETIRANDO CONFIGURAÇÃO PADRÃO DE EXECUÇÃO DO PHP

No arquivo /etc/nginx/default.d o bloco deverá estar comentado como o exemplo abaixo, caso não esteja , comente e salve

#location ~ \.php$ {
#    try_files $uri =404;
#    fastcgi_intercept_errors on;
#    fastcgi_index  index.php;
#    include        fastcgi_params;
#    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
#    fastcgi_pass   php-fpm;
#}

Com isso , sendo necessário configurar em cada host (em /etc/nginx/conf.d)

Criando parâmetro para nova versão

Em /etc/nginx/conf.d/php-fpm.conf

upstream php-fpm {
    server unix:/run/php-fpm/www.sock;
}

upstream php56-fpm {
	server unix:/opt/remi/php56/root/var/run/php-fpm/www.sock;
}

Adicionar php56-fpm o mesmo deve ser feito para contemplar novas versões do php configuradas

Criando host para aplicação : testando php

vim /etc/nginx/conf.d/testar_versao.conf;

E adicione o seguinte conteúdo

server {
    listen       80;
    server_name  testarversao.local;
    #root         /usr/share/nginx/html;
	root         /var/www/html/testar_versao;

    # Load configuration files for the default server block.
    include /etc/nginx/default.d/*.conf;

    location / {
    }
	
	location ~ \.php$ {
         root           /var/www/html/testar_versao;
         try_files $uri =404;
         fastcgi_split_path_info ^(.+\.php)(/.+)$;
         fastcgi_pass   php56-fpm;
		 fastcgi_index  index.php;
         fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
         include        fastcgi_params;
    }
	
}

Onde podemos notar que a propriedade (location ~ \.php$)
O atributo recebe

fastcgi_pass   php56-fpm;

Ao salvar verificar sintaxe do arquivo

nginx -t

Com output

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

altere o arquivo /etc/hosts

E adicione o host testarversao.local ao ip 127.0.0.1
E reinicie o nginx

systemctl reload nginx

Verifique o resultado em : (http://testarversao.local/)

Caso quisermos usar o php corrente do sistema operacional.

Na propriedade (location ~ \.php$)

O atributo deve ser alterado para:

fastcgi_pass  php-fpm;

E reiniciar o Nginx.

Com o seguinte resultado.


Com isso finalizando o processo para o Nginx.

Configurando o Apache

Para configurar o apache é necessario alterar o script:
/etc/httpd/conf.d/fcgid.conf

sudo vim /etc/httpd/conf.d/fcgid.conf

E adicionar o trecho:

<IfModule mod_fcgid.c>
    # Use FastCGI to process .fcg .fcgi &amp;amp; .fpl scripts
    AddHandler fcgid-script fcg fcgi fpl

    # PHP 5.6
    Action application/x-httpd-php56 /cgi-bin/php56.fcgi
    AddType application/x-httpd-php56 .php56

    # PHP default
    Action application/x-httpd-php-default /cgi-bin/php-default.fcgi
    AddType application/x-httpd-php-default .php-default

    # Sane place to put sockets and shared memory file
    FcgidIPCDir /var/run/mod_fcgid
    FcgidProcessTableFile /var/run/mod_fcgid/fcgid_shm
</IfModule>

onde serão criados os modulos para leitura das versões expecificadas acima.

Iremos criar o arquivo de configuração do php default.

sudo vim /var/www/cgi-bin/php-default.fcgi

com os seguintes dados:

#!/bin/bash
PHPRC="/etc/php.ini"
PHP_CGI="/usr/bin/php-cgi"
PHP_FCGI_CHILDREN=8
PHP_FCGI_MAX_REQUESTS=3000
export PHPRC
export PHP_FCGI_CHILDREN
export PHP_FCGI_MAX_REQUESTS
exec $PHP_CGI

E salve.
E o arquivo para o php 5.6.

sudo vim /var/www/cgi-bin/php56.fcgi
#!/bin/bash
PHPRC="/opt/remi/php56/root/etc/php.ini"
PHP_CGI="/opt/remi/php56/root/bin/php-cgi"
PHP_FCGI_CHILDREN=8
PHP_FCGI_MAX_REQUESTS=3000
export PHPRC
export PHP_FCGI_CHILDREN
export PHP_FCGI_MAX_REQUESTS
exec $PHP_CGI

E salve.

Criando host para aplicação.

sudo vim /etc/httpd/testarversao.conf

Observação estou usando a porta 81 para executar o Apache caso use como 80 ou outra , alterar <VirtualHost *:81>
para <VirtualHost *:80> por exemploCom o conteúdo:

 

<VirtualHost *:81>
DocumentRoot /var/www/html/testar_versao/
ServerName testarversao.local
ServerAlias testarversao.local
ErrorLog /var/www/html/testar_versao/LOG/http_log
CustomLog /var/www/html/testar_versao/LOG/example.com-access_log common
 
<Directory /var/www/html>
 Options Indexes FollowSymLinks MultiViews
 AllowOverride all
 Order allow,deny
 allow from all
 <IfModule mod_fcgid.c>
 <FilesMatch \.php$>
 SetHandler application/x-httpd-php56
 </FilesMatch>
 </IfModule>
</Directory>
</VirtualHost>

E Salve.

Reinicie o Apache.

systemctl reload httpd

verificando resultado em : (http://testarversao.local:81/)

 

alterando parâmetro:

SetHandler application/x-httpd-php56
para
SetHandler application/x-httpd-php-default

verificando novamente.

 

É isso aí espero ter sido claro na explicação. Valeu e até a próxima!

 

Instalando mais de uma versão do PHP com repositórios Remi

Sejam, bem vindos ao quarto post do blog, onde iremos preparar duas versões do PHP .
São as versões 5.6 e a versão 7.0 que é a versão atual da versão 25 do Fedora.

Iremos configurar o servidor Apache para realizar esta troca de maneira simples.

Iniciamos com a execução do seguinte comando

wget http://rpms.famillecollet.com/fedora/remi-release-25.rpm; sudo dnf install remi-release-25.rpm

Tendo o seguinte retorno

--2017-01-07 17:24:07--  http://rpms.famillecollet.com/fedora/remi-release-25.rpm
Resolvendo rpms.famillecollet.com (rpms.famillecollet.com)... 2001:bc8:33a1:100::1, 195.154.241.117
Conectando-se a rpms.famillecollet.com (rpms.famillecollet.com)|2001:bc8:33a1:100::1|:80... conectado.
A requisição HTTP foi enviada, aguardando resposta... 200 OK
Tamanho: 12957 (13K) [application/x-rpm]
Salvando em: “remi-release-25.rpm.1”

remi-release-25.rpm 100%[===================&amp;amp;gt;]  12,65K  --.-KB/s    in 0,003s 

Failed to synchronize cache for repo 'postinstallerf-updates', desativando.
Última verificação de data de vencimento de metadados: 1:44:52 atrás em Sat Jan  7 15:39:43 2017.
Dependências resolvidas.
================================================================================
 Package            Arq.         Versão                Repo                Tam.
================================================================================
Instalando:
 remi-release       noarch       25-1.fc25.remi        @commandline        13 k

Resumo da transação
================================================================================
Instalar  1 Pacote

Tamanho total: 13 k
Tamanho depois de instalado: 4.4 k

Correto? [s/N]: s
Baixando pacotes:
Executando verificação da transação
Verificação de transação completa.
Executando teste de transação
Teste de transação completo
Executando a transação
  Instalando    : remi-release-25-1.fc25.remi.noarch                                                                                                                1/1 
  Verificando   : remi-release-25-1.fc25.remi.noarch                                                                                                                1/1 

Instalados:
  remi-release.noarch 25-1.fc25.remi                                                                                                                                    

Concluído!

 

Após isso , realizar o update

sudo dnf update

Após a instalação , iremos instalar o PHP , PHP-FPM e extensões úteis

sudo dnf --enablerepo=remi install php56-php-fpm php56-php-cli php56-php-mysqlnd php56-php-gd php56-php-imap php56-php-ldap php56-php-odbc php56-php-pear php56-php-xml php56-php-xmlrpc php56-php-magickwand php56-php-mbstring php56-php-mcrypt php56-php-mssql php56-php-snmp php56-php-soap php56-php-tidy php56-php-opcache

Obtendo a saida

Instalados:
  php56-php-cli.x86_64 5.6.28-1.fc25.remi                   php56-php-common.x86_64 5.6.28-1.fc25.remi             php56-php-fpm.x86_64 5.6.28-1.fc25.remi              
  php56-php-gd.x86_64 5.6.28-1.fc25.remi                    php56-php-imap.x86_64 5.6.28-1.fc25.remi               php56-php-ldap.x86_64 5.6.28-1.fc25.remi             
  php56-php-magickwand.x86_64 1.0.9.2-9.fc25.remi           php56-php-mbstring.x86_64 5.6.28-1.fc25.remi           php56-php-mcrypt.x86_64 5.6.28-1.fc25.remi           
  php56-php-mssql.x86_64 5.6.28-1.fc25.remi                 php56-php-mysqlnd.x86_64 5.6.28-1.fc25.remi            php56-php-odbc.x86_64 5.6.28-1.fc25.remi             
  php56-php-opcache.x86_64 5.6.28-1.fc25.remi               php56-php-pdo.x86_64 5.6.28-1.fc25.remi                php56-php-pear.noarch 1:1.10.1-7.fc25.remi           
  php56-php-pecl-jsonc.x86_64 1.3.10-1.fc25.remi            php56-php-pecl-zip.x86_64 1.13.5-1.fc25.remi           php56-php-process.x86_64 5.6.28-1.fc25.remi          
  php56-php-snmp.x86_64 5.6.28-1.fc25.remi                  php56-php-soap.x86_64 5.6.28-1.fc25.remi               php56-php-tidy.x86_64 5.6.28-1.fc25.remi             
  php56-php-xml.x86_64 5.6.28-1.fc25.remi                   php56-php-xmlrpc.x86_64 5.6.28-1.fc25.remi             php56-runtime.x86_64 2.1-5.fc25.remi        

poderemos efetuar a instalação de outros módulos com o comando

dnf --enablerepo=remi install php56-php-svn 

Os pacotes instalados estão presentes em /opt/remi/php56
Conferindo Instalação

Para Conferir a Instalação basta executar

php56 -v

Com output

PHP 5.6.28 (cli) (built: Nov  9 2016 06:26:30) 
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
    with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies

Conferindo php-fpm

systemctl status php56-php-fpm

Com output

Main PID: 22349 (php-fpm)
   Status: &amp;quot;Ready to handle connections&amp;quot;
    Tasks: 6 (limit: 4915)
   CGroup: /system.slice/php56-php-fpm.service
           ├─22349 php-fpm: master process (/opt/remi/php56/root/etc/php-fpm.conf)
           ├─22350 php-fpm: pool www
           ├─22351 php-fpm: pool www
           ├─22352 php-fpm: pool www
           ├─22353 php-fpm: pool www
           └─22354 php-fpm: pool www

Jan 07 19:17:06 caramelo systemd[1]: Starting The PHP FastCGI Process Manager...
Jan 07 19:17:06 caramelo systemd[1]: Started The PHP FastCGI Process Manager.

Criando link simbólico

systemctl enable php56-php-fpm

Com output

Created symlink /etc/systemd/system/multi-user.target.wants/php56-php-fpm.service → /usr/lib/systemd/system/php56-php-fpm.service.

Configurando serviço php-fpm

Alterar o arquivo

/opt/remi/php56/root/etc/php-fpm.d/www.conf

Alterar parametro de ip listen

listen.allowed_clients = 127.0.0.1

Para

listen.allowed_clients = 127.0.0.56

E adicionar o parametro include_path

php_value[include_path]=".:/opt/remi/php56/root/usr/share/pear:/opt/remi/php56/root/usr/share/php:/usr/share/pear:/usr/share/php"

Iremos também configurar os servidores Apache e Nginx para  aceitar este recurso no post:
Configurando Nginx e Apache para diversas versões do PHP

É isso aí espero ter sido claro na explicação. Valeu e até a próxima!