Poupe até 53% em Servidores VPS, escolha agora. Oferta limitada.

Passo a passo para configurar Nginx com PHP-FPM no VPS Linux: Guia Completo

17 min de leitura  ·  Guia técnico

Configurar Nginx com PHP-FPM no VPS Linux é um processo que otimiza significativamente o desempenho de aplicações web. Para implementar esta configuração, você precisa instalar e configurar corretamente ambos os serviços, além de estabelecer a comunicação entre eles. Neste guia completo, você aprenderá a configurar o Nginx com PHP-FPM em um servidor VPS Linux em aproximadamente 30 minutos, mesmo sem experiência prévia.

Pré-requisitos

  • Um servidor VPS Linux com Ubuntu 22.04, Debian 11 ou CentOS 8/9
  • Acesso root ou usuário com privilégios sudo
  • Conexão SSH ao servidor
  • Conhecimentos básicos de linha de comando Linux
  • Um domínio apontado para o IP do seu servidor (opcional, mas recomendado)

Instalando o Nginx no servidor VPS

O primeiro passo para configurar o ambiente Nginx com PHP-FPM é instalar o servidor web Nginx. O processo varia ligeiramente dependendo da distribuição Linux que você está utilizando. Vamos cobrir as distribuições mais populares.

Instalação no Ubuntu/Debian

Antes de instalar qualquer pacote, é importante atualizar os repositórios do sistema:

sudo apt update
sudo apt upgrade -y

Em seguida, instale o Nginx:

sudo apt install nginx -y

Após a instalação, inicie o serviço e configure-o para iniciar automaticamente durante o boot:

sudo systemctl start nginx
sudo systemctl enable nginx

Verifique se o Nginx está funcionando corretamente:

sudo systemctl status nginx
Output esperado:
● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2023-05-15 10:12:35 UTC; 5s ago
       Docs: man:nginx(8)
   Main PID: 12345 (nginx)
      Tasks: 2 (limit: 4915)
     Memory: 3.9M
        CPU: 40ms
     CGroup: /system.slice/nginx.service
             ├─12345 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;"
             └─12346 "nginx: worker process"

Instalação no CentOS/RHEL

Para sistemas baseados em CentOS ou RHEL, o processo é um pouco diferente:

sudo dnf update -y
sudo dnf install epel-release -y
sudo dnf install nginx -y

Inicie e habilite o serviço:

sudo systemctl start nginx
sudo systemctl enable nginx

Se o firewall estiver ativo, você precisará permitir o tráfego HTTP e HTTPS:

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

Teste o acesso ao Nginx abrindo o endereço IP do seu servidor em um navegador. Você deverá ver a página de boas-vindas padrão do Nginx.

Instalando e configurando o PHP-FPM

O PHP-FPM (FastCGI Process Manager) é uma implementação alternativa do PHP FastCGI que oferece recursos adicionais para sites com tráfego elevado. Vamos instalar o PHP-FPM e configurá-lo para trabalhar com o Nginx.

Instalação do PHP-FPM no Ubuntu/Debian

Instale o PHP-FPM e algumas extensões comumente utilizadas:

sudo apt install php8.1-fpm php8.1-common php8.1-mysql php8.1-xml php8.1-xmlrpc php8.1-curl php8.1-gd php8.1-imagick php8.1-cli php8.1-dev php8.1-imap php8.1-mbstring php8.1-opcache php8.1-soap php8.1-zip php8.1-intl -y

Inicie e habilite o serviço PHP-FPM:

sudo systemctl start php8.1-fpm
sudo systemctl enable php8.1-fpm

Verifique o status do serviço:

sudo systemctl status php8.1-fpm
Output esperado:
● php8.1-fpm.service - The PHP 8.1 FastCGI Process Manager
     Loaded: loaded (/lib/systemd/system/php8.1-fpm.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2023-05-15 10:20:35 UTC; 5s ago
       Docs: man:php-fpm8.1(8)
    Process: 12400 ExecStartPost=/usr/lib/php/php-fpm-socket-helper install /run/php/php-fpm.sock /etc/php/8.1/fpm/pool.d/www.conf 81 (code=exited, status=0/SUCCESS)
   Main PID: 12399 (php-fpm8.1)
     Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
      Tasks: 3 (limit: 4915)
     Memory: 9.3M
        CPU: 55ms
     CGroup: /system.slice/php8.1-fpm.service
             ├─12399 "php-fpm: master process (/etc/php/8.1/fpm/php-fpm.conf)"
             ├─12401 "php-fpm: pool www"
             └─12402 "php-fpm: pool www"

Instalação do PHP-FPM no CentOS/RHEL

Para sistemas CentOS/RHEL, o processo é o seguinte:

sudo dnf install -y https://rpms.remirepo.net/enterprise/remi-release-8.rpm
sudo dnf module reset php
sudo dnf module enable php:remi-8.1 -y
sudo dnf install php php-fpm php-common php-mysqlnd php-xml php-xmlrpc php-curl php-gd php-imagick php-cli php-devel php-imap php-mbstring php-opcache php-soap php-zip php-intl -y

Inicie e habilite o serviço:

sudo systemctl start php-fpm
sudo systemctl enable php-fpm

Configurando o PHP-FPM

Agora, vamos ajustar a configuração do PHP-FPM para melhorar o desempenho. Edite o arquivo de configuração principal:

Para Ubuntu/Debian:

sudo nano /etc/php/8.1/fpm/pool.d/www.conf

Para CentOS/RHEL:

sudo nano /etc/php-fpm.d/www.conf

Localize e modifique as seguintes linhas (ou adicione-as se não existirem):

user = nginx
group = nginx

listen.owner = nginx
listen.group = nginx
listen.mode = 0660

pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500

Atenção: Os valores acima são recomendados para um VPS com 4GB de RAM. Para servidores com menos recursos, ajuste os valores de pm.max_children e outros parâmetros proporcionalmente.

Salve o arquivo e reinicie o PHP-FPM:

sudo systemctl restart php8.1-fpm  # Ubuntu/Debian
# ou
sudo systemctl restart php-fpm    # CentOS/RHEL

Configurando o Nginx para trabalhar com PHP-FPM

Agora que temos o Nginx e o PHP-FPM instalados e funcionando, precisamos configurar o Nginx para processar arquivos PHP através do PHP-FPM. Vamos criar um arquivo de configuração para o nosso site.

Criando um Server Block (Virtual Host)

Para Ubuntu/Debian, crie um novo arquivo de configuração:

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

Para CentOS/RHEL:

sudo nano /etc/nginx/conf.d/meusite.conf

Adicione o seguinte conteúdo, substituindo "meudominio.com" pelo seu domínio real:

server {
    listen 80;
    server_name meudominio.com www.meudominio.com;
    root /var/www/html/meusite;
    index index.php index.html index.htm;

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

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/run/php/php8.1-fpm.sock;  # Ubuntu/Debian
        # fastcgi_pass unix:/var/run/php-fpm/www.sock;  # CentOS/RHEL (descomente esta linha e comente a anterior)
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
        fastcgi_buffer_size 128k;
        fastcgi_buffers 4 256k;
        fastcgi_busy_buffers_size 256k;
    }

    location ~ /\.ht {
        deny all;
    }

    # Configurações para arquivos estáticos
    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
        expires 30d;
        add_header Cache-Control "public, no-transform";
    }
}

Se você estiver usando CentOS/RHEL, certifique-se de comentar a linha do socket do Ubuntu/Debian e descomentar a linha do CentOS/RHEL.

Para Ubuntu/Debian, ative o site criando um link simbólico:

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

Criando o diretório do site

Crie o diretório para os arquivos do seu site:

sudo mkdir -p /var/www/html/meusite

Defina as permissões corretas:

sudo chown -R www-data:www-data /var/www/html/meusite  # Ubuntu/Debian
# ou
sudo chown -R nginx:nginx /var/www/html/meusite        # CentOS/RHEL

Testando a configuração do PHP

Crie um arquivo PHP de teste para verificar se a integração entre Nginx e PHP-FPM está funcionando:

sudo nano /var/www/html/meusite/info.php

Adicione o seguinte conteúdo:

<?php
phpinfo();
?>

Verifique a sintaxe da configuração do Nginx:

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

Se a sintaxe estiver correta, reinicie o Nginx:

sudo systemctl restart nginx

Agora, acesse http://seu-dominio.com/info.php ou http://seu-ip/info.php em seu navegador. Você deverá ver a página de informações do PHP, confirmando que o Nginx está processando corretamente os arquivos PHP através do PHP-FPM.

Atenção: Por razões de segurança, remova o arquivo info.php após confirmar que tudo está funcionando:

sudo rm /var/www/html/meusite/info.php

Otimizando a configuração do Nginx e PHP-FPM

Para obter o melhor desempenho do seu servidor, vamos ajustar algumas configurações adicionais tanto no Nginx quanto no PHP-FPM.

Otimizando o Nginx

Edite o arquivo de configuração principal do Nginx:

sudo nano /etc/nginx/nginx.conf

Dentro do bloco "http", adicione ou modifique as seguintes configurações:

http {
    # Configurações básicas
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    server_tokens off;

    # Configurações de buffer
    client_max_body_size 64m;
    client_body_buffer_size 128k;
    client_header_buffer_size 1k;
    large_client_header_buffers 4 4k;

    # Configurações de cache
    open_file_cache max=1000 inactive=20s;
    open_file_cache_valid 30s;
    open_file_cache_min_uses 2;
    open_file_cache_errors on;

    # Configurações de gzip
    gzip on;
    gzip_disable "msie6";
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_buffers 16 8k;
    gzip_http_version 1.1;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

    # Restante da configuração...
}

Otimizando o PHP-FPM

Edite o arquivo de configuração do PHP:

Para Ubuntu/Debian:

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

Para CentOS/RHEL:

sudo nano /etc/php.ini

Localize e modifique as seguintes configurações:

memory_limit = 256M
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 300
max_input_time = 300
display_errors = Off
expose_php = Off
opcache.enable = 1
opcache.memory_consumption = 128
opcache.interned_strings_buffer = 8
opcache.max_accelerated_files = 4000
opcache.revalidate_freq = 60
opcache.fast_shutdown = 1

Salve o arquivo e reinicie o PHP-FPM:

sudo systemctl restart php8.1-fpm  # Ubuntu/Debian
# ou
sudo systemctl restart php-fpm    # CentOS/RHEL

Reinicie também o Nginx:

sudo systemctl restart nginx

Configurando HTTPS com Let's Encrypt

Para garantir a segurança do seu site, é altamente recomendável configurar HTTPS. Vamos usar o Let's Encrypt para obter um certificado SSL gratuito.

Instalando o Certbot

Para Ubuntu/Debian:

sudo apt install certbot python3-certbot-nginx -y

Para CentOS/RHEL:

sudo dnf install certbot python3-certbot-nginx -y

Obtendo e configurando o certificado

Execute o Certbot para obter e configurar automaticamente o certificado:

sudo certbot --nginx -d meudominio.com -d www.meudominio.com

Siga as instruções na tela. O Certbot irá modificar automaticamente a configuração do Nginx para usar HTTPS e configurar o redirecionamento de HTTP para HTTPS.

Verifique se a renovação automática está configurada:

sudo systemctl status certbot.timer

Se não estiver ativo, habilite-o:

sudo systemctl enable certbot.timer

Teste a renovação automática (sem realmente renovar o certificado):

sudo certbot renew --dry-run

Problemas comuns e como resolver

Sintoma: Erro 502 Bad Gateway

Causa: Este erro geralmente ocorre quando o Nginx não consegue se comunicar com o PHP-FPM. Pode ser devido a permissões incorretas do socket, PHP-FPM não estar em execução ou configuração incorreta.
Solução: Verifique se o PHP-FPM está em execução com sudo systemctl status php8.1-fpm. Confirme se o caminho do socket no arquivo de configuração do Nginx está correto. Verifique as permissões do socket com ls -la /run/php/ e ajuste as permissões se necessário.

Sintoma: Arquivos PHP são baixados em vez de executados

Causa: O Nginx não está configurado corretamente para processar arquivos PHP através do PHP-FPM.
Solução: Verifique o bloco location ~ \.php$ na configuração do seu site. Certifique-se de que o fastcgi_pass está apontando para o socket correto e que todas as diretivas fastcgi_param estão presentes.

Sintoma: Erro "File not found" para arquivos PHP existentes

Causa: Problemas de permissão ou configuração incorreta do parâmetro SCRIPT_FILENAME.
Solução: Verifique as permissões dos arquivos PHP com ls -la /var/www/html/meusite/. Certifique-se de que o usuário do Nginx (www-data ou nginx) tem permissão para ler os arquivos. Confirme se a diretiva fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; está presente na configuração.

Sintoma: Desempenho lento do PHP

Causa: Configuração inadequada do PHP-FPM para os recursos do servidor.
Solução: Ajuste os parâmetros do PHP-FPM no arquivo www.conf, especialmente pm.max_children, pm.start_servers, pm.min_spare_servers e pm.max_spare_servers de acordo com os recursos disponíveis. Ative o OpCache no php.ini e ajuste suas configurações.

Sintoma: Erro "Permission denied" nos logs do Nginx

Causa: SELinux (em sistemas CentOS/RHEL) ou permissões de arquivo incorretas.
Solução: Para SELinux, execute sudo setsebool -P httpd_can_network_connect 1 e sudo setsebool -P httpd_unified 1. Para problemas de permissão, ajuste as permissões com sudo chown -R nginx:nginx /var/www/html/meusite (ou www-data:www-data para Ubuntu/Debian).

Perguntas frequentes sobre Nginx com PHP-FPM

Qual a vantagem do Nginx com PHP-FPM em relação ao Apache?

O Nginx com PHP-FPM oferece melhor desempenho para sites com tráfego elevado, consumindo menos memória RAM e processador. Enquanto o Apache usa um modelo baseado em processos, o Nginx trabalha com eventos assíncronos, permitindo gerenciar milhares de conexões simultâneas com recursos limitados.

É possível migrar de Apache para Nginx sem perder configurações?

Sim, é possível migrar do Apache para Nginx mantendo as configurações essenciais, mas será necessário converter regras de .htaccess para o formato do Nginx. Você precisará adaptar diretivas de reescrita, controle de acesso e configurações de cache, além de ajustar os virtual hosts para o formato de server blocks do Nginx.

Quais são os requisitos mínimos de hardware para rodar Nginx com PHP-FPM?

Para um VPS Linux executando Nginx com PHP-FPM, o mínimo recomendado é 1GB de RAM, 1 vCPU e 20GB de armazenamento. Para sites com tráfego moderado, 2GB de RAM e 2 vCPUs oferecem melhor desempenho, especialmente se você estiver executando aplicações como WordPress ou Magento.

Como configurar o Nginx para trabalhar com WordPress?

Para configurar o Nginx com WordPress, você precisa criar um server block específico com regras de reescrita para permalinks, definir o PHP-FPM como handler para arquivos .php, e configurar o acesso a wp-admin. Também é recomendável adicionar regras de cache para arquivos estáticos e configurar limites de upload adequados para o wp-content/uploads.

É necessário reiniciar o Nginx após cada alteração de configuração?

Não é necessário reiniciar o Nginx completamente após cada alteração, basta usar o comando 'nginx -t' para testar a sintaxe e depois 'systemctl reload nginx' para recarregar a configuração sem interromper conexões ativas. Isso permite aplicar mudanças sem downtime, ideal para ambientes de produção.

Conclusão

Configurar o Nginx com PHP-FPM em um servidor VPS Linux é uma excelente maneira de otimizar o desempenho das suas aplicações web. Neste guia, você aprendeu:

  • Como instalar e configurar o Nginx e o PHP-FPM em diferentes distribuições Linux
  • Como integrar o Nginx com o PHP-FPM para processar arquivos PHP
  • Como otimizar as configurações para obter o melhor desempenho
  • Como configurar HTTPS com certificados gratuitos do Let's Encrypt
  • Como solucionar problemas comuns que podem surgir durante a configuração

Com esta configuração, seu servidor estará pronto para hospedar aplicações web modernas com excelente desempenho e segurança. Lembre-se de manter seu sistema atualizado e monitorar regularmente o desempenho para garantir que tudo continue funcionando de maneira ideal.

Precisa de ajuda com seu servidor VPS?

A AviraHost oferece servidores VPS Linux otimizados com suporte técnico especializado 24/7. Nossos planos incluem recursos de alta performance e painel de controle intuitivo para facilitar a administração do seu servidor.

Conheça nossos planos de Servidor VPS

  • 0 Usuários acharam útil
  • nginx, php-fpm, vps, linux, performance, webserver, AviraHost
Esta resposta lhe foi útil?

Artigos Relacionados

Instalando painel de gerenciamento de hospedagem VirtualMin.

O virtualmin é um painel de gerenciamento de hospedagem de sites gratuito, que é suportado por...

Como usar a ferramenta oficial de acesso remoto do Windows no PC e celular

1. Pelo menu Iniciar, acesse os “Acessórios do Windows” e abra o “Conexão de Área de Trabalho...

Como acessar o painel de gerenciamento dos meus Serviços.

Para acessar o painel de gerenciamento do seu serviço basta seguir o passo á passo abaixo.   1....

Compreendendo o Servidor VPS: O que é e Como Funciona!

Um servidor VPS (Virtual Private Server) é uma solução de hospedagem na qual um servidor físico é...

Como trocar a senha do usuário root do servidor VPS ou Dedicado.

Para trocar a senha do usuário root em um servidor VPS da AviraHost, você pode seguir os...