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

 

Geowany Galdino escreveu 45 artigos

Assistente em Tecnologia da Informação na Universidade Federal do Acre. Licenciado em História na mesma instituição.

4 comentários em “Instalação do PHP 7 no CentOS 7 com Nginx

  1. Bruno comentou:

    Obrigado pelo tutorial.
    até um certo ponto deu certo, porem ao dar start ao php-fpm percebo que existe algum erro,
    esse é um log do que ocorre:

    Starting The PHP FastCGI Process Manager...
    [05-Jun-2017 17:24:02] ERROR: [pool www] failed to read the ACL of the socket '/var/run/php-fpm.sock': Operation not supported (95)
    [05-Jun-2017 17:24:02] ERROR: FPM initialization failed
    php-fpm.service: main process exited, code=exited, status=78/n/a
    Failed to start The PHP FastCGI Process Manager.
    Unit php-fpm.service entered failed state.
    php-fpm.service failed.

    pesquisei sobre, e tentei de tudo, a forma foi mudar para:
    listen = 127.0.0.1:9000
    e
    server 127.0.0.1:9000;
    #server unix:/run/php-fpm/www.sock;

    1. Geowany Galdino comentou:

      Se aparece essa mensagem, você pode conferir se indicou corretamente a configuração do php-fpm para o caminho que eu especifiquei?

      /var/run é um symlink para /run e eu indiquei o socket de domínio Unix para /run/php-fpm/www.sock e não para /var/run/php-fpm.sock (Note que o socket está dentro de um diretório ao invés de estar “solto” na /run como na tua mensagem de erro)

      Já que os dois serviços geralmente estarão na mesma máquina, usar um socket de domínio Unix garante mais performance do que deixar os serviços se comunicando por TCP/IP.

Deixe um comentário

Seu endereço de email não será publicado. Os campos com * são obrigatórios

Você pode usar estes tags e atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>