Servidor Web · 8 min read · Feb 03, 2026

Instalando Nginx com PHP e MariaDB (como substituto do MySQL) - LEMP - no Ubuntu 15.10 (Wiley Werewolf)

Nginx (pronunciado “engine x”) é um servidor HTTP gratuito, de código aberto e de alto desempenho. O Nginx é conhecido por sua estabilidade, rico conjunto de recursos, configuração simples e baixo consumo de recursos. Este tutorial mostra como você pode instalar o Nginx em um servidor Ubuntu 15.10 com suporte a PHP (através do PHP-FPM) e MariaDB (como substituto do MySQL). O termo LEMP significa: Linux + Nginx + MySQL + PHP.

1 Nota Preliminar

Neste tutorial, usarei o nome do host server1.example.com com o endereço IP 192.168.1.100. Essas configurações podem diferir para você, então você deve substituí-las onde for apropriado.

2 Instalando MariaDB

Vou instalar o MariaDB em vez do MySQL, o MariaDB é um fork do MySQL mantido pelo fundador original do MySQL, Monty Widenius, que possui algumas melhorias de velocidade e recursos em comparação com o MySQL. Para instalar o MariaDB, execute:

sudo apt-get -y install mariadb-server mariadb-client

Atualmente, o MariaDB não possui senha definida para o usuário root. Execute o comando mysql_secure_installation para configurar uma senha e remover o banco de dados de teste.

sudo mysql_secure_installation

Você será questionado sobre estas perguntas:

Digite a senha atual para root (pressione enter para nenhuma): <-- pressione enter  
Definir senha para root? [Y/n] <-- y  
Nova senha: <-- Digite a nova senha root do MariaDB aqui  
Repetir nova senha: <-- Repita a senha  
Remover usuários anônimos? [Y/n] <-- y  
Desabilitar login remoto do root? [Y/n] <-- y  
Recarregar tabelas de privilégios agora? [Y/n] <-- y

3 Instalando Nginx

O Nginx está disponível como um pacote para o Ubuntu 15.10. Pode ser que o servidor web Apache esteja instalado em seu servidor e isso pode causar um conflito. Verifique se o Apache não está em execução:

ps aux | grep apache2

Se este comando não retornar nenhum resultado, prossiga com a instalação do Nginx.

Remova o Apache caso o comando acima mostre alguns processos do Apache com estes comandos:

sudo systemctl stop apache2.service  
sudo systemctl disable apache2.service  
sudo apt-get remove apache2

Agora podemos instalar o nginx.

sudo apt-get install nginx

Inicie o Nginx em seguida:

sudo systemctl start nginx.service  
sudo systemctl enable nginx.service

Digite o endereço IP ou nome do host do seu servidor web em um navegador (por exemplo, http://192.168.1.100), e você deve ver a seguinte página:

Página padrão do Ubuntu Nginx.

Por que ele mostra “Apache2” em vez de Nginx nessa página? O texto da página não reflete o servidor web em execução, a página acima é apenas a página padrão no Ubuntu no diretório raiz /var/www/html/ que é usado pelo Apache e Nginx. Para verificar se o Nginx está realmente servindo esta página, você pode olhar os cabeçalhos HTTP no console de análise de rede do Firefox:

Verificar cabeçalhos http do Nginx.

Ou você verifica no shell se o nginx está em execução com:

ps aux | grep nginx

O resultado deve mostrar os processos do nginx assim:

Verificar processos do Nginx.

4 Instalando PHP5

Podemos fazer o PHP5 funcionar no Nginx através do PHP-FPM. O PHP-FPM (FastCGI Process Manager) é uma implementação alternativa do PHP FastCGI com alguns recursos adicionais úteis para sites de qualquer tamanho, especialmente sites mais movimentados, que instalamos da seguinte forma:

sudo apt-get install php5-fpm

O PHP-FPM é um processo daemon (com o script init php5-fpm) que executa um servidor FastCGI no socket /var/run/php5-fpm.sock.

5 Configurando Nginx

A configuração do Nginx está no arquivo /etc/nginx/nginx.conf que abrimos agora no editor nano:

sudo nano /etc/nginx/nginx.conf

A configuração é fácil de entender (você pode aprender mais sobre isso aqui: http://wiki.nginx.org/NginxFullExample e aqui: http://wiki.nginx.org/NginxFullExample2)

Primeiro (isso é opcional) defina o keepalive_timeout para um valor razoável:

[...]  
    keepalive_timeout   2;  
[...]  

Os hosts virtuais são definidos em contêineres server {}. O vhost padrão é definido no arquivo /etc/nginx/sites-available/default - vamos modificá-lo da seguinte forma:

sudo nano /etc/nginx/sites-available/default
##  
# Você deve olhar os seguintes URLs para entender bem  
# os arquivos de configuração do Nginx para liberar totalmente o poder do Nginx.  
# http://wiki.nginx.org/Pitfalls  
# http://wiki.nginx.org/QuickStart  
# http://wiki.nginx.org/Configuration  
#  
# Geralmente, você vai querer mover este arquivo para algum lugar e começar com um arquivo limpo  
# mas mantenha isso por referência. Ou apenas desative em sites-enabled.  
#  
# Veja /usr/share/doc/nginx-doc/examples/ para exemplos mais detalhados.  
##  
  
# Configuração do servidor padrão  
#  
server {  
 listen 80 default_server;  
 listen [::]:80 default_server;  
  
 # Configuração SSL  
 #  
 # listen 443 ssl default_server;  
 # listen [::]:443 ssl default_server;  
 #  
 # Nota: Você deve desabilitar gzip para tráfego SSL.  
 # Veja: https://bugs.debian.org/773332  
 #  
 # Leia sobre ssl_ciphers para garantir uma configuração segura.  
 # Veja: https://bugs.debian.org/765782  
 #  
 # Certificados autoassinados gerados pelo pacote ssl-cert  
 # Não os use em um servidor de produção!  
 #  
 # include snippets/snakeoil.conf;  
  
 root /var/www/html;  
  
 # Adicione index.php à lista se você estiver usando PHP  
 index index.php index.html index.htm index.nginx-debian.html;  
  
 server_name _;  
  
 location / {  
 # Primeiro tente servir a solicitação como arquivo, depois  
 # como diretório, depois volte a exibir um 404.  
 try_files $uri $uri/ =404;  
 }  
  
 # passe os scripts PHP para o servidor FastCGI ouvindo em 127.0.0.1:9000  
 #  
 location ~ \.php$ {  
  include snippets/fastcgi-php.conf;  
   
  # Com php5-cgi sozinho:  
  # fastcgi_pass 127.0.0.1:9000;  
  # Com php5-fpm:  
  fastcgi_pass unix:/var/run/php5-fpm.sock;  
 }  
  
 # negar acesso a arquivos .htaccess, se o diretório raiz do Apache  
 # coincidir com o do nginx  
 #  
 #location ~ /\.ht {  
 # deny all;  
 #}  
}  
  
# Configuração do Host Virtual para example.com  
#  
# Você pode mover isso para um arquivo diferente em sites-available/ e criar um link simbólico  
# para sites-enabled/ para habilitá-lo.  
#  
#server {  
# listen 80;  
# listen [::]:80;  
#  
# server_name example.com;  
#  
# root /var/www/example.com;  
# index index.html;  
#  
# location / {  
# try_files $uri $uri/ =404;  
# }  
#}

servername ; torna este um vhost padrão que captura tudo (claro, você também pode especificar um nome de host aqui, como www.example.com).

Adicionei index.php à linha de índice. root /usr/share/nginx/html; significa que o diretório raiz do documento é o diretório /usr/share/nginx/html.

A parte importante para o PHP é a estrofe location ~ .php$ {}. Descomente-a para habilitá-la. Observe que é importante habilitar a linha “include snippets/fastcgi-php.conf;” dentro da estrofe de localização do PHP para evitar exploits de dia zero (veja http://wiki.nginx.org/Pitfalls#Passing_Uncontrolled_Requests_to_PHP e http://forum.nginx.org/read.php?2,88845,page=3).

Agora salve o arquivo e recarregue o nginx:

sudo service nginx reload

Em seguida, abra /etc/php5/fpm/php.ini…

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

… e defina cgi.fix_pathinfo=0:

[...]  
; cgi.fix_pathinfo fornece suporte *real* para PATH_INFO/PATH_TRANSLATED para CGI.  O comportamento anterior do PHP era definir PATH_TRANSLATED como SCRIPT_FILENAME, e não entender  
; o que é PATH_INFO.  Para mais informações sobre PATH_INFO, veja as especificações CGI.  Definir  
; isso como 1 fará com que o PHP CGI conserte seus caminhos para se conformar à especificação.  Um valor  
; de zero faz com que o PHP se comporte como antes.  O padrão é 1.  Você deve corrigir seus scripts  
; para usar SCRIPT_FILENAME em vez de PATH_TRANSLATED.  
; http://php.net/cgi.fix-pathinfo  
cgi.fix_pathinfo=0  
[...]  

Recarregue o PHP-FPM:

sudo service php5-fpm reload

Agora crie o seguinte arquivo PHP no diretório raiz /var/www/html:

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

Agora chamamos esse arquivo em um navegador (por exemplo, http://192.168.1.100/info.php):

Informações do PHP-FPM.

Como você pode ver, o PHP5 está funcionando, e está funcionando através do FPM/FastCGI, como mostrado na linha Server API. Se você rolar mais para baixo, verá todos os módulos que já estão habilitados no PHP5. O MySQL não está listado lá, o que significa que ainda não temos suporte ao MySQL no PHP5.

6 Obtendo Suporte ao MariaDB / MySQL no PHP

Para obter suporte ao MySQL no PHP, podemos instalar o pacote php5-mysqlnd. É uma boa ideia instalar alguns outros módulos do PHP5, pois você pode precisar deles para suas aplicações. Você pode pesquisar os módulos PHP5 disponíveis assim:

apt-cache search php5

Escolha os que você precisa e instale-os assim:

sudo apt-get install php5-mysqlnd php5-curl php5-gd php5-intl php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-ming php5-ps php5-pspell php5-recode php5-sqlite php5-tidy php5-xmlrpc php5-xsl

APCu é um cache de opcode PHP gratuito para armazenar em cache e otimizar o código intermediário PHP. É semelhante a outros caches de opcode PHP, como eAccelerator e Xcache. É altamente recomendável ter um desses instalados para acelerar sua página PHP.

O APC pode ser instalado da seguinte forma:

sudo apt-get install php5-apcu

Agora recarregue o PHP-FPM:

sudo service php5-fpm reload

Agora recarregue http://192.168.1.100/info.php em seu navegador e role para baixo até a seção de módulos novamente. Você deve agora encontrar muitos novos módulos lá, incluindo o módulo MySQL:

Informações do PHP-FPM - parte 2

7 Fazendo o PHP-FPM usar uma Conexão TCP

Por padrão, o PHP-FPM está ouvindo no socket /var/run/php5-fpm.sock. Também é possível fazer o PHP-FPM usar uma conexão TCP. Para fazer isso, abra /etc/php5/fpm/pool.d/www.conf…

sudo nano /etc/php5/fpm/pool.d/www.conf

… e faça a linha listen parecer assim:

[...]  
;listen = /var/run/php5-fpm.sock  
listen = 127.0.0.1:9000  
[...]  

Isso fará com que o PHP-FPM ouça na porta 9000 no IP 127.0.0.1 (localhost). Certifique-se de usar uma porta que não esteja em uso em seu sistema.

Em seguida, recarregue o PHP-FPM:

sudo php5-fpm reload

Próximo, passe pela sua configuração do nginx e todos os seus vhosts e mude a linha fastcgi_pass unix:/var/run/php5-fpm.sock; para fastcgi_pass 127.0.0.1:9000;, por exemplo, assim:

sudo nano /etc/nginx/sites-available/default
[...]  
 location ~ \.php$ {  
   include snippets/fastcgi-php.conf;  
  
   # Com php5-cgi sozinho:  
   fastcgi_pass 127.0.0.1:9000;  
   # Com php5-fpm:  
   # fastcgi_pass unix:/var/run/php5-fpm.sock;  
 }  
[...]  

Finalmente, recarregue o nginx:

sudo service nginx reload

8 Download da imagem da máquina virtual deste tutorial

Este tutorial está disponível como uma imagem de máquina virtual pronta para uso no formato ovf/ova, compatível com VMWare e Virtualbox. A imagem da máquina virtual usa os seguintes detalhes de login:

Login SSH / Shell

Nome de usuário: administrator
Senha: howtoforge

Este usuário tem direitos sudo.

Login do MariaDB

Nome de usuário: root
Senha: howtoforge

O IP da VM é 192.168.1.100, pode ser alterado no arquivo /etc/network/interfaces. Por favor, altere todas as senhas acima para proteger a máquina virtual.

9 Links

Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.