Sei sulla pagina 1di 47

NGiNX, o motor da sua aplicação Web

Ernani Azevedo
NGiNX, o motor da sua aplicação Web
Roteiro

• O que é o NGiNX;
• A Web 2.0 e o futuro;
• O HTML5, e como isso muda a Web;
• Protocolo SPDY;
• Protocolo HTTP/2;
• Preparando servidores para grandes cargas;
• Servidores de aplicação, escolha a sua linguagem;
• Balanceamento de carga entre servidores;
• SSL em tudo, sem sobrecarregar sua aplicação;
• Conteúdo estátco;
• Cache de conteúdo dinâmico;
• Perguntas e encerramento.
NGiNX, o motor da sua aplicação Web
O que é o NGiNX

• O que é o NGiNX;
• A Web 2.0 e o futuro;
• O HTML5, e como isso muda a Web;
• Protocolo SPDY;
• Protocolo HTTP/2;
• Preparando servidores para grandes cargas;
• Servidores de aplicação, escolha a sua linguagem;
• Balanceamento de carga entre servidores;
• SSL em tudo, sem sobrecarregar sua aplicação;
• Conteúdo estátco;
• Cache de conteúdo dinâmico;
• Perguntas e encerramento.
NGiNX, o motor da sua aplicação Web
O que é o NGiNX

• Pronuncia-se “Engine X” (motor X);


• Distribuído sob licença BSD;
• Escrito por Igor Sysoev;
• Utlizado 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 (htp://kegel.com/c10k.html);
• Estrutura assíncrona de eventos;
• Baixo consumo de recursos (memória e CPU);
• Utlizado em diversos grandes sites, como Facebook, Netlix, Pinterest, CloudFare,
GitHub, WordPress.com, Thumblr, Instagram, Cnet, Time.com, SoundCloud, Dropbox,
MaxCDN, etc...
NGiNX, o motor da sua aplicação Web
O que é o NGiNX

Fonte: Netcraft
http://news.netcraft.com/archives/2014/04/02/april-2014-web-server-survey.html
NGiNX, o motor da sua aplicação Web
O que é o NGiNX

Fonte: Netcraft
https://news.netcraft.com/archives/2018/11/26/november-2018-web-server-survey.html
NGiNX, o motor da sua aplicação Web
O que é o NGiNX

Fonte: W3Techs
http://w3techs.com/technologies/cross/web_server/ranking
NGiNX, o motor da sua aplicação Web
O que é o NGiNX

Fonte: W3Techs
http://w3techs.com/technologies/cross/web_server/ranking
NGiNX, o motor da sua aplicação Web
O que é o NGiNX

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/
NGiNX, o motor da sua aplicação Web
O que é o NGiNX

Fonte: Incapsula
https://www.incapsula.com/blog/bot-traffic-report-2016.html
NGiNX, o motor da sua aplicação Web
A Web 2.0 e o futuro

• O que é o NGiNX;
• A Web 2.0 e o futuro;
• O HTML5, e como isso muda a Web;
• Protocolo SPDY;
• Protocolo HTTP/2;
• Preparando servidores para grandes cargas;
• Servidores de aplicação, escolha a sua linguagem;
• Balanceamento de carga entre servidores;
• SSL em tudo, sem sobrecarregar sua aplicação;
• Conteúdo estátco;
• Cache de conteúdo dinâmico;
• Perguntas e encerramento.
NGiNX, o motor da sua aplicação Web
A Web 2.0 e o futuro

• Navegadores web mais robustos;


• A era do JavaScript;
• O navegador como interface para todas aplicações;
• Serviços de streaming cada vez mais populares;
• Volume de tráfego cada vez maior, devido a banda larga;
• Compiladores C para web;
• Aplicações cada vez mais dependentes de requisições AJAX.
NGiNX, o motor da sua aplicação Web
O HTML5, e como isso muda a Web

• O que é o NGiNX;
• A Web 2.0 e o futuro;
• O HTML5, e como isso muda a Web;
• Protocolo SPDY;
• Protocolo HTTP/2;
• Preparando servidores para grandes cargas;
• Servidores de aplicação, escolha a sua linguagem;
• Balanceamento de carga entre servidores;
• SSL em tudo, sem sobrecarregar sua aplicação;
• Conteúdo estátco;
• Cache de conteúdo dinâmico;
• Perguntas e encerramento.
NGiNX, o motor da sua aplicação Web
O HTML5, e como isso muda a Web

• Uso massivo de mult mídia;


• WebSocket possibilitando aplicações P2P;
• Guarda de dados locais (local storage);
• Geo localização em massa.
NGiNX, o motor da sua aplicação Web
Protocolo SPDY

• O que é o NGiNX;
• A Web 2.0 e o futuro;
• O HTML5, e como isso muda a Web;
• Protocolo SPDY;
• Protocolo HTTP/2;
• Preparando servidores para grandes cargas;
• Servidores de aplicação, escolha a sua linguagem;
• Balanceamento de carga entre servidores;
• SSL em tudo, sem sobrecarregar sua aplicação;
• Conteúdo estátco;
• Cache de conteúdo dinâmico;
• Perguntas e encerramento.
NGiNX, o motor da sua aplicação Web
Protocolo SPDY

• Pronuncia-se Speedy (veloz);


• Criado principalmente pela Google (marca registrada) em 2009;
• Objetvo de reduzir a latência em páginas web;
• Reduz o número de conexões atvas com o servidor;
• Criptografa de dados utlizando TLS/SSL;
• Compressão dos dados (gzip ou defate), incluindo cabeçalhos;
• Multplexação do conteúdo;
• Suportado pelo Google Chrome e o Chromium, e utlizado para muitos serviços da
Google;
• Suportado pelo Firefox 11 e SeaMonkey 2.8, mas habilitado por padrão apenas no
Firefox 13 ou superior;
• Suportado pelo Opera 12.10;
• Suportado pelo Internet Explorer 11 (exceto para Windows 7).
NGiNX, o motor da sua aplicação Web
Protocolo SPDY

Limitações

• Apenas em conexões HTTPS;


• Conexão apenas com um host, mesmo que todos sub domínios estejam no mesmo
servidor, pois a mutplexação é baseada no host. Isto pode ocasionar múltplas
conexões TCP para renderizar uma página.
NGiNX, o motor da sua aplicação Web
Protocolo HTTP/2

• O que é o NGiNX;
• A Web 2.0 e o futuro;
• O HTML5, e como isso muda a Web;
• Protocolo SPDY;
• Protocolo HTTP/2;
• Preparando servidores para grandes cargas;
• Servidores de aplicação, escolha a sua linguagem;
• Balanceamento de carga entre servidores;
• SSL em tudo, sem sobrecarregar sua aplicação;
• Conteúdo estátco;
• Cache de conteúdo dinâmico;
• Perguntas e encerramento.
NGiNX, o motor da sua aplicação Web
Protocolo HTTP/2

• Baseado no protocolo SPDY, publicado em Maio de 2015 via RFC 7540;


• Mesmos objetvos e semântca do SPDY;
• Protocolo é binário, ao invés de textual;
• Compressão de cabeçalho HPACK;
• Não requer TLS/SSL (HTTPS), mas implementação dos navegadores modernos
requerem HTTPS;
• Domain sharding multplexado (automatcamente);
– Mesmo endereço IP para todos hosts;
– Certfcado com máscara (em caso de HTTPS).

• Suporte a extensão ALPN;


• A partr da versão 1.9.5.
NGiNX, o motor da sua aplicação Web
Protocolo HTTP/2

Fonte: UpWork
https://www.upwork.com/hiring/development/the-http2-protocol-its-pros-cons-and-how-to-start-using-it/
NGiNX, o motor da sua aplicação Web
Protocolo HTTP/2

• Server Push a partr da versão 1.13.9


– htp2_tpush_tpreload para upstreams;
– add_theader Link "</style.css>; as=style; rel=preload".

server {
listen 443 ssl http2;

ssl_certificate ssl/certificate.pem;
ssl_certificate_key ssl/key.pem;

root /var/www/html;

location = /index.html {
http2_push /style.css;
http2_push /imagem1.jpg;
http2_push /imagem2.jpg;
}
}
NGiNX, o motor da sua aplicação Web
Preparando o servidores para grandes cargas

• O que é o NGiNX;
• A Web 2.0 e o futuro;
• O HTML5, e como isso muda a Web;
• Protocolo SPDY;
• Protocolo HTTP/2;
• Preparando servidores para grandes cargas;
• Servidores de aplicação, escolha a sua linguagem;
• Balanceamento de carga entre servidores;
• SSL em tudo, sem sobrecarregar sua aplicação;
• Conteúdo estátco;
• Cache de conteúdo dinâmico;
• Perguntas e encerramento.
NGiNX, o motor da sua aplicação Web
Preparando o servidores para grandes cargas

• Habilitar uso de eventos via epoll (Linux kernel 2.5.44 e glibc 2.3.2);
• No FreeBSD, utlizar kqueue;
• Habilitar workers para o número máximo de CPU's (veja o lscpu):
NGiNX, o motor da sua aplicação Web
Preparando o servidores para grandes cargas

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


• Alterar o limite de conexões por worker para 2048;
• Habilitar múltplas conexões;
• Confguração básica para grandes cargas:

worker_processes 16;
worker_rlimit_nofile 100000;

events {
worker_connections 2048;
use epoll;
multi_accept on;
}
NGiNX, o motor da sua aplicação Web
Preparando o servidores para grandes cargas

• Habilitar compressão gzip no módulo HTTP;


• Podemos aumentar o tempo limite de keepalive, lembrando que conexões inatvas não
consomem CPU e pouquíssima memória (e no máximo 200 requisições por conexão);

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;
}
NGiNX, o motor da sua aplicação Web
Preparando o servidores para grandes cargas

• Habilitar cache de metadados no módulo HTTP;


• Esta confguração não possui parâmetro “on”, apesar de existr parâmetro “of”;
• Confguração básica de cache de metadados no módulo 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;
}
NGiNX, o motor da sua aplicação Web
Preparando o servidores para grandes cargas

• Habilitar reset para conexões inatvas;


• Habilitar sendfle para otmizar envio de arquivos;
• Habilitar tcp_tnopush (enviar cabeçalhos em apenas um pacote).

http {
reset_timedout_connection on;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
}
NGiNX, o motor da sua aplicação Web
Preparando o servidores para grandes cargas

• Tuning da pilha TCP no kernel do Linux, para suportar 100k conexões atvas ou mais;
• Alterando o tempo de reciclagem de conexões TCP em Time Wait;
• Editar o arquivo /etc/sysctl.conf, alterando:

# Tuning geral de gigabit:


net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216

# Habilitar mais memória para a pilha TCP


# para suportar muitas (100k+) conexões
# 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
NGiNX, o motor da sua aplicação Web
Servidores de aplicação, escolha a sua linguagem

• O que é o NGiNX;
• A Web 2.0 e o futuro;
• O HTML5, e como isso muda a Web;
• Protocolo SPDY;
• Protocolo HTTP/2;
• Preparando servidores para grandes cargas;
• Servidores de aplicação, escolha a sua linguagem;
• Balanceamento de carga entre servidores;
• SSL em tudo, sem sobrecarregar sua aplicação;
• Conteúdo estátco;
• Cache de conteúdo dinâmico;
• Perguntas e encerramento.
NGiNX, o motor da sua aplicação Web
Servidores de aplicação, escolha a sua linguagem

Internet
Internet Internet
Internet

Apache
NGiNX
Mod-PHP

PHP-FPM
NGiNX, o motor da sua aplicação Web
Servidores de aplicação, escolha a sua linguagem

• Protocolo FastCGI:
– PHP-FPM;
– uWSGI (Python, Ruby, Perl, .Net);

• Protocolo proxy HTTP:

– Java;
– Ruby (mongrel);
– BOSH (XMPP over HTTP);
– Outros servidores HTTP.
NGiNX, o motor da sua aplicação Web
Servidores de aplicação, escolha a sua linguagem

• FastCGI, uma implementação similar ao CGI para processos persistentes;


• Controle de cabeçalhos e tratamento de erros;
• Exemplo de uso (sessão html da confguração 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;
}
NGiNX, o motor da sua aplicação Web
Servidores de aplicação, escolha a sua linguagem

• Proxy HTTP, possibilitando a integração com pratcamente quaisquer linguagem web;


• Exemplo de uso (sessão html da confguração 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;
}
NGiNX, o motor da sua aplicação Web
Balanceamento de carga entre servidores

• O que é o NGiNX;
• A Web 2.0 e o futuro;
• O HTML5, e como isso muda a Web;
• Protocolo SPDY;
• Protocolo HTTP/2;
• Preparando servidores para grandes cargas;
• Servidores de aplicação, escolha a sua linguagem;
• Balanceamento de carga entre servidores;
• SSL em tudo, sem sobrecarregar sua aplicação;
• Conteúdo estátco;
• Cache de conteúdo dinâmico;
• Perguntas e encerramento.
NGiNX, o motor da sua aplicação Web
Balanceamento de carga entre servidores

Internet
Internet Internet
Internet

IPVS NGiNX

Apache Apache
PHP-FPM PHP-FPM
Mod-PHP Mod-PHP
NGiNX, o motor da sua aplicação Web
Balanceamento de carga entre servidores

• Utlização de clusters com balanceamento de carga por Round Robin, com


possibilidade de uso de IP Hash;
• Pode ser misturado conexões TCP e UNIX Socket;
• Exemplo de uso:

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

server backup1.intra:81 backup;


server backup2.intra:81 backup;
}

server {
location / {
proxy_pass http://backend;
}
}
NGiNX, o motor da sua aplicação Web
Balanceamento de carga entre servidores

Internet
Internet

NGiNX Cache

Cluster 1 Cluster 2 Cluster 3


PHP-FPM M PHP-FPM M PHP-FPM M
E E E
M M M
PHP-FPM C PHP-FPM C PHP-FPM C
A A A
C C C
H PHP-FPM H H
E E E
D PHP-FPM D D
NGiNX, o motor da sua aplicação Web
SSL em tudo, sem sobrecarregar sua aplicação

• O que é o NGiNX;
• A Web 2.0 e o futuro;
• O HTML5, e como isso muda a Web;
• Protocolo SPDY;
• Protocolo HTTP/2;
• Preparando servidores para grandes cargas;
• Servidores de aplicação, escolha a sua linguagem;
• Balanceamento de carga entre servidores;
• SSL em tudo, sem sobrecarregar sua aplicação;
• Conteúdo estátco;
• Cache de conteúdo dinâmico;
• Perguntas e encerramento.
NGiNX, o motor da sua aplicação Web
SSL em tudo, sem sobrecarregar sua aplicação

• Confguração de SSL extremamente simples;


• Desonera o servidor de aplicação, deixando o trabalho de criptografa 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;
}
NGiNX, o motor da sua aplicação Web
Conteúdo estático

• O que é o NGiNX;
• A Web 2.0 e o futuro;
• O HTML5, e como isso muda a Web;
• Protocolo SPDY;
• Protocolo HTTP/2;
• Preparando servidores para grandes cargas;
• Servidores de aplicação, escolha a sua linguagem;
• Balanceamento de carga entre servidores;
• SSL em tudo, sem sobrecarregar sua aplicação;
• Conteúdo estátco;
• Cache de conteúdo dinâmico;
• Perguntas e encerramento.
NGiNX, o motor da sua aplicação Web
Conteúdo estático

• Possibilidade de comprimir o conteúdo estátco em disco para entrega em defate ou


gzip;
• Desonera o servidor de aplicação, que não precisa servir conteúdo estátco;
• Exemplo de compressão 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)";
}
NGiNX, o motor da sua aplicação Web
Cache de conteúdo dinâmico

• O que é o NGiNX;
• A Web 2.0 e o futuro;
• O HTML5, e como isso muda a Web;
• Protocolo SPDY;
• Protocolo HTTP/2;
• Preparando servidores para grandes cargas;
• Servidores de aplicação, escolha a sua linguagem;
• Balanceamento de carga entre servidores;
• SSL em tudo, sem sobrecarregar sua aplicação;
• Conteúdo estátco;
• Cache de conteúdo dinâmico;
• Perguntas e encerramento.
NGiNX, o motor da sua aplicação Web
Cache de conteúdo dinâmico

Internet
Internet

NGiNX

PHP-FPM Cache
NGiNX, o motor da sua aplicação Web
Cache de conteúdo dinâmico

Internet
Internet

NGiNX

}
.css
PHP-FPM Cache Local .js
gzip -9 (.gz)
.html
.xml
.jpg
PHP-FPM .gif
.mp3
...
NGiNX, o motor da sua aplicação Web
Perguntas e encerramento

• O que é o NGiNX;
• A Web 2.0 e o futuro;
• O HTML5, e como isso muda a Web;
• Protocolo SPDY;
• Protocolo HTTP/2;
• Preparando servidores para grandes cargas;
• Servidores de aplicação, escolha a sua linguagem;
• Balanceamento de carga entre servidores;
• SSL em tudo, sem sobrecarregar sua aplicação;
• Conteúdo estátco;
• Cache de conteúdo dinâmico;
• Perguntas e encerramento.
NGiNX, o motor da sua aplicação Web
Perguntas e encerramento

Perguntas?
NGiNX, o motor da sua aplicação Web
Perguntas e encerramento

Obrigado!
Ernani Azevedo

ernaniaz@gmail.com

+55 51 992425885

http://www.intellinews.com.br/

Potrebbero piacerti anche