Estrutura Básica do Arquivo nginx.conf
Após a instalação do Nginx em sistemas Linux, o arquivo de configuração principal é localizado no diretório conf dentro da instalação, com o nome nginx.conf. O arquivo é dividido em blocos lógicos que definem diferentes níveis de configuração. A estrutura geral inclui três partes principais: bloco global, bloco events e bloco http.
O bloco http contém configurações relacionadas ao servidor HTTP, como mapeamento de tipos MIME, definição de logs, parâmetros de conexão e diretivas de roteamento. Dentro dele, é possível definir múltiplos blocos server, cada um represantando um host virtual, e dentro de cada server, podem existir vários blocos location para tratar solicitações específicas.
Exemplo Simplificado de Configuração
# Configurações globais
user nginx nginx;
worker_processes 1;
pid logs/nginx.pid;
error_log logs/error.log error;
events {
worker_connections 1024;
use epoll;
multi_accept on;
accept_mutex on;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
location ~* \.html$ {
proxy_pass http://htmlservers;
}
location ~* \.aspx$ {
proxy_pass http://aspxservers;
}
location = /50x.html {
root html;
internal;
}
error_page 500 502 503 504 /50x.html;
}
upstream htmlservers {
server 192.168.2.50:80;
server 192.168.2.51:80;
}
upstream aspxservers {
server 192.168.2.50:80;
server 192.168.2.51:80;
}
upstream picservers {
server 192.168.2.50:80;
server 192.168.2.51:80;
}
}
Principais Blocos de Configuração
Bloco Global
Define parâmetros que afetam todo o servidor Nginx. Inclui configurações como usuário e grupo sob os quais o processo será executado, número de processos trabalhadores, caminho do PID e localização dos arquivos de log.
Bloco Events
Controla como os processos trabalhadores lidam com conexões de rede. Inclui diretivas como:
worker_connections: número máximo de conexões simultâneas por processo.use: modelo de evento usado (ex:epollem Linux).multi_accept: permite que um processo aceite múltiplas conexões de uma vez.accept_mutex: evita o problema de "thundering herd" ao sincronizar acesso a novas conexões.
Bloco HTTP
Contém configurações gerais para servidores HTTP, como:
- Inclusão de arquivos de tipo MIME (
include mime.types). - Definição de tipo padrão (
default_type). - Ativação de
sendfilepara melhor desempenho em transferência de arquivos. - Tempo de inatividade para conexões persistentes (
keepalive_timeout).
Blocos Server e Location
Cada bloco server representa um host virtual, com configurações específicas de porta, nome de domínio e diretivas de resposta. Dentro de server, os blocos location são usados para mapear URLs a ações específicas, como redirecionamento, proxy ou resposta estática. Eles suportam expressões regulares e correspondência exata, permitindo flexibilidade extrema na gestão de requisições.
Diretivas Essenciais no Bloco Global
user
Especifica o usuário e grupo sob os quais o Nginx irá operar. Exemplo:
user nginx nginx;
É necessário garantir que o usuário tenha permissão para acessar arquivos e diretórios críticos.
worker_processes
Define quantos processos trabalhadores serão iniciados. Recomenda-se usar o valor auto para detectar automaticamente o número de núcleos do CPU:
worker_processes auto;
pid
Define onde o arquivo de PID será armazenado:
pid logs/nginx.pid;
error_log
Configura o caminho e nível de detalhe dos logs de erro:
error_log logs/error.log warn;
Níveis válidos: debug, info, notice, warn, error, crit, alert, emerg. Em produção, warn ou error são recomendados.
Diretivas do Bloco Events
worker_connections
Define o número máximo de conexões simultâneas por processo trabalhador:
worker_connections 1024;
use
Seleciona o modelo de eventos mais eficiente para o sistema operacional:
use epoll;
Em sistemas Linux, epoll é a opção ideal.
multi_accept
Permite que um processo trabalhador aceite várias conexões de uma só vez:
multi_accept on;
accept_mutex
Ativa a exclusão mútua entre processos para evitar "thundering herd". Por padrão, está habilitado:
accept_mutex on;