Instalando o Nginx no Ubuntu e configurando o PHP 8.1


Este post tem como objetivo servir de guia para quem deseja instalar o Nginx no Ubuntu 22.x, incluindo a instalação do PHP 8.1 e as suas configurações básicas.

Antes de qualquer coisa, é bom certificar que a lista de repositórios do Linux está atualizada:

sudo apt-get update


Parte 1. Instalando o Nginx

Logo em seguida, vamos instalar o nginx:

sudo apt-get install nginx


Pronto. Essa é a parte mais tranquila. Isso já basta para ter o nginx instalado e provavelmente funcionando no seu Ubuntu. Pode validar executando o comando sudo service nginx status. Também pode abrir o Firefox (ou qualquer outro navegador instalado) e acessar http://localhost (ou http://127.0.0.1). Caso o serviço esteja parado ou sem execução, tente iniciá-lo. Fiz um post recentemente ensinando os comandos para iniciar, parar e reiniciar os serviços no linux.

Parte 2. Instalando o PHP 8.1

Ao escolher entre Nginx e Apache2 para hospedar seu site, minha preferência é clara: Nginx. Mas, lógico, preciso analisar caso a caso.  Ele é mais leve e tem um melhor desempenho em máquinas com restrição de memória. No entanto, é importante entender que ele lida com as requisições web de forma diferente e trabalha com alguns módulos específicos para interpretar linguagens como o PHP.

No caso do Nginx, ele usa o PHP-FPM, sigla para "PHP FastCGI Process Manager", é um gerenciador de processos FastCGI para PHP. FastCGI é um protocolo que permite que aplicações web, como o PHP, se comuniquem com um servidor web de forma mais eficiente do que o método tradicional de interpretação de scripts PHP a cada requisição.

Ao usar o PHP-FPM, o servidor web, como o Nginx, se comunica com o PHP-FPM através do protocolo FastCGI, passando as requisições PHP para o processo PHP-FPM correspondente. Isso permite uma execução mais eficiente e escalonável de scripts PHP em servidores web.

sudo apt-get install php8.1-fpm

Também já vamos deixar instalado o modulo de conexão com o MySQL para o futuro:

sudo apt-get install php8.1-mysql

Existe uma configuração do php que precisa ser alterada para que ele trabalhe bem com o nginx. Ela está no arquivo php.ini. Para editar vamos usar o comando:

sudo nano /etc/php/8.1/fpm/php.ini


Procure por pathinfo. A linha estará com um ";" (ponto e virgula) no inicio. Pode remover. Também é preciso mudar o valor de 1 para 0. A imagem acima ilustra como deverá ficar. Feito isso, pode salvar e sair.

Parte 3. Configurando um virtual host local

Agora para fechar, vamos criar uma URL local para ver o funcionamento do nginx com o PHP. Para isso vamos configurar um vhost que servirá apenas local para teste (bom também para ambiente de desenvolvimento... já é meio caminho para a instalação do Laravel ;)).

sudo nano /etc/hosts

Vamos acrescentar na lista o caminho 127.0.0.1 testeapp. Veja a imagem como deve ficar:

Feito isso, pode salvar e sair.

Agora, para avançar, precisamos configurar a URL dentro do Nginx. Abaixo está uma referência para ajudar. É importante notar que já está preparado para futuras instalações do Laravel. Claro, assim que estiver mais familiarizado com as configurações, sinta-se à vontade para personalizar conforme sua preferência. Este é o modelo que eu gosto de usar. Pode copiar o conteúdo abaixo, pois colaremos dentro do arquivo de configuração.

 server { 
    listen 80;
    server_name testeapp;
    root /var/www/vhosts/testeapp/public;

    index index.html index.htm index.php;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    access_log off;
    error_log  /var/log/nginx/testeapp-error.log error;

    error_page 404 /index.php;

    sendfile off;

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_intercept_errors on;
        fastcgi_buffer_size 16k;
        fastcgi_buffers 4 16k;
    }
location ~ /\.ht { deny all; } }

Vamos criar o arquivo de configuração do site no nginx em /etc/nginx/sites-available. 

sudo nano /etc/nginx/sites-available/testeapp.conf

Depois de colar o conteúdo que você copiou acima, basta salvar e sair. 

Com isso o nginx já sabe que tem um novo site disponível. Agora precisamos dizer para ele que esse site está ativo. Para isso, vamos criar um caminho virtual no diretório sites-enabled. Veja o comando:

cd /etc/nginx/sites-enabled
sudo ln -s ../sites-available/testeapp.conf

Agora vamos criar o diretório apontado no vhost e também um arquivo PHP de teste.

sudo mkdir -p /var/www/vhosts/testeapp/public

e para criar o arquivo de teste:

sudo nano /var/www/vhosts/testeapp/public/index.php

O  conteúdo do arquivo, ponha apenas para printar o phpindo. Veja a imagem do conteúdo abaixo:

Para fechar, vamos reiniciar os serviços do nginx e do php-fpm:

sudo service nginx restart
sudo service php8.1-fpm restart

Agora pelo navegador, podemos testar a URL http://testeapp. Ela deverá retornar o phpinfo. Veja a imagem abaixo:


Conclusão

Peço desculpas pelo post longo, mas foi necessário para fornecer instruções detalhadas. Agora você está pronto para instalar o Nginx e o PHP 8.1, e também aprendeu a configurar um ambiente básico de web host. Essas habilidades são muito úteis para ambientes de teste ou desenvolvimento. Obrigado por acompanhar!