Como instalar o PHP 7.2 com Nginx no Ubuntu 18.04

Servidores Linux 20 de Novembro de 2019 às 19:48

Este artigo utilizou um droplet da Digital Ocean usando a imagem do Ubuntu 18.04 para realizar os testes. Caso você já tenha alguma configuração em seu Nginx, preste muita atenção com os comandos executados, pois eles podem substituir suas configurações!

Antes de realizarmos qualquer procedimento, iremos atualizar nosso sistema para garantir que estaremos pegando os últimos pacotes disponíveis. Primeiramente faça login em seu servidor com a conta de super usuário e em seguida execute o comando abaixo para atualizar seu servidor.

apt update && apt upgrade

Verifique os pacotes que serão atualizados e pressione Y para continuar.

Instalando o Nginx

Caso você já tenha o NGINX instalado, pule esta etapa, do contrário, apenas execute o comando abaixo para realizar a instalação do Nginx.

apt install nginx

Somente este comando é necessário para realizar a instalação, que pode ser conferida simplesmente acessando o endereço IP de seu servidor.

Tela inicial do Nginx

O próximo passo é realizar a instalação do PHP e realizar a configuração do Nginx.

Instalando o PHP 7.2

Para instalar o PHP 7.2, iremos utilizar o pacote "php-fpm", que é necessário para sua integração com o Nginx. Iremos também instalar os pacotes mais comuns da linguagem PHP, que são utilizadas por diversas aplicações. Você também pode instalar pacotes adicionais para PHP posteriormente.

Execute o comando abaixo para instalar o PHP.

apt install php-fpm php-mysql php-xml php-soap php-xmlrpc php-mbstring php-json php-gd

Caso você tenha tido problemas com a execução do comando acima, como por exemplo, a falta de determinado pacote, adicione o repositório "universe" do Ubuntu. Execute este comando somente se você teve problemas no comando acima!

add-apt-repository universe

Em seguida tente executar a instalação dos pacotes do PHP novamente.

Ao término da instalação, digite "php -v" no terminal para verificar se a instalação foi bem sucedida. Caso tenha sido, será exibida a versão do PHP atualmente instalada.

PHP 7.2.24-0ubuntu0.18.04.1 (cli) (built: Oct 28 2019 12:07:07) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.2.24-0ubuntu0.18.04.1, Copyright (c) 1999-2018, by Zend Technologies

Agora iremos realizar a configuração do Nginx para utilizar o PHP.

Configurando o Nginx

Iremos criar um novo "bloco de configurações" dentro da pasta "/etc/nginx/sites-available/". O bloco de configurações do Nginx é equivalente à um VirtualHost do Apache2.

As configurações que faremos abaixo, irão manter o mesmo comportamento do Nginx para o site padrão, que é responder pelo endereço IP e usar os arquivos dentro da pasta "/var/www/html". Mais a frente neste artigo iremos demonstrar um bloco de configuração usando um domínio.

Crie o arquivo com o seu editor de preferência. Neste artigo estaremos usando o "nano".

nano /etc/nginx/sites-available/php-default

Dentro do editor, copie e cole o bloco de configurações abaixo. Lembre-se que para colar dentro de um terminal Unix, você deve utilizar o botão direito e não o "Ctrl+V".

server {
        listen 80 default_server;                                               
        listen [::]:80 default_server;
        root /var/www/html;
        index index.php index.html index.htm index.nginx-debian.html;
        server_name _;
        
        location / {
                try_files $uri $uri/ =404;
        }

        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
        }

        location ~ /\.ht {
                deny all;
        }
}

Pressione "Ctrl+X", em seguida digite "Y" e tecle "ENTER" para salvar.

Com o bloco de configuração criado, iremos substituir o bloco padrão pelo que acabamos de criar. Basta criar um link simbólico do arquivo dentro da pasta "/etc/nginx/sites-enabled/" e remover o link simbólico do bloco padrão deste diretório. Este procedimento pode ser realizado executando os comandos abaixo (um por vez).

ln -s /etc/nginx/sites-available/php-default /etc/nginx/sites-enabled/
unlink /etc/nginx/sites-enabled/default

Teste as configurações do Nginx usando o comando "nginx -t".

[email protected]:~# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Caso o retorno do comando seja o mesmo que o exibido acima, basta recarregar o serviço para que as alterações surtam efeito.

service nginx reload

Feito isso, qualquer arquivo ".php" que você deixar dentro da pasta "/var/www/html", será executado pelo seu servidor.

Testando as configurações

Para verificar se o procedimento ocorreu como o esperado, vamos criar um arquivo chamado "info.php" dentro da pasta "/var/www/html", e chamar a função "phpinfo()". Este procedimento pode ser feito usando o comando abaixo.

echo "<?php phpinfo();" >> /var/www/html/info.php

Agora basta acessar a página "info.php" em seu servidor através do navegador.

Tela do phpinfo()

Caso tudo tenha ocorrido como o esperado, você verá a tela do comando "phpinfo()" exibindo informações sobre o seu servidor, o que significa que o PHP está instalado e pronto para ser utilizado.

Lembrando que este comando revela informações muito importantes sobre seu servidor, então após realizar os testes é recomendável removê-la.

rm /var/www/html/info.php

Configurando o Nginx para usar um domínio.

Podemos também fazer o nosso servidor responder à domínios específicos com diferentes configurações, possibilitando a utilização de diversos sites dentro do mesmo servidor.

Iremos utilizar o exemplo do "www2" do "tecdicas.com" (pois o "www" já está em uso e não pretendo removê-lo apenas para este teste 👌), no entanto, você pode utilizar o endereço que bem entender.

Vamos criar o bloco de configurações para o "www2".

nano /etc/nginx/sites-available/www2-tecdicas

Com o editor aberto, cole as configurações abaixo.

server {
        listen 80;                                               
        listen [::]:80;
        root /var/www/tecdicas;
        index index.php index.html index.htm index.nginx-debian.html;
        server_name www2.tecdicas.com tecdicas.com;
        
        location / {
                try_files $uri $uri/ =404;
        }

        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
        }

        location ~ /\.ht {
                deny all;
        }
}

Salve o arquivo. Note que as diferenças para o primeiro arquivo foram basicamente as primeiras linhas.

# removemos o default_server
listen 80;                                               
listen [::]:80;

# alteramos o diretório para tecdicas
root /var/www/tecdicas;

# configuramos o servidor para responder ao www2.tecdicas.com
server_name www2.tecdicas.com;

Ativaremos então este site usando um link simbólico para a pasta "/etc/nginx/sites-enabled".

ln -s /etc/nginx/sites-available/www2-tecdicas /etc/nginx/sites-enabled/

Como o diretório "/var/www/tecdicas" não existe, teremos de criar e já aproveitaremos para criar também um "index.php" para nosso site.

mkdir -p /var/www/tecdicas
echo "<?php echo 'Hello World';" >> /var/www/tecdicas/index.php

Verifique as configurações do nginx usando "nginx -t" e caso tudo esteja correto, recarregue o serviço.

service nginx reload

O último passo é apontar o DNS do subdomínio "www2" para nosso servidor. No tecdicas usamos o Cloudflare para gerenciar nossos registros de DNS.

Configuração de registro do tipo "A" para o subdomínio "www2"

Após aguardar alguns segundos, acessamos o endereço "www2.tecdicas.com" em nosso navegador (não tente acessar em seu navegador pois eu já removi este subdomínio assim que terminei este artigo)

O arquivo index.php foi carregado no domínio www2.tecdicas.com

Caso acesse o endereço de IP do servidor, verá que continua a mesma coisa, ou seja, sem alteração.

Página padrão do Nginx, sem alterações

Desta forma podemos utilizar vários websites dentro do mesmo servidor.

Para desativar o site, basta remover o link simbólico e recarregar o nginx.

Caso tenha tido alguma dúvida ou se perdido durante o processo, deixe seu comentário abaixo. Aproveite e veja também nossos artigos sobre servidores.

Renan Cavalieri

Analista de Sistemas e autor do tecdicas