NGiNX, o motor da sua aplicação Web
•
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 aplicação, escolha a sua linguagem;•
Balanceamento de carga entre servidores;•
SSL em tudo, sem sobrecarregar sua aplicação;•
Conteúdo estático;•
Cache de conteúdo dinâmico;•
Perguntas e encerramento.N G iN X , o m o to r d a su a a p lica çã o W e b
R o te iro
N G iN X , o m o to r d a su a a p lica çã 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 aplicação, escolha a sua linguagem;•
Balanceamento de carga entre servidores;•
SSL em tudo, sem sobrecarregar sua aplicação;•
Conteúdo estático;•
Cache de conteúdo dinâmico;•
Perguntas e encerramento.•
Pronuncia-se “Engine X” (motor X);•
Distribuído sob licença 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 assíncrona de eventos;•
Baixo consumo de recursos (memória 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 su a a p lica çã o W e b
O q u e é o N G iN X
N G iN X , o m o to r d a su a a p lica çã o W e b
O q u e é o N G iN X
Fonte: Netcraft
N G iN X , o m o to r d a su a a p lica çã o W e b
O q u e é o N G iN X
Fonte: W3Techs
N G iN X , o m o to r d a su a a p lica çã o W e b
O q u e é o N G iN X
Fonte: The Atlantic
N G iN X , o m o to r d a su a a p lica çã 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 aplicação, escolha a sua linguagem;•
Balanceamento de carga entre servidores;•
SSL em tudo, sem sobrecarregar sua aplicação;•
Conteúdo estático;•
Cache de conteúdo dinâmico;•
Perguntas e encerramento.•
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.N G iN X , o m o to r d a su a a p lica çã o W e b
A W e b 2 .0 e o fu tu ro
N G iN X , o m o to r d a su a a p lica çã o W e b
O H T M L 5 , e co m o isso 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 aplicação, escolha a sua linguagem;•
Balanceamento de carga entre servidores;•
SSL em tudo, sem sobrecarregar sua aplicação;•
Conteúdo estático;•
Cache de conteúdo dinâmico;•
Perguntas e encerramento.•
Uso massivo de multi mídia;•
WebSocket possibilitando aplicações P2P;•
Guarda de dados locais (local storage);•
Geo localização em massa.N G iN X , o m o to r d a su a a p lica çã o W e b
O H T M L 5 , e co m o isso m u d a a W e b
N G iN X , o m o to r d a su a a p lica çã o W e b
P ro to co 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 aplicação, escolha a sua linguagem;•
Balanceamento de carga entre servidores;•
SSL em tudo, sem sobrecarregar sua aplicação;•
Conteúdo estático;•
Cache de conteúdo dinâmico;•
Perguntas e encerramento.•
Pronuncia-se Speedy (veloz);•
Criado principalmente pela Google (marca registrada);•
Objetivo de reduzir a latência em páginas web;•
Reduz o número de conexões ativas com o servidor;•
Criptografia de dados utilizando TLS/SSL;•
Compressão dos dados (gzip ou deflate), incluindo cabeçalhos;•
Multiplexação do conteúdo;•
Suportado pelo Google Chrome e o Chromium, e utilizado 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).N G iN X , o m o to r d a su a a p lica çã o W e b
P ro to co lo S P D Y
N G iN X , o m o to r d a su a a p lica çã o W e b
P re p a ra n d o o se rvid o re s p a ra g ra n d e s ca 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 aplicação, escolha a sua linguagem;•
Balanceamento de carga entre servidores;•
SSL em tudo, sem sobrecarregar sua aplicação;•
Conteúdo estático;•
Cache de conteúdo dinâmico;•
Perguntas e encerramento.N G iN X , o m o to r d a su a a p lica çã o W e b
P re p a ra n d o o se rvid o re s p a ra g ra n d e s ca rg a s
•
Habilitar uso de eventos via epoll (Linux kernel 2.5.44 e glibc 2.3.2);•
No FreeBSD, utilizar kqueue;N G iN X , o m o to r d a su a a p lica çã o W e b
P re p a ra n d o o se rvid o re s p a ra g ra n d e s ca rg a s
•
Alterar o limite de recursos de arquivos por worker para 100000;•
Alterar o limite de coneões por worker para 2048;•
Habilitar múltiplas conexões;•
Configuração básica 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 su a a p lica çã o W e b
P re p a ra n d o o se rvid o re s p a ra g ra n d e s ca rg a s
•
Habilitar compressão gzip no módulo HTTP;•
Podemos aumentar o tempo limite de keepalive, lembrando que conexões inativas 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; }
N G iN X , o m o to r d a su a a p lica çã o W e b
P re p a ra n d o o se rvid o re s p a ra g ra n d e s ca rg a s
•
Habilitar cache de metadados no módulo HTTP;•
Esta configuração não possui parâmetro “on”, apesar de existir parâmetro “off”;•
Configuraçã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; }
N G iN X , o m o to r d a su a a p lica çã o W e b
P re p a ra n d o o se rvid o re s p a ra g ra n d e s ca rg a s
•
Habilitar reset para conexões inativas;•
Habilitar sendfile para otimizar envio de arquivos;•
Habilitar tcp_nopush (enviar cabeçalhos 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 su a a p lica çã o W e b
P re p a ra n d o o se rvid o re s p a ra g ra n d e s ca rg a s
•
Tuning da pilha TCP no kernel do Linux, para suportar 100k conexões ativas 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
N G iN X , o m o to r d a su a a p lica çã o W e b
S e rvid o re s d e a p lica çã o , e sco lh a a su a lin g u a g e m
•
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 aplicação, escolha a sua linguagem;•
Balanceamento de carga entre servidores;•
SSL em tudo, sem sobrecarregar sua aplicação;•
Conteúdo estático;•
Cache de conteúdo dinâmico;•
Perguntas e encerramento.N G iN X , o m o to r d a su a a p lica çã o W e b
S e rvid o re s d e a p lica çã o , e sco lh a a su a lin g u a g e m
Internet
Internet
Apache
PHP
Internet
Internet
NGiNX
PHP-FPM
N G iN X , o m o to r d a su a a p lica çã o W e b
S e rvid o re s d e a p lica çã o , e sco lh a a su a lin g u a g e m
•
Protocolo FastCGI:–
PHP-FPM;–
uWSGI (Python, Ruby, Perl, .Net);•
Protocolo proxy HTTP:–
Java;–
Ruby (mongrel);–
BOSH (XMPP over HTTP);N G iN X , o m o to r d a su a a p lica çã o W e b
S e rvid o re s d e a p lica çã o , e sco lh a a su a lin g u a g e m
•
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 configuraçã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; }
N G iN X , o m o to r d a su a a p lica çã o W e b
S e rvid o re s d e a p lica çã o , e sco lh a a su a lin g u a g e m
•
Proxy HTTP, possibilitando a integração com praticamente quaisquer linguagem web;•
Exemplo de uso (sessão html da configuraçã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; }
N G iN X , o m o to r d a su a a p lica çã o W e b
B a la n ce a m e n to d e ca rg a e n tre se rvid 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 aplicação, escolha a sua linguagem;•
Balanceamento de carga entre servidores;•
SSL em tudo, sem sobrecarregar sua aplicação;•
Conteúdo estático;•
Cache de conteúdo dinâmico;•
Perguntas e encerramento.N G iN X , o m o to r d a su a a p lica çã o W e b
B a la n ce a m e n to d e ca rg a e n tre se rvid o re s
Internet
Internet
IPVS
Internet
Internet
NGiNX
PHP-FPM
PHP-FPM
Apache
PHP
Apache
PHP
N G iN X , o m o to r d a su a a p lica çã o W e b
B a la n ce a m e n to d e ca rg a e n tre se rvid o re s
•
Utilizaçã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; } }
N G iN X , o m o to r d a su a a p lica çã o W e b
B a la n ce a m e n to d e ca rg a e n tre se rvid o re s
Internet
Internet
NGiNX
PHP-FPM
Cache
Cluster 1
PHP-FPM
PHP-FPM
Cluster 2
PHP-FPM
PHP-FPM
PHP-FPM
PHP-FPM
Cluster 3
PHP-FPM
M
E
M
C
A
C
H
E
D
M
E
M
C
A
C
H
E
D
M
E
M
C
A
C
H
E
D
N G iN X , o m o to r d a su a a p lica çã o W e b
S S L e m tu d o , se m so b re ca rre g a r su a a p lica çã 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 aplicação, escolha a sua linguagem;•
Balanceamento de carga entre servidores;•
SSL em tudo, sem sobrecarregar sua aplicação;•
Conteúdo estático;•
Cache de conteúdo dinâmico;N G iN X , o m o to r d a su a a p lica çã o W e b
S S L e m tu d o , se m so b re ca rre g a r su a a p lica çã o
•
Configuração de SSL extremamente simples;•
Desonera o servidor de aplicação, 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 su a a p lica çã o W e b
C o n te ú d o e stá tico
•
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 aplicação, escolha a sua linguagem;•
Balanceamento de carga entre servidores;•
SSL em tudo, sem sobrecarregar sua aplicação;•
Conteúdo estático;•
Cache de conteúdo dinâmico;N G iN X , o m o to r d a su a a p lica çã o W e b
C o n te ú d o e stá tico
•
Possibilidade de comprimir o conteúdo estático em disco para entrega em deflate ou gzip;•
Desonera o servidor de aplicação, que não precisa servir conteúdo estático;•
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)"; }