# Nginx

Nginx (lê-se "engine x") é um servidor leve de HTTP, proxy reverso, proxy de e-mail IMAP/POP3, feito por Igor Sysoev em 2005, sob licença BSD-like 2-clause.
O Nginx consome menos memória que o Apache, pois lida com requisições Web do tipo “event-based web server”; e o Apache é baseado no “process-based server”, podendo trabalhar juntos. É possível diminuir o consumo de memória do Apache, passando as requisições Web primeiro no Nginx, assim, o Apache não precisa servir arquivos estáticos, e pode depender do bom controle de cache feito pelo Nginx.
O Wikipedia utiliza Nginx como um servidor de terminação SSL, o qual é responsável por receber requisições TLS, e repassar para outros servidores na rede, diminuído assim a carga sobre outros servidores.
Desde a versão 5.2, o sistema operacional OpenBSD utiliza o Nginx como parte do sistema base, provendo uma alternativa ao fork do Apache 1.3 que o sistema utilizava, o qual o Nginx tinha como finalidade substituir, mas que acabou sendo subtituido por uma implementação própria de httpd.

## Adoção de Nginx

Segundo pesquisa sobre servidores web (Web Server Survey), da Netcraft em outubro de 2015, o servidor Nginx se mostrou o segundo servidor web mais utilizado entre os sites ativos na web pesquisados, sendo utilizado por 15,33% destes. A pesquisa também indicou que o servidor é o mais utilizado entre os sites mais acessados da rede, com 23.66% dos sites utilizando a plataforma como base. De acordo com W3Techs, o servidor é utilizado por 29.7% dos sites no top 1 milhão de sites mais acessados da web, 39.5% dos sites no top 100 mil e por 47,6% dos sites no top 10 mil.
Em fevereiro de 2017, a adoção de Nginx foi: Brasil: 17,41% de todos os domínios. Portugal: 17,62% de todos os domínios.

## Características básicas

* Manipulação de arquivos estáticos, auto-indexação de arquivos; cache de descritor de arquivo aberto;
* Proxy reverso acelerado com cache, balanceamento de carga simples e tolerância a falhas;
* Suporte acelerado com cache a: FastCGI, uWSGI, SCGI e servidores memcached; balanceamento de carga simples e tolerância a falhas;
* Arquitetura modular. Filtros incluem gzipping , intervalos de bytes, respostas fragmentadas, XSLT , SSI e transformação da imagem de filtro. Inclusões múltiplas SSI dentro de uma página única podem ser processadas ​​em paralelo se forem manuseadas pelos servidores de proxy ou FastCGI;
* SSL e TLS apoio SNI.

### Outros recursos

* Servidores virtuais baseados em nome e baseados em IP;
* Conexões keep-alive e suporte a pipeline;
* Configuração flexível;
* Reconfiguração e atualização de um executável sem interrupção do serviço ao cliente;
* Acesso a formatos de log, buffer de escrita de log e de rotação rápida de registro;
* 3xx-5xx códigos de erro de redirecionamento;
* Módulo de reescrita: mudança URI usando expressões regulares;
* Execução de diferentes funções, dependendo do endereço do cliente;
* Controle de acesso baseado em endereço IP do cliente e autenticação HTTP Basic;
* Referenciador de validação de HTTP;
* Métodos PUT, DELETE, MKCOL, COPY e MOVE;
* Streaming de FLV e MP4;
* Limitação de taxa de resposta;
* Limitação do número conexões ou pedidos simultâneas provenientes de um endereço;
* Perl incorporado.

### Recurso de correio

* Redirecionamento do usuário para servidor IMAP ou POP3 usando um HTTP externo de autenticação do servidor;
* Autenticação do usuário usando um HTTP externo de autenticação do servidor e redirecionamento de ligação a um servidor SMTP interno;
* Métodos de autenticação:
POP3: USER / PASS, APOP, AUTH LOGIN/PLAIN/CRAM-MD5; IMAP: LOGIN, AUTH LOGIN/PLAIN/CRAM-MD5; SMTP: AUTH LOGIN/PLAIN/CRAM-MD5;
* Suporte a SSL;
* Suporte a STARTTLS e STLS.

## Arquitetura e escalabilidade

* Um mestre e vários processos de trabalho; executados sob um usuário sem privilégios;
* Suporte para kqueue (FreeBSD 4.1 +), epoll (Linux 2.6 +), rt sinais (Linux 2.2.19 +), / dev / poll (Solaris 7 11/99 +), portas de evento (Solaris 10), selecionar e pesquisa;
* Suporte a kqueue EV_CLEAR, EV_DISABLE (desativa temporariamente eventos), NOTE_LOWAT, EV_EOF, número de dados disponíveis, códigos de erro;
* sendfile (FreeBSD 3.1 +, Linux 2.2 +, Mac OS X 10.5 +), sendfile64 (Linux 2.4.21 +), e sendfilev (Solaris 8 7/01 +) de apoio;
* Arquivo AIO (FreeBSD 4.3 +, Linux 2.6.22 +);
* DIRECTIO (FreeBSD 4.4 +, Linux 2.4 +, Solaris 2.6 +, Mac OS X);
* Accept-filtros (FreeBSD 4.1 +, NetBSD 5.0 +) e TCP_DEFER_ACCEPT (Linux 2.4 +) apoio;
* Keep-alive para dez mil conexões HTTP inativas demandam cerca de 2,5 MB de memória;
* Operações de cópia de dados são mantidos a um mínimo.