Servidor Web · 8 min read · Oct 13, 2025

Instalando Nginx com PHP 7 e MySQL 5.7 (LEMP) no Ubuntu 16.04 LTS

Nginx (pronunciado “engine x”) é um servidor HTTP de alto desempenho, gratuito e de código aberto. 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 16.04 com suporte a PHP 7 (através do PHP-FPM) e suporte a MySQL 5.7 (LEMP = Linux + nginx (pronunciado “engine x”) + MySQL + PHP).

1 Nota Preliminar

Neste tutorial, uso 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 apropriado.

Estou executando todos os passos deste tutorial com privilégios de root, então certifique-se de que você está logado como root:

sudo -s

2 Instalando MySQL 5.7

Para instalar o MySQL, executamos:

apt-get -y install mysql-server mysql-client

Você será solicitado a fornecer uma senha para o usuário root do MySQL - essa senha é válida para o usuário root@localhost, bem como para [email protected], então não precisamos especificar uma senha root do MySQL manualmente mais tarde:

Nova senha para o usuário “root” do MySQL: <– sua senha root sql Repita a senha para o usuário “root” do MySQL: <– sua senha root sql

Para proteger o servidor de banco de dados e remover o usuário anônimo e o banco de dados de teste, execute o comando mysql_secure_installation.

mysql_secure_installation

Você será solicitado a responder a estas perguntas:

root@server1:~# mysql_secure_installation
Protegendo a implantação do servidor MySQL.
Digite a senha para o usuário root: <-- Digite a senha root do MySQL
O PLUGIN DE VALIDAÇÃO DE SENHA pode ser usado para testar senhas
 e melhorar a segurança. Ele verifica a força da senha
 e permite que os usuários definam apenas aquelas senhas que são
 suficientemente seguras. Você gostaria de configurar o plugin DE VALIDAÇÃO DE SENHA?
Pressione y|Y para Sim, qualquer outra tecla para Não: <-- Pressione y se você quiser essa função ou pressione Enter caso contrário.
Usando a senha existente para root.
Mudar a senha para root? ((Pressione y|Y para Sim, qualquer outra tecla para Não) : <-- Pressione enter
... pulando.
Por padrão, uma instalação do MySQL tem um usuário anônimo,
 permitindo que qualquer um faça login no MySQL sem ter que ter
 uma conta de usuário criada para eles. Isso é destinado apenas para
 testes, e para tornar a instalação um pouco mais suave.
Você deve removê-los antes de passar para um ambiente de produção.
Remover usuários anônimos? (Pressione y|Y para Sim, qualquer outra tecla para Não) : <-- y
Sucesso.
Normalmente, o root deve ser permitido apenas conectar-se de
 'localhost'. Isso garante que alguém não possa adivinhar a
 senha root pela rede.
Desabilitar login remoto para root? (Pressione y|Y para Sim, qualquer outra tecla para Não) : <-- y
Sucesso.
Por padrão, o MySQL vem com um banco de dados chamado 'test' que
 qualquer um pode acessar. Isso também é destinado apenas para testes,
 e deve ser removido antes de passar para um ambiente de produção.
Remover banco de dados de teste e acesso a ele? (Pressione y|Y para Sim, qualquer outra tecla para Não) : <-- y
- Removendo banco de dados de teste...
Sucesso.
- Removendo privilégios no banco de dados de teste...
Sucesso.
Recarregar as tabelas de privilégios garantirá que todas as mudanças
 feitas até agora tenham efeito imediato.
Recarregar tabelas de privilégios agora? (Pressione y|Y para Sim, qualquer outra tecla para Não) : <-- y
Sucesso.
Tudo pronto!

O MySQL está agora seguro.

3 Instalando Nginx

Caso você já tenha instalado o Apache2, remova-o primeiro com esses comandos e depois instale o nginx:

service apache2 stop
update-rc.d -f apache2 remove
apt-get remove apache2

O Nginx está disponível como um pacote para Ubuntu 16.04 que podemos instalar.

apt-get -y install nginx

Inicie o nginx em seguida:

service nginx start

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:

A página padrão do Nginx no Ubuntu.

O diretório raiz do documento padrão do nginx no Ubuntu 16.04 é /var/www/html.

4 Instalando PHP 7

Podemos fazer o PHP funcionar no nginx através do PHP-FPM (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:

apt-get -y install php7.0-fpm

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

5 Configurando o nginx

A configuração do nginx está em /etc/nginx/nginx.conf, que abrimos agora:

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) ajuste 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:

nano /etc/nginx/sites-available/default
[...]
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.html index.htm index.nginx-debian.html;

 server_name _;

 location / {
 # Primeira tentativa de servir a solicitação como arquivo, depois
 # como diretório, depois voltar 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 php7.0-cgi sozinho:
 # fastcgi_pass 127.0.0.1:9000;
 # Com php7.0-fpm:
 fastcgi_pass unix:/run/php/php7.0-fpm.sock;
 }

 # negar acesso a arquivos .htaccess, se o diretório raiz do documento do Apache
 # coincidir com o do nginx
 #
 location ~ /\.ht {
  deny all;
 }
}
[...]

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

root /var/www/html; significa que o diretório raiz do documento é o diretório /var/www/html.

A parte importante para o PHP é a estrofe location ~ .php$ {}. Descomente-a para habilitá-la.

Agora salve o arquivo e recarregue o nginx:

service nginx reload

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

nano /etc/php/7.0/fpm/php.ini

… e defina cgi.fix_pathinfo=0:

[...]
; cgi.fix_pathinfo fornece suporte *real* para PATH_INFO/PATH_TRANSLATED para CGI. PHP's
; comportamento anterior 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 corrija 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:

service php7.0-fpm reload

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

nano /var/www/html/info.php

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

PHP Info no Ubuntu com Nginx.

Como você pode ver, o PHP 7 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 PHP. O MySQL não está listado lá, o que significa que ainda não temos suporte ao MySQL no PHP.

6 Obtendo Suporte ao MySQL no PHP 7

Para obter suporte ao MySQL no PHP, podemos instalar o pacote php7.0-mysql. É uma boa ideia instalar alguns outros módulos PHP também, pois você pode precisar deles para suas aplicações. Você pode procurar módulos PHP disponíveis assim:

apt-cache search php7.0

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

apt-get -y install php7.0-mysql php7.0-curl php7.0-gd php7.0-intl php-pear php-imagick php7.0-imap php7.0-mcrypt php-memcache php7.0-pspell php7.0-recode php7.0-sqlite3 php7.0-tidy php7.0-xmlrpc php7.0-xsl php7.0-mbstring php-gettext

APCu é uma extensão para o módulo Opcache do PHP que vem com o PHP 7, ela adiciona alguns recursos de compatibilidade para softwares que suportam o cache APC (por exemplo, plugins de cache do Wordpress).

APCu pode ser instalado da seguinte forma:

apt-get -y install php-apcu

Agora recarregue o PHP-FPM:

service php7.0-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:

Os Módulos PHP foram instalados.

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

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

nano /etc/php/7.0/fpm/pool.d/www.conf

… e faça com que a linha listen fique 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.

Então recarregue o PHP-FPM:

php7.0-fpm reload

Em seguida, percorra sua configuração do nginx e todos os seus vhosts e mude a linha fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; para fastcgi_pass 127.0.0.1:9000;, por exemplo, assim:

nano /etc/nginx/sites-available/default
[...]
        location ~ \.php$ {
 include snippets/fastcgi-php.conf;

 # Com php7.0-cgi sozinho:
 fastcgi_pass 127.0.0.1:9000;
 # Com php7.0-fpm:
 # fastcgi_pass unix:/run/php/php7.0-fpm.sock;
 }
[...]

Finalmente, recarregue o nginx:

service nginx reload

É isso. O servidor Nginx LEMP está instalado.

8 Links

Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.