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-clientAtualmente, 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_installationVocê 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] <-- y3 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 apache2Se 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 apache2Agora podemos instalar o nginx.
sudo apt-get install nginxInicie o Nginx em seguida:
sudo systemctl start nginx.service
sudo systemctl enable nginx.serviceDigite 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:

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:

Ou você verifica no shell se o nginx está em execução com:
ps aux | grep nginxO resultado deve mostrar os processos do nginx assim:

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-fpmO 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.confA 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 reloadEm 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 reloadAgora crie o seguinte arquivo PHP no diretório raiz /var/www/html:
sudo nano /var/www/html/info.phpAgora chamamos esse arquivo em um navegador (por exemplo, http://192.168.1.100/info.php):

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 php5Escolha 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-xslAPCu é 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-apcuAgora recarregue o PHP-FPM:
sudo service php5-fpm reloadAgora 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:

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 reloadPró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 reload8 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
- nginx: http://nginx.net/
- wiki do nginx: http://wiki.codemongers.com/Main
- PHP: http://www.php.net/
- PHP-FPM: http://php-fpm.org/
- MySQL: http://www.mysql.com/
- Ubuntu: http://www.ubuntu.com/
Receba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.