Vous êtes sur la page 1sur 6

Desvendando o Nginx - Parte 1

on nginx, webserver, http


O Nginx um servidor web, Proxy reverso, Proxy balanceador de carga, com um performance
muito maior se comparado com outros servidores WEB como o APACHE. O Nginx (pronuncia-se
"enginex") um servidor de alta performance, gratuito e open-source, bem como um servidor
proxy para IMAP/POP3.
Escrito em C por Igor Sysoev em 2002, com sua primeira verso pblica liberada em 2004. O
Nginx conhecido por sua estabilidade, rico conjunto de caractersticas/facilidades, simples
configurao e baixo consumo de recursos. Aqui no LEMAF, por exemplo, usamos tanto Apache,
quanto Nginx (dando preferncia ao Nginx).

Instalao
O Nginx roda na plataforma GNU/Linux, no Microsoft Windows, ou no OsX da Apple. No
entanto, esta abordagem ser em GNU/Linux. Se voc usa alguma distribuio GNU/Linux baseada
em Debian como por exemplo o Ubuntu, basta digitar o seguinte comando:
Bash
sudo apt-get install -y nginx

Dica: Ainda que o apt-get seja o gerenciador de pacotes mais conhecido, interessante
usar o aptitude que uma evoluo do apt-get. Por outro lado, se voc usa alguma
distribuio baseada em Redhat, basta digitar o comando a seguir:

Bash
sudo yum install -y nginx

Dica: Se a distribuio o Fedora, no lugar do yum, use o dnf. No caso da distribuio


ser diferente das citadas, consulte o site o https://nginx.org/. Assim que terminar de
instalar, ser necessrio ativar o daemon do Nginx:

Bash
sudo systemctl enabled nginx.service

Agora inicializaremos o servio:


Bash
sudo systemctl start nginx.service

Dica: As verses mais atuais do Ubuntu, Fedora ou Debian, j no rodam o sistema de


inicializao de servios antigos. Isto , no rodam mais o SysV init que anteriormente
iniciava servios atravs do (/etc/init.d/script). Ao invs, o padro da maioria das
distribuies o systemd. Por este motivo agora usa-se o systemctl (system control)
para iniciar os servios. Em alguns casos ainda possvel usar o padro service nginx
start que na verdade redirecionado para o comando systemctl de todo modo.

A diferena bsica entre as distribuies GNU/Linux so basicamente caminhos, comandos, ciclos


de vida ,atualizao e poltica de segurana. No entanto, ainda sim, mantido o padro denominado
LSB - Linux Standart Base.

Entendendo a estrutura do Nginx


O Nginx armazena seus arquivos de configurao dentro do diretrio /etc/nginx por padro.
Este diretrio tambm contm outras pastas como mostra abaixo:
conf.d/ koi-win naxsi.rules scgi_params uwsgi_params
fastcgi_params mime.types nginx.conf win-utf
koi-utf naxsi_core.rules proxy_params

Nota: Se voc est vindo do Apache, interessante criar o mesmo padro de pastas
como o sites-available, e sites-enabled.

Em distribuies baseadas em Redhat como o Fedora/Centos, o nginx vem cr, sem esta
configurao ao estilo Apache. Neste caso, ser necessrio criar tais pastas (diferentemente de
distribuies baseadas em Debian que j vem com tais configuraes por padro). Estes diretrios
so usados para definir configuraes para as suas aplicaes. Os arquivos so geralmente criados
no diretrio sites-available, e, em seguida, simbolicamente ligados ao diretrio sites-enabled.

Configurao bsica do Nginx


Partindo do Fedora e seguindo o padro Apache de diretrios (opcional), ento vamos criar os
diretrios:
Bash
cd /etc/nginx/
sudo mkdir sites-available sites-enabled

Ateno: Como descrito a cima, a criao de ambas as pastas s ser necessrio em


distribuies baseadas em Redhat. Agora basta editar o nginx.conf e incluir o sites-
enabled, e o conf.d como segue:

Bash
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;

Ateno: Geralmente se espera que o link simblico no diretrio sites-enabled sejam


criados automaticamente. No entanto, nem sempre isto ocorre. Portanto, interessante
verificar se os links foram criados e cria-los manualmente caso seja necessrio. Em
outro exemplo, podemos habilitar as opes de compactao de arquivos bastando
apenas adicionar as seguintes linhas no nginx.conf:
Bash
gzip on;
gzip_disable "msie6";

Nota: O parmetro gzip_disable "msie6"; a cima, visa desativar o tipo de


compactao Gzip para o navegador Internet Explorer 6 pois, este navegador no aceita
este tipo de compactao de arquivos.

O diretrio conf.d pode ser usado para a configurao do site tambm. Cada arquivo dentro deste
diretrio termina com .conf e lido na configurao quando Nginx iniciado garantindo assim,
que cada arquivo defina sintaxe vlida de configurao do Nginx. Na maioria dos casos, outros
arquivos dentro do diretrio /etc/nginx contm detalhes de configurao de processos
especficos ou componentes opcionais. Por fim, o arquivo nginx.conf estar assim:

Bash
user www-data;
worker_processes 4;
pid /run/nginx.pid;

events {
worker_connections 768;
# multi_accept on;
}

http {

##
# Basic Settings
##

sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# server_tokens off;

# server_names_hash_bucket_size 64;
# server_name_in_redirect off;

include /etc/nginx/mime.types;
default_type application/octet-stream;

##
# SSL Settings
##

ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE


ssl_prefer_server_ciphers on;

##
# Logging Settings
##

access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;

##
# Gzip Settings
##

gzip on;
gzip_disable "msie6";

# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/javascript
text/xml application/xml application/xml+rss text/javascript;

##
# Virtual Host Configs
##

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}

Voc pode estar se perguntando: Mas que diabos so estes parmetros do nginx.conf padro?
Vamos l:
O user www-data; significa que o Nginx ir executar como usurio www-data. Isso
til se voc estiver fazendo a transio do Apache, onde o usurio padro o www-data.
Assim, voc no ter que alterar a propriedade de todos os arquivos ou diretrios existentes.
O parmetro worker_processes 4; a espinha dorsal para o processamento do
Nginx. Esta diretiva responsvel por deixar o nosso servidor virtual cinte de que muitos
processos so gastos de uma vez.
O pid /run/nginx.pid define um arquivo que ir armazenar o ID de processo do
processo principal.
A diretiva events fornece a configurao em que as diretivas que afetam o processamento
de conexo so especificados. Neste caso, o worker_connections 768 define o
nmero mximo de conexes simultneas que podem ser abertas por um processo de
trabalho (768 por padro).
Nota: Perceba que ainda dentro de events temos a diretiva multi_accept on; que por
padro vem comentado. Isto , um processo vai aceitar uma nova conexo de cada vez. Caso
contrrio, um processo iria aceitar todas as novas conexes ao mesmo tempo.
Obs: A diretiva http assim como a diretiva events, funcionam como se fossem
funes que encapsulam diretivas dentro delas. A diretiva http contm as
configuraes do protocolo http. Dentro do http temos alguns parmetros. Como
mostra a seguir:

A diretiva sendfile on; em modo on, isto , ativo, no bloqueia a sada e entrada do
disco informando que os dados no esto na memria. Em seguida, o nginx inicia uma carga
de dados assncronos atravs da leitura de um byte.
A diretiva tcp_nopush on; s usada quando o sendfile tambm est ativo. Pois,
esta diretiva reponsvel por enviar o cabealho de resposta de pacotes para o sistema
operacional.
A diretiva tcp_nodelay on; s pode estar ativa quando um h transferncia para o
estado keep-alive.
A diretiva keepalive_timeout define um limite de tempo durante o qual uma conexo
de cliente keep-alive vai ficar aberta no servidor. O valor zero desativa conexes keep-alive
do cliente.
A diretiva types_hash_max_size define o tamanho mximo das hash tables.No caso, o
padro 2048.
A diretiva server_tokens off; que est comentada por padro, serve para emitir
mensagens de erro ao servidor. Esta diretiva extremamente importante quando no se
sabe bem a causa de uma suposta falha envolvendo o nginx.
A diretiva server_names_hash_bucket_size; que tambm est comentada, define
o tamanho de buckets para as tabelas de nome de hash para servidores. O valor padro
depende do tamanho do cache do processador.
A diretiva server_name_in_redirect off que tambm est comentada por padro,
responsvel por ativar ou desativar o uso do nome do servidor principal, especificado pela
diretiva server_name, em redirecionamentos emitidos pelo nginx.
A diretiva include /etc/nginx/mime.types define o tipo MIME padro de uma
resposta. Isto , o mapeamento das extenses de nome de arquivo para tipos de MIME pode
ser definida com a diretiva types que corresponde a uma extensa lista de formados e
extenses permitidas no nginx.
A diretiva default_type application/octet-stream; uma declarao direta
de mime type que no est declarado dentro do arquivo mime.types ativando a aplicao
de stream de vdeo octet-stream.
A diretiva ssl_protocols por padro cria compatibilidade aos formatos ssl TLS verso
1, 1.1, 1.2 no permitindo a iterao com o formato SLLv3. O formato SSLv3 ainda no
est suficientemente maduro e por isto um padro inseguro.
Temos tambm as diretivas para gerao de logs em seus devidos caminhos, no caso a
diretiva access_log e error_log que so gerados por padro em /var/log/nginx
nos arquivos access.log e error.log.

Temos as diretivas para habilitar formatos de compactao atravs das configuraes do


formato gzip, da diretiva gzip_disable "msie6" que desabilita a compatibilidade
com navegadores Internet Explorer 6 para evitar problemas, e outras configuraes
pertinentes para este tipo de compabilidade alm de mime.types do formato.
Por fim, em Virtual Host Configs, onde adicionamos os caminhos dos arquivos de
configurao contidos na pasta sites-available, conf.d ou qualquer outra pasta que julgue
pertinente.
Pronto. J temos a configurao bsica funcional do Nginx. Na parte 2 deste artigo, irei mostrar em
detalhes os casos de uso para o Nginx o que envolve proxy_reverso, redirecionamento de
endereos, proxy balanceador de carga, bloqueio e liberao de faixas de ip, cache, webserver,
streaming, entre outras funcionalidades.

Vous aimerez peut-être aussi