Nginx é um servidor web robusto e eficiente, amplamente utilizado em infraestruturas modernas. Diferente de servidores web tradicionais, que utilizam uma arquitetura multithread, o Nginx emprega uma arquitetura baseada em eventos não-threaded. Essa abordagem permite lidar com milhares de conexões simultaneamente, tornando-o ideal para websites de alto tráfego.
Além de servir páginas estáticas, o Nginx é altamente versátil e pode ser configurado para desempenhar diversas funções, como balanceamento de carga, cache HTTP e atuar como proxy reverso. Essas capacidades tornam o Nginx uma peça fundamental em arquiteturas web complexas.
Proxy Reverso e Proxy Normal
Para entender o papel do Nginx como proxy reverso, é essencial diferenciar entre um proxy normal e um proxy reverso:
- Proxy Normal: Nesse cenário, o cliente envia uma requisição ao proxy, que a encaminha para o servidor. O servidor não sabe quem é o cliente original, interagindo apenas com o proxy. Essa configuração é útil para privacidade e para contornar restrições geográficas.
- Proxy Reverso: Por outro lado, o proxy reverso fica entre o cliente e múltiplos servidores backend. O cliente faz a solicitação ao proxy, que decide qual servidor processará a requisição. O cliente não sabe qual servidor específico foi utilizado. O Nginx é amplamente usado como proxy reverso devido à sua eficiência e flexibilidade.
Exemplo de Proxy Reverso com Nginx:
- Requisições para
/admin
podem ser encaminhadas ao Servidor 1. - Requisições para
/settings
podem ser encaminhadas ao Servidor 2.
server {
listen 80;
server_name example.com;
location /admin {
proxy_pass http://server1;
}
location /settings {
proxy_pass http://server2;
}
}
Vantagens do Nginx
O Nginx oferece várias vantagens que o tornam uma escolha preferida para projetos web:
- Alta Conexão Simultânea: Capacidade de lidar com mais de 10.000 conexões simultâneas.
- Cache HTTP: Reduz a carga do servidor e melhora o tempo de resposta.
- Proxy Reverso: Encaminha requisições para o servidor apropriado.
- Balanceamento de Carga: Distribui requisições entre vários servidores.
- Gateway de API: Gerencia e roteia requisições de API.
- Servir Arquivos Estáticos: Serve e armazena em cache arquivos como imagens e vídeos de forma eficiente.
- Terminação SSL: Gerencia certificados SSL para conexões seguras.
Instalação e Configuração do Nginx
1. Usando Docker
Para instalar e configurar o Nginx em um container Docker:
Passo 1: Baixe e inicie um container Ubuntu:
docker run -it -p 8080:80 ubuntu
Passo 2: Instale o Nginx:
apt-get update
apt-get install nginx
Passo 3: Verifique a instalação:
nginx -v
2. Instalação no Host
No Ubuntu ou Debian, utilize os comandos abaixo:
sudo apt update
sudo apt install nginx
sudo systemctl start nginx
sudo systemctl status nginx
No CentOS, Red Hat ou Fedora:
sudo yum update
sudo yum install nginx
sudo systemctl start nginx
sudo systemctl enable nginx
Configuração Básica do Nginx
O arquivo principal de configuração do Nginx é o nginx.conf
, geralmente localizado em /etc/nginx/nginx.conf
. Um exemplo básico de configuração:
worker_processes auto;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
}
Detalhamento:
- worker_processes auto: Ajusta automaticamente o número de processos worker com base nos núcleos da CPU.
- worker_connections 1024: Define que cada worker pode lidar com até 1024 conexões simultâneas.
- http: Bloco principal para configurações de requisições HTTP.
- server: Define as configurações de um servidor virtual.
- location /: Manipula requisições para o diretório raiz.
Criando um Site Básico com Nginx
- Crie um diretório para o projeto:
mkdir -p /www/data
echo "<h1>Bem-vindo ao Nginx</h1>" > /www/data/index.html
- Configure o Nginx para apontar para o diretório criado:
server {
listen 80;
server_name localhost;
root /www/data;
location / {
try_files $uri $uri/ =404;
}
}
- Recarregue o Nginx:
nginx -s reload
- Acesse: http://localhost.
Recursos Avançados
Cache com Nginx
O Nginx pode armazenar respostas em cache para melhorar a performance.
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m;
server {
location / {
proxy_cache my_cache;
proxy_pass http://backend_server;
}
}
Balanceamento de Carga
Distribua o tráfego entre múltiplos servidores backend:
upstream backend {
server backend1.example.com;
server backend2.example.com;
}
server {
location / {
proxy_pass http://backend;
}
}
Habilitando SSL
Configure conexões seguras com SSL/TLS:
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/ssl/example.com.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
location / {
root /var/www/html;
index index.html;
}
}
Redirecione HTTP para HTTPS:
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
}
O Nginx é uma ferramenta indispensável na construção de serviços web modernos. Sua arquitetura leve e eficiente, somada à flexibilidade, faz dele a escolha principal para desenvolvedores e equipes DevOps. Seja como proxy reverso, balanceador de carga ou servidor web, o Nginx entrega alta performance e confiabilidade para atender às demandas de infraestrutura de alto tráfego.
Explore e implemente essas configurações para maximizar o potencial do Nginx em seus projetos!
Sou um profissional na área de Tecnologia da informação, especializado em monitoramento de ambientes, Sysadmin e na cultura DevOps. Possuo certificações de Segurança, AWS e Zabbix.