Instalação do PHP 7 no CentOS 7 com Nginx

Introdução

Neste tutorial pretendo abordar a instalação do PHP 7 na distribuição CentOS versão 7 com o servidor web Nginx.

Pré-requisitos

CentOS instalado (preferencialmente na versão minimal).

Instalação

Nginx

A instalação do Nginx é bem simples pelo repositório EPEL:

# yum install epel-release
# yum install nginx

PHP

Como o PHP 7.x ainda não está empacotado em repositórios oficiais para as principais distribuições, confiaremos em uma fonte de terceiros. Vários repositórios oferecem arquivos PHP 7 em RPM. Usaremos o repositório IUS (Inline with Upstream Stable).

O IUS oferece um script de instalação para se inscrever no seu repositório e importar as chaves GPG associadas. Certifique-se de que você está no seu diretório pessoal e baixe o script usando o curl:

$ cd ~
$ curl 'https://setup.ius.io/' -o setup-ius.sh

Execute o script:

$ sudo bash setup-ius.sh

Instale os pacotes PHP7 do IUS.

# yum install php71u-fpm-nginx php71u-cli php71u-mysqlnd

Configuração

Uma vez que a instalação tem terminado, você precisará fazer algumas mudanças na configuração do PHP-FPM e do Nginx. Conforme configurado, o PHP-FPM escuta por conexões em um socket TCP local, enquanto o Nginx espera por um socket de domínio Unix, que mapeia para um caminho no sistema de arquivos.

PHP-FPM

PHP-FPM pode lidar com múltiplas “pools” de processos filhos. Como configurado, fornece uma única pool chamada “www”, que está definida em /etc/php-fpm.d/www.conf. Edite esse arquivo assim:

# vim /etc/php-fpm.d/www.conf
;listen = 127.0.0.1:9000
listen = /run/php-fpm/www.sock
listen.acl_users = nginx

Nginx

No próximo passo, precisamos ter certeza que o Nginx está usando o caminho correto do socket para lidar com os arquivos PHP. Isso poderá ser feito no arquivo php-fpm.conf. Esse arquivo define um upstream, que pode ser referenciado por outra diretiva na configuração do Nginx.

# vim /etc/nginx/conf.d/php-fpm.conf
upstream php-fpm {
#server 127.0.0.1:9000;
server unix:/run/php-fpm/www.sock;
}

Agora vamos configurar o “server blocks” no Nginx. Essa configuração permite que o Nginx trabalhe de forma semelhante ao VirtualHosts do Apache.

# vim /etc/nginx/nginx.conf
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*.conf;
#    server {
#        listen       80 default_server;
#        listen       [::]:80 default_server;
#        server_name  _;
#        root         /usr/share/nginx/html;
#
#        # Load configuration files for the default server block.
#        include /etc/nginx/default.d/*.conf;
#
#        location / {
#        }
#
#        error_page 404 /404.html;
#            location = /40x.html {
#        }
#
#        error_page 500 502 503 504 /50x.html;
#            location = /50x.html {
#        }
#    }

Criar os diretórios de configuração dos sites:

# mkdir /etc/nginx/sites-available/
# mkdir /etc/nginx/sites-enabled/

Criar a configuração do site:

# vim /etc/nginx/sites-available/site-php7.conf
server {
listen 80;
server_name php7.example.com;
access_log /var/log/nginx/php7_access.log;
error_log /var/log/nginx/php7_error.log;
root /srv/www/php7;

location / {
index index.php;
}

location ~ \.php$ {
include fastcgi_params;
fastcgi_pass  php-fpm;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}

Ativar o site:

# cd /etc/nginx/sites-enabled/

# ln -s ../sites-available/site-php7.conf

Testar a configuração do nginx:

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

Criar o diretório do site:

# mkdir -p /srv/www/php7/

Iniciar os serviços:

# systemctl start {nginx,php-fpm}

Configurar o SELinux:

# chcon -Rv -u system_u -r object_r -t httpd_sys_content_t /srv/www/

Feito isso, agora vamos criar um arquivo index.php com a função phpinfo para testar se está tudo bem:

# vim /srv/www/php7/index.php

<?php phpinfo(); ?>

Agora, basta configurarmos o nosso DNS para o site atribuído na configuração do site criado. Assim, basta acessarmos o site:

 

Fontes

Digital Ocean – How To Upgrade to PHP 7 on CentOS 7

Configuring SELinux Policies for Apache Web Servers

How To Set Up Nginx Server Blocks on CentOS 7