Visão Geral
O que é o Nginx?
Nginx (engine x) é um servidor web leve, também utilizado como servidor de proxy reverso e como proxy de correio eletrônico (IMAP/POP3).
O que é um proxy reverso?
Um proxy reverso aceita conexões da internet e as encaminha para servidores em uma rede interna. As respostas dos servidores internos são então retornadas aos clientes. Neste cenário, o servidor de proxy atua como um intermediário, apresentando-se como um servidor de destino.
Instalação e Utilização Básica
Instalação
Para instruções detalhadas de instalação, consulte a documentação oficial do Nginx.
Utilização
O gerenciamento do Nginx é feito através de comandos simples. Os coamndos mais comuns são:
nginx -s encerramento_rapido # Finaliza o Nginx rapidamente, sem salvar informações.
nginx -s encerramento_suave # Finaliza o Nginx de forma suave, salvando informações.
nginx -s recarregar # Recarrega os arquivos de configuração.
nginx -s reabrir_log # Reabre os arquivos de log.
nginx -c caminho/do/arquivo # Especifica um arquivo de configuração.
nginx -t # Testa a sintaxe dos arquivos de configuração.
nginx -v # Exibe a versão do Nginx.
nginx -V # Exibe a versão, compilador e parâmetros de configuração.
Para Windows, um script em lote pode simplificar o processo. Abaixo, um exemplo para o diretório de instalação:
@echo off
nginx.exe -s stop
nginx.exe -t -c conf/nginx.conf
nginx.exe -c conf/nginx.conf
Exemplos de Configuração
Configuração de Proxy Reverso HTTP
O objetivo é configurar um proxy reverso HTTP simples. O arquivo nginx.conf padrão pode ser modificado da seguinte forma:
worker_processes 1;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format principal '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent"';
access_log /var/log/nginx/access.log principal;
sendfile on;
keepalive_timeout 65;
upstream servidor_aplicativo {
server 127.0.0.1:8089;
}
server {
listen 80;
server_name www.meudominio.com;
location / {
proxy_pass http://servidor_aplicativo;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
root /caminho/para/recursos/estaticos;
expires 30d;
access_log off;
}
location /status {
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}
}
}
Para aplicar, altere seu arquivo hosts e reinicie o Nginx.
Configuração de Balanceamento de Carga
Para distribuir o tráfego entre múltiplos servidores, utilize o bloco upstream.
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
upstream cluster_servidores {
server 192.168.1.11:80 weight=3;
server 192.168.1.12:80;
server 192.168.1.13:80 backup;
}
server {
listen 80;
server_name www.meudominio.com;
location / {
proxy_pass http://cluster_servidores;
proxy_next_upstream error timeout;
proxy_set_header Host $host;
proxy_connect_timeout 30;
}
}
}
Configuração para Múltiplas Aplicações Web
Direcionar subcaminhos para diferentes aplicações é feito com múltiplos blocos location.
http {
upstream app_vendas {
server localhost:8081;
}
upstream app_admin {
server localhost:8082;
}
server {
listen 80;
server_name www.meudominio.com;
location / {
proxy_pass http://app_vendas;
}
location /administracao/ {
proxy_pass http://app_admin;
}
location /api/ {
proxy_pass http://backend_api;
}
}
}
Configuração de Proxy Reverso HTTPS
Habilitar HTTPS envolve aidcionar diretivas SSL ao bloco server.
server {
listen 443 ssl;
server_name www.meudominio.com;
ssl_certificate /etc/nginx/ssl/certificado.pem;
ssl_certificate_key /etc/nginx/ssl/chave_privada.key;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
location / {
proxy_pass http://backend_http;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
}
}
Servidor de Arquivos Estáticos e Estáticos Puros
Para servir um site estático, aponte a root para o diretório dos arquivos.
server {
listen 80;
server_name static.meudominio.com;
root /var/www/site_estatico;
index index.html;
location / {
try_files $uri $uri/ =404;
}
# Configuração para servidor de download de arquivos
location /downloads/ {
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
charset utf-8;
alias /srv/armazenamento/;
}
}
Solução de CORS com Nginx
Para resolver problemas de Cross-Origin, insira os cabeçalhos CORS diretamente no Nginx.
Crie um arquivo /etc/nginx/conf.d/cors.conf:
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,X-Requested-With,Content-Type,Authorization';
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain; charset=utf-8';
add_header 'Content-Length' 0;
return 204;
}
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE' always;
add_header 'Access-Control-Allow-Headers' 'DNT,X-Requested-With,Content-Type,Authorization' always;
Então, inclua este arquivo nos server blocks ou location blocks necessários:
server {
listen 80;
server_name www.meudominio.com;
location /api/ {
include /etc/nginx/conf.d/cors.conf;
proxy_pass http://servidor_api_interno:8080/;
}
}