You are on page 1of 39

NGiNX, o motor da sua aplicao Web

Ernani Azevedo

N G iN X , o m o to r d a s u a a p lic a o W e b
R o te iro

O que o NGiNX;
A Web 2.0 e o futuro;
O HTML5, e como isso muda a Web;
Protocolo SPDY;
Preparando servidores para grandes cargas;
Servidores de aplicao, escolha a sua linguagem;
Balanceamento de carga entre servidores;
SSL em tudo, sem sobrecarregar sua aplicao;
Contedo esttico;
Cache de contedo dinmico;
Perguntas e encerramento.

N G iN X , o m o to r d a s u a a p lic a o W e b
O q u e o N G iN X

O que o NGiNX;
A Web 2.0 e o futuro;
O HTML5, e como isso muda a Web;
Protocolo SPDY;
Preparando servidores para grandes cargas;
Servidores de aplicao, escolha a sua linguagem;
Balanceamento de carga entre servidores;
SSL em tudo, sem sobrecarregar sua aplicao;
Contedo esttico;
Cache de contedo dinmico;
Perguntas e encerramento.

N G iN X , o m o to r d a s u a a p lic a o W e b
O q u e o N G iN X

Pronuncia-se Engine X (motor X);


Distribudo sob licena BSD;
Escrito por Igor Sysoev;
Utilizado em grandes portais da Internet (17,82% dos top 1M);
Servidor de alta performance e proxy reverso HTTP;
Suporte a IMAP/POP3;
10 anos em 2014;
Escrito tendo em mente quebrar a barreira C10K
http://kegel.com/c10k.html
(
);
Estrutura assncrona de eventos;
Baixo consumo de recursos (memria e CPU);
Utilizado em diversos grandes sites, como Facebook, Netflix, Pinterest,
CloudFare, GitHub, WordPress.com, Thumblr, Instagram, Cnet, Time.com,
SoundCloud, Dropbox, MaxCDN, etc...

N G iN X , o m o to r d a s u a a p lic a o W e b
O q u e o N G iN X

Fonte: Netcraft
http://news.netcraft.com/archives/2014/04/02/april-2014-web-server-survey.html

N G iN X , o m o to r d a s u a a p lic a o W e b
O q u e o N G iN X

Fonte: W3Techs
http://w3techs.com/technologies/cross/web_server/ranking

N G iN X , o m o to r d a s u a a p lic a o W e b
O q u e o N G iN X

Fonte: The Atlantic

http://www.theatlantic.com/technology/archive/2013/12/welcome-to-the-internet-of-thingies-615-of-web-traffic-is-not-human/282309/

N G iN X , o m o to r d a s u a a p lic a o W e b
A W e b 2 .0 e o fu tu ro

O que o NGiNX;
A Web 2.0 e o futuro;
O HTML5, e como isso muda a Web;
Protocolo SPDY;
Preparando servidores para grandes cargas;
Servidores de aplicao, escolha a sua linguagem;
Balanceamento de carga entre servidores;
SSL em tudo, sem sobrecarregar sua aplicao;
Contedo esttico;
Cache de contedo dinmico;
Perguntas e encerramento.

N G iN X , o m o to r d a s u a a p lic a o W e b
A W e b 2 .0 e o fu tu ro

Navegadores web mais robustos;


A era do JavaScript;
O navegador como interface para todas aplicaes;
Servios de streaming cada vez mais populares;
Volume de trfego cada vez maior, devido a banda larga;
Compiladores C para web;
Aplicaes cada vez mais dependentes de requisies AJAX.

N G iN X , o m o to r d a s u a a p lic a o W e b
O H T M L 5 , e c o m o is s o m u d a a W e b

O que o NGiNX;
A Web 2.0 e o futuro;
O HTML5, e como isso muda a Web;
Protocolo SPDY;
Preparando servidores para grandes cargas;
Servidores de aplicao, escolha a sua linguagem;
Balanceamento de carga entre servidores;
SSL em tudo, sem sobrecarregar sua aplicao;
Contedo esttico;
Cache de contedo dinmico;
Perguntas e encerramento.

N G iN X , o m o to r d a s u a a p lic a o W e b
O H T M L 5 , e c o m o is s o m u d a a W e b

Uso massivo de multi mdia;


WebSocket possibilitando aplicaes P2P;
Guarda de dados locais (local storage);
Geo localizao em massa.

N G iN X , o m o to r d a s u a a p lic a o W e b
P ro to c o lo S P D Y

O que o NGiNX;
A Web 2.0 e o futuro;
O HTML5, e como isso muda a Web;
Protocolo SPDY;
Preparando servidores para grandes cargas;
Servidores de aplicao, escolha a sua linguagem;
Balanceamento de carga entre servidores;
SSL em tudo, sem sobrecarregar sua aplicao;
Contedo esttico;
Cache de contedo dinmico;
Perguntas e encerramento.

N G iN X , o m o to r d a s u a a p lic a o W e b
P ro to c o lo S P D Y

Pronuncia-se Speedy (veloz);


Criado principalmente pela Google (marca registrada);
Objetivo de reduzir a latncia em pginas web;
Reduz o nmero de conexes ativas com o servidor;
Criptografia de dados utilizando TLS/SSL;
Compresso dos dados (gzip ou deflate), incluindo cabealhos;
Multiplexao do contedo;
Suportado pelo Google Chrome e o Chromium, e utilizado para muitos servios
da Google;
Suportado pelo Firefox 11 e SeaMonkey 2.8, mas habilitado por padro apenas
no Firefox 13 ou superior;
Suportado pelo Opera 12.10;
Suportado pelo Internet Explorer 11 (exceto para W indows 7).

N G iN X , o m o to r d a s u a a p lic a o W e b
P re p a ra n d o o s e rv id o re s p a ra g ra n d e s c a rg a s

O que o NGiNX;
A Web 2.0 e o futuro;
O HTML5, e como isso muda a Web;
Protocolo SPDY;
Preparando servidores para grandes cargas;
Servidores de aplicao, escolha a sua linguagem;
Balanceamento de carga entre servidores;
SSL em tudo, sem sobrecarregar sua aplicao;
Contedo esttico;
Cache de contedo dinmico;
Perguntas e encerramento.

N G iN X , o m o to r d a s u a a p lic a o W e b
P re p a ra n d o o s e rv id o re s p a ra g ra n d e s c a rg a s

Habilitar uso de eventos via epoll (Linux kernel 2.5.44 e glibc 2.3.2);
No FreeBSD, utilizar kqueue;
Habilitar workers para o nmero mximo de CPU's (veja o lscpu):

N G iN X , o m o to r d a s u a a p lic a o W e b
P re p a ra n d o o s e rv id o re s p a ra g ra n d e s c a rg a s

Alterar o limite de recursos de arquivos por worker para 100000;


Alterar o limite de conees por worker para 2048;
Habilitar mltiplas conexes;
Configurao bsica para grandes cargas:
worker_processes 16;
worker_rlimit_nofile 100000;
events {
worker_connections 2048;
use epoll;
multi_accept on;
}

N G iN X , o m o to r d a s u a a p lic a o W e b
P re p a ra n d o o s e rv id o re s p a ra g ra n d e s c a rg a s

Habilitar compresso gzip no mdulo HTTP;


Podemos aumentar o tempo limite de keepalive, lembrando que conexes
inativas no consomem CPU e pouqussima memria (e no mximo 200
requisies por conexo);
http {
keepalive_timeout 65;
keepalive_requests 200;
gzip on;
gzip_min_length 256;
gzip_comp_level 3;
gzip_types text/plain text/css
application/json application/x-javascript
text/html application/xml
application/xml+rss text/javascript;
default_type application/octet-stream;
include /etc/nginx/mime.types;
}

N G iN X , o m o to r d a s u a a p lic a o W e b
P re p a ra n d o o s e rv id o re s p a ra g ra n d e s c a rg a s

Habilitar cache de metadados no mdulo HTTP;


Esta configurao no possui parmetro on, apesar de existir parmetro off;
Configurao bsica de cache de metadados no mdulo HTTP:

http {
open_file_cache max=10000 inactive=30s;
open_file_cache_valid
60s;
open_file_cache_min_uses 2;
open_file_cache_errors
on;
}

N G iN X , o m o to r d a s u a a p lic a o W e b
P re p a ra n d o o s e rv id o re s p a ra g ra n d e s c a rg a s

Habilitar reset para conexes inativas;


Habilitar sendfile para otimizar envio de arquivos;
Habilitar tcp_nopush (enviar cabealhos em apenas um pacote).

http {
reset_timedout_connection on;
sendfile on;
tcp_nopush on;
}

N G iN X , o m o to r d a s u a a p lic a o W e b
P re p a ra n d o o s e rv id o re s p a ra g ra n d e s c a rg a s

Tuning da pilha TCP no kernel do Linux, para suportar 100k conexes ativas ou
mais;
Alterando o tempo de reciclagem de conexes TCP em Time Wait;
Editar o arquivo /etc/sysctl.conf, alterando:
# Tuning geral de
net.core.rmem_max
net.core.wmem_max
net.ipv4.tcp_rmem
net.ipv4.tcp_wmem

gigabit:
= 16777216
= 16777216
= 4096 87380 16777216
= 4096 65536 16777216

# Habilitar mais memria para a pilha TCP


# para suportar muitas (100k+) conexes
# ativas:
net.ipv4.tcp_mem = 50576 64768 98152
net.core.netdev_max_backlog = 2500
# Tuning da reciclagem Time Wait do TCP:
net.ipv4.tcp_tw_recycle=1
net.ipv4.tcp_fin_timeout=15

N G iN X , o m o to r d a s u a a p lic a o W e b
S e rv id o re s d e a p lic a o , e s c o lh a a s u a lin g u a g e

O que o NGiNX;
A Web 2.0 e o futuro;
O HTML5, e como isso muda a Web;
Protocolo SPDY;
Preparando servidores para grandes cargas;
Servidores de aplicao, escolha a sua linguagem;
Balanceamento de carga entre servidores;
SSL em tudo, sem sobrecarregar sua aplicao;
Contedo esttico;
Cache de contedo dinmico;
Perguntas e encerramento.

N G iN X , o m o to r d a s u a a p lic a o W e b
S e rv id o re s d e a p lic a o , e s c o lh a a s u a lin g u a g e
Internet
Internet

Internet
Internet

Apache
PHP

NGiNX

PHP-FPM

N G iN X , o m o to r d a s u a a p lic a o W e b
S e rv id o re s d e a p lic a o , e s c o lh a a s u a lin g u a g e

Protocolo FastCGI:
PHP-FPM;

uW SGI (Python, Ruby, Perl, .Net);

Protocolo proxy HTTP:

Java;
Ruby (mongrel);
BOSH (XMPP over HTTP);
Outros servidores HTTP.

N G iN X , o m o to r d a s u a a p lic a o W e b
S e rv id o re s d e a p lic a o , e s c o lh a a s u a lin g u a g e

FastCGI, uma implementao similar ao CGI para processos persistentes;


Controle de cabealhos e tratamento de erros;
Exemplo de uso (sesso html da configurao do NGiNX):

location ~ [^/]\.php(/|$) {
fastcgi_param SCRIPT_FILENAME
$document_root$fastcgi_script_name;
fastcgi_index index.php;
include fastcgi_params;
# Via TCP/IP:
# fastcgi_pass 127.0.0.1:3100;
# Via UNIX Socket:
fastcgi unix:/var/run/php-fpm/php.sock;
}

N G iN X , o m o to r d a s u a a p lic a o W e b
S e rv id o re s d e a p lic a o , e s c o lh a a s u a lin g u a g e

Proxy HTTP, possibilitando a integrao com praticamente quaisquer


linguagem web;
Exemplo de uso (sesso html da configurao do NGiNX):

location ~ ^/http-bind {
proxy_buffering off;
proxy_intercept_errors on;
tcp_nodelay on;
keepalive_timeout 55;
proxy_read_timeout 360;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For
$proxy_add_x_forwarded_for;
}

proxy_pass http://web1.local:8080;

N G iN X , o m o to r d a s u a a p lic a o W e b
B a la n c e a m e n to d e c a rg a e n tre s e rv id o re s

O que o NGiNX;
A Web 2.0 e o futuro;
O HTML5, e como isso muda a Web;
Protocolo SPDY;
Preparando servidores para grandes cargas;
Servidores de aplicao, escolha a sua linguagem;
Balanceamento de carga entre servidores;
SSL em tudo, sem sobrecarregar sua aplicao;
Contedo esttico;
Cache de contedo dinmico;
Perguntas e encerramento.

N G iN X , o m o to r d a s u a a p lic a o W e b
B a la n c e a m e n to d e c a rg a e n tre s e rv id o re s

Apache
PHP

Internet
Internet

Internet
Internet

IPVS

NGiNX

Apache
PHP

PHP-FPM

PHP-FPM

N G iN X , o m o to r d a s u a a p lic a o W e b
B a la n c e a m e n to d e c a rg a e n tre s e rv id o re s

Utilizao de clusters com balanceamento de carga por Round Robin, com


possibilidade de uso de IP Hash;
Pode ser misturado conexes TCP e UNIX Socket;
Exemplo de uso:
upstream
server
server
server

backend {
web1.intra weight=5;
web2.intra:8080;
unix:/tmp/server3;

server backup1.intra:81 backup;


server backup2.intra:81 backup;
}
server {
location / {
proxy_pass http://backend;
}
}

N G iN X , o m o to r d a s u a a p lic a o W e b
B a la n c e a m e n to d e c a rg a e n tre s e rv id o re s
Internet
Internet

NGiNX

Cluster 1
PHP-FPM
PHP-FPM

Cache

Cluster 2
M
E
M
C
A
C
H
E
D

PHP-FPM
PHP-FPM
PHP-FPM
PHP-FPM

Cluster 3
M
E
M
C
A
C
H
E
D

PHP-FPM
PHP-FPM

M
E
M
C
A
C
H
E
D

N G iN X , o m o to r d a s u a a p lic a o W e b
S S L e m tu d o , s e m s o b re c a rre g a r s u a a p lic a o

O que o NGiNX;
A Web 2.0 e o futuro;
O HTML5, e como isso muda a Web;
Protocolo SPDY;
Preparando servidores para grandes cargas;
Servidores de aplicao, escolha a sua linguagem;
Balanceamento de carga entre servidores;
SSL em tudo, sem sobrecarregar sua aplicao;
Contedo esttico;
Cache de contedo dinmico;
Perguntas e encerramento.

N G iN X , o m o to r d a s u a a p lic a o W e b
S S L e m tu d o , s e m s o b re c a rre g a r s u a a p lic a o

Configurao de SSL extremamente simples;


Desonera o servidor de aplicao, deixando o trabalho de criptografia para o
proxy web;
Exemplo de uso:
server {
listen 10.0.0.1:443;
server_name intranet.local;
root /var/www/html;
index index.html index.htm;

ssl
on;
ssl_certificate
/tmp/intranet.crt;
ssl_certificate_key /tmp/intranet.key;

N G iN X , o m o to r d a s u a a p lic a o W e b
C o n te d o e s t tic o

O que o NGiNX;
A Web 2.0 e o futuro;
O HTML5, e como isso muda a Web;
Protocolo SPDY;
Preparando servidores para grandes cargas;
Servidores de aplicao, escolha a sua linguagem;
Balanceamento de carga entre servidores;
SSL em tudo, sem sobrecarregar sua aplicao;
Contedo esttico;
Cache de contedo dinmico;
Perguntas e encerramento.

N G iN X , o m o to r d a s u a a p lic a o W e b
C o n te d o e s t tic o

Possibilidade de comprimir o contedo esttico em disco para entrega em


deflate ou gzip;
Desonera o servidor de aplicao, que no precisa servir contedo esttico;
Exemplo de compresso gzip:
http {
gzip on;
gzip_static on;
gzip_http_version 1.1;
gzip_min_length 1400;
gzip_vary on;
gzip_comp_level 9;
gzip_proxied any;
gzip_types text/plain text/css ;
gzip_buffers 16 8k;
gzip_disable "MSIE [1-6].(?!.*SV1)";
}

N G iN X , o m o to r d a s u a a p lic a o W e b
C a c h e d e c o n te d o d in m ic o

O que o NGiNX;
A Web 2.0 e o futuro;
O HTML5, e como isso muda a Web;
Protocolo SPDY;
Preparando servidores para grandes cargas;
Servidores de aplicao, escolha a sua linguagem;
Balanceamento de carga entre servidores;
SSL em tudo, sem sobrecarregar sua aplicao;
Contedo esttico;
Cache de contedo dinmico;
Perguntas e encerramento.

N G iN X , o m o to r d a s u a a p lic a o W e b
C a c h e d e c o n te d o d in m ic o
Internet
Internet

NGiNX

PHP-FPM

Cache

N G iN X , o m o to r d a s u a a p lic a o W e b
C a c h e d e c o n te d o d in m ic o
Internet
Internet

NGiNX

PHP-FPM

PHP-FPM

Cache

Local

.css
.js
.html
.xml
.jpg
.gif
.mp3
...

gzip -9 (.gz)

N G iN X , o m o to r d a s u a a p lic a o W e b
P e rg u n ta s e e n c e rra m e n to

O que o NGiNX;
A Web 2.0 e o futuro;
O HTML5, e como isso muda a Web;
Protocolo SPDY;
Preparando servidores para grandes cargas;
Servidores de aplicao, escolha a sua linguagem;
Balanceamento de carga entre servidores;
SSL em tudo, sem sobrecarregar sua aplicao;
Contedo esttico;
Cache de contedo dinmico;
Perguntas e encerramento.

N G iN X , o m o to r d a s u a a p lic a o W e b
P e rg u n ta s e e n c e rra m e n to

Perguntas?

N G iN X , o m o to r d a s u a a p lic a o W e b
P e rg u n ta s e e n c e rra m e n to

Obrigado!
Ernani Azevedo
ernaniaz@gmail.com
+55 51 92425885
http://www.intellinews.com.br/

You might also like