Nginx ( Pronuncia: Engine-X ) é open-source, servidor de alto desempenho HTTP e proxy reverso, bem como um servidor proxy de IMAP/POP3. Igor Sysoev iniciou o desenvolvimento do Nginx em 2002, com o primeiro lançamento público em 2004 o Nginx agora abriga cerca de 12,18% (22.2M) de domínios. Nginx é conhecido pelo seu alto desempenho, estabilidade, rico conjunto de recursos, configuração simples e baixo consumo de recursos.
Nginx é um servidores escritos para resolver o problema C10K . Ao contrário dos servidores tradicionais, Nginx não depende de tópicos para processar pedidos. Em vez disso, usa um event-driven arquitetura muito mais escalável (assíncrono). Esta arquitetura utiliza pequenas, mas mais importante, valores previsíveis de memória sob carga. ( http://wiki.nginx.org/Main )
Em passos bem completos vamos iniciar a instalação e configuração desse excelente servidor WEB, vou tentar detalhar ao máximo ou pelo menos informar o que fazer sem erros, pois é um processo chato. Vamos lá:
1 – Instalação do PHP5
sudo apt-get install php5-common
sudo apt-get install php5-gd
sudo apt-get install php5-cli
sudo apt-get install php5-curl
sudo apt-get install php5-fpm
No passo acima a instalação mais importante é a do php5-fpm
2 – Configurando o PHP5 FPM
Abra o arquivo: /etc/php5/fpm/php.ini…
sudo vi /etc/php5/fpm/php.ini
… procure e mude o parâmetro “cgi.fix_pathinfo=0”:
[...] ; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI. PHP's ; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok ; what PATH_INFO is. For more information on PATH_INFO, see the cgi specs. Setting ; this to 1 will cause PHP CGI to fix its paths to conform to the spec. A setting ; of zero causes PHP to behave as before. Default is 1. You should fix your scripts ; to use SCRIPT_FILENAME rather than PATH_TRANSLATED. ; http://php.net/cgi.fix-pathinfo cgi.fix_pathinfo=0 [...]
Neste mesmo arquivo mude o Charset para UTF-8 (opcional):
default_charset = "utf-8"
[...] ; PHP's default character set is set to empty. ; http://php.net/default-charset default_charset = "utf-8" [...]
Por ultimo vamos alterar o tipo do listener do FPM, por padrão ele vem configurado para TCP, vamos mudar para Unix Socket que é mais rápido.
sudo vi /etc/php5/fpm/pool.d/www.conf
Altere o valor do parametro “listen = 127.0.0.1:9000” para:
listen = /var/run/php5-fpm.sock
[...] ; The address on which to accept FastCGI requests. ; Valid syntaxes are: ; 'ip.add.re.ss:port' - to listen on a TCP socket to a specific address on ; a specific port; ; 'port' - to listen on a TCP socket to all addresses on a ; specific port; ; '/path/to/unix/socket' - to listen on a unix socket. ; Note: This value is mandatory. ;listen = 127.0.0.1:9000 listen = /var/run/php5-fpm.sock [...]
5 – Configurando o FastCGI
Edite o arquivo:
sudo vi /etc/nginx/fastcgi_params
Adicione a seguinte linha ao arquivo:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
6 – Configurando o NginX
Edite o arquivo:
sudo vi /etc/nginx/nginx.conf
A configuração é fácil de entender (você pode aprender mais sobre ele aqui: http://wiki.nginx.org/NginxFullExample e aqui: http://wiki.nginx.org/NginxFullExample2)
Em primeiro lugar (isso é opcional). Vamos ajustar o número de processos de trabalho e definir o keepalive_timeout para um valor razoável:
[...] worker_processes 4; [...] keepalive_timeout 2; [...]
7 – Configurando os Hosts Virtuais
Os hosts virtuais são definidos em recipientes server{}. O vhost padrão é definido no arquivo /etc/nginx/sites-available/default – vamos modificá-lo da seguinte forma:
[...] server { listen 80; ## listen for ipv4; this line is default and implied listen [::]:80 default_server ipv6only=on; ## listen for ipv6 root /usr/share/nginx/www; index index.php index.html index.htm; # Make site accessible from http://localhost/ server_name localhost; location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. try_files $uri $uri/ /index.html; # Uncomment to enable naxsi on this location # include /etc/nginx/naxsi.rules } location /doc/ { alias /usr/share/doc/; autoindex on; allow 127.0.0.1; allow ::1; deny all; } # Only for nginx-naxsi used with nginx-naxsi-ui : process denied requests #location /RequestDenied { # proxy_pass http://127.0.0.1:8080; #} #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/www; } # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini # With php5-cgi alone: #fastcgi_pass 127.0.0.1:9000; # With php5-fpm: fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include fastcgi_params; } # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # location ~ /\.ht { deny all; } } [...]
Descomente os dois listen para fazer nginx escutar na porta 80 IPv4 e IPv6.
server_name _; torna este um vhost genérica default (claro, você pode também especificar um hostname aqui como www.example.com).
Eu adicionei index.php para o diretório root ‘/usr/share/nginx/www;’ significa que a raiz do documento é o diretório /usr/share/nginx/www.
Agora para finalizar e testar vamos criar um arquivo php no diretorio root especificado
vi /usr/share/nginx/www/info.php
< ? php phpinfo(); ? >
(sem os espaços na chave e ponto de interrogação)
Agora vamos reiniciar os serviços:
sudo service php5-fpm restart;
sudo service nginx restart;
Pronto, só testar:
Fontes:
– http://goo.gl/qojHc
– http://goo.gl/St04Y
Muito bom!