Servidor Web · 6 min read · Dec 27, 2025

Instalando Nginx Com Suporte a PHP5 (E PHP-FPM) E MySQL (LEMP) No Ubuntu 12.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 12.04 LTS com suporte a PHP5 (através do PHP-FPM) e suporte a MySQL (LEMP = L inux + nginx (pronunciado “ e ngine x”) + M ySQL + P HP).

Eu não dou nenhuma garantia de que isso funcionará para você!

1 Nota Preliminar

Neste tutorial, uso o nome do host server1.example.com com o endereço IP 192.168.0.100. Essas configurações podem diferir para você, então você deve substituí-las onde for 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 su

2 Instalando MySQL 5

Para instalar o MySQL, executamos

 apt-get 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 do sql Repita a senha para o usuário “root” do MySQL: <– sua senha root do sql

3 Instalando Nginx

O Nginx está disponível como um pacote para o Ubuntu 12.04 que podemos instalar da seguinte forma:

 apt-get install nginx

Inicie o nginx em seguida:

 /etc/init.d/nginx start

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

O diretório raiz do documento padrão do nginx no Ubuntu 12.04 é /usr/share/nginx/www.

4 Instalando PHP5

Podemos fazer o PHP5 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 install php5-fpm

O PHP-FPM é um processo daemon (com o script de inicialização /etc/init.d/php5-fpm) que executa um servidor FastCGI na porta 9000.

5 Configurando nginx

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

 vi /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 número de processos de trabalho e defina o keepalive_timeout para um valor razoável:

| [...] worker_processes 4; [...] 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:

 vi /etc/nginx/sites-available/default

| [...] server { listen 80; ## escutar por ipv4; esta linha é padrão e implícita listen [::]:80 default ipv6only=on; ## escutar por ipv6 root /usr/share/nginx/www; index index.php index.html index.htm; # Torne o site acessível a partir de http://localhost/ server_name _; location / { # Primeiro tente servir a solicitação como arquivo, depois # como diretório, depois volte para index.html try_files $uri $uri/ /index.html; # Descomente para habilitar naxsi nesta localização # include /etc/nginx/naxsi.rules } location /doc/ { alias /usr/share/doc/; autoindex on; allow 127.0.0.1; deny all; } # Apenas para nginx-naxsi : processar solicitações negadas #location /RequestDenied { # Por exemplo, retornar um código de erro #return 418; #} #error_page 404 /404.html; # redirecionar páginas de erro do servidor para a página estática /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/www; } # passar os scripts PHP para o servidor FastCGI ouvindo em 127.0.0.1:9000 # location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi_params; } # negar acesso a arquivos .htaccess, se o diretório raiz do documento do Apache # coincidir com o do nginx # location ~ \/\.ht { deny all; } } [...] |

Descomente ambas as linhas listen para fazer o nginx escutar na porta 80 IPv4 e IPv6.

servername ; torna isso um vhost padrão catchall (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/www; significa que o diretório raiz do documento é o diretório /usr/share/nginx/www.

A parte importante para o PHP é o trecho location ~ .php$ {}. Descomente-o para habilitá-lo. Observe que adicionei a linha try_files $uri =404; para evitar exploits de zero-day (veja http://wiki.nginx.org/Pitfalls#Passing_Uncontrolled_Requests_to_PHP e http://forum.nginx.org/read.php?2,88845,page=3). Alternativamente, se você não quiser usar a linha try_files $uri =404;, você pode definir cgi.fix_pathinfo = 0; em /etc/php5/fpm/php.ini (não se esqueça de recarregar o PHP-FPM depois).

Agora salve o arquivo e recarregue o nginx:

/etc/init.d/nginx reload

Agora crie o seguinte arquivo PHP no diretório raiz do documento /usr/share/nginx/www:

vi /usr/share/nginx/www/info.php

| |

Agora chamamos esse arquivo em um navegador (por exemplo, http://192.168.0.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 a MySQL no PHP5.

6 Obtendo Suporte a MySQL No PHP5

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

apt-cache search php5

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

 apt-get install php5-mysql 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-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl

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

O Xcache pode ser instalado da seguinte forma:

apt-get install php5-xcache

Agora recarregue o PHP-FPM:

/etc/init.d/php5-fpm reload

Agora recarregue http://192.168.0.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 um Socket Unix

Por padrão, o PHP-FPM está ouvindo na porta 9000 em 127.0.0.1. Também é possível fazer o PHP-FPM usar um socket Unix, o que evita a sobrecarga do TCP. Para fazer isso, abra /etc/php5/fpm/pool.d/www.conf…

vi /etc/php5/fpm/pool.d/www.conf

… e faça a linha listen parecer assim:

| [...] ;listen = 127.0.0.1:9000 listen = /tmp/php5-fpm.sock [...] |

Então recarregue o PHP-FPM:

/etc/init.d/php5-fpm reload

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

vi /etc/nginx/sites-available/default

| [...] location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/tmp/php5-fpm.sock; fastcgi_index index.php; include fastcgi_params; } [...] |

Finalmente, recarregue o nginx:

/etc/init.d/nginx reload

8 Scripts CGI/Perl

Se você quiser servir scripts CGI/Perl com o nginx, por favor, leia este tutorial: Servindo Scripts CGI Com Nginx No Debian Squeeze/Ubuntu 11.04

A maneira recomendada é usar fcgiwrap (capítulo 4).

9 Links

Sobre o Autor

Falko Timme é o proprietário da Timme Hosting (hospedagem web nginx ultra-rápida). Ele é o principal mantenedor do HowtoForge (desde 2005) e um dos desenvolvedores principais do ISPConfig (desde 2000). Ele também contribuiu para o livro da O’Reilly “Administração de Sistema Linux”.

Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.