Instalação e Conteúdo Estático
Aula 1 de 6
Instalação do Nginx
Instalação via apt (Debian/Ubuntu)
# Atualizar repositórios
sudo apt update
# Instalar Nginx
sudo apt install nginx -y
# Verificar status
sudo systemctl status nginx
sudo systemctl enable nginx
# Verificar versão
nginx -v
Instalação via yum (RHEL/CentOS/Rocky)
# Adicionar EPEL (se necessário)
sudo yum install epel-release -y
# Instalar Nginx
sudo yum install nginx -y
# Iniciar e habilitar
sudo systemctl start nginx
sudo systemctl enable nginx
# Firewall
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
Compilação a partir do fonte
# Dependências
sudo apt install build-essential libpcre3-dev zlib1g-dev openssl libssl-dev -y
# Download da fonte
cd /usr/src
sudo wget https://nginx.org/download/nginx-1.26.2.tar.gz
sudo tar -xzf nginx-1.26.2.tar.gz
cd nginx-1.26.2
# Configurar com módulos desejados
sudo ./configure \
--prefix=/etc/nginx \
--sbin-path=/usr/sbin/nginx \
--modules-path=/usr/lib/nginx/modules \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/var/run/nginx.pid \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-stream \
--with-stream_ssl_module
# Compilar e instalar
sudo make && sudo make install
# Testar instalação
nginx -t
Estrutura do nginx.conf
# Diretórios principais do Nginx
/etc/nginx/
├── nginx.conf # Configuração principal
├── sites-available/ # Configurações de sites
├── sites-enabled/ # Sites ativos (symlinks)
├── conf.d/ # Configurações adicionais
├── modules-enabled/ # Módulos
├── snippets/ # Trechos reutilizáveis
├── ssl/ # Certificados
└── proxy_params # Parâmetros de proxy
# /etc/nginx/nginx.conf - Estrutura principal
user www-data;
worker_processes auto;
pid /run/nginx.pid;
events {
worker_connections 768;
multi_accept on;
use epoll;
}
http {
# Basic settings
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# MIME types
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Logging
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
# Gzip
gzip on;
# Virtual Hosts
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
Blocos de Configuração
| Bloco | Função |
|---|---|
events | Configurações de conexão (worker_connections, epoll) |
http | Configurações do protocolo HTTP (global) |
server | Configuração de um site/virtual host |
location | Configuração para caminhos específicos |
upstream | Pool de servidores para load balancing |
stream | Proxy TCP/UDP (não HTTP) |
Servindo Conteúdo Estático
Primeiro Server Block
# /etc/nginx/sites-available/static-site
server {
listen 80;
listen [::]:80;
server_name static.exemplo.com;
root /var/www/static;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
# Logs
access_log /var/log/nginx/static-access.log;
error_log /var/log/nginx/static-error.log;
}
# Habilitar site
sudo ln -s /etc/nginx/sites-available/static-site /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
root vs alias
# root: caminho completo é root + location
location /images {
root /var/www/static;
# Acessa: /var/www/static/images/foto.jpg
}
# alias: substitui o caminho do location
location /images {
alias /var/www/static/photos;
# Acessa: /var/www/static/photos/foto.jpg
}
# Exemplo prático
server {
root /var/www/site;
location / {
try_files $uri $uri/ =404;
}
location /assets {
alias /var/www/static-assets;
# /assets/style.css -> /var/www/static-assets/style.css
}
location /downloads {
root /var/www/files;
# /downloads/arquivo.zip -> /var/www/files/downloads/arquivo.zip
}
}
Diretiva index
server {
root /var/www/site;
# Ordem de procura dos arquivos index
index index.html index.htm index.php index.nginx-debian.html;
location / {
try_files $uri $uri/ /index.html;
}
location /admin {
index admin.html login.html;
}
}
try_files
# CASO 1: Site estático com fallback
location / {
try_files $uri $uri/ =404;
}
# CASO 2: SPA (Single Page Application)
location / {
try_files $uri $uri/ /index.html;
}
# CASO 3: PHP com fallback
location / {
try_files $uri $uri/ /index.php?$query_string;
}
# CASO 4: Múltiplas opções com named location
location / {
try_files $uri $uri/ @backend;
}
location @backend {
proxy_pass http://localhost:3000;
}
Directory Listing
location /files {
root /var/www;
autoindex on;
autoindex_exact_size off; # Tamanho human-readable
autoindex_localtime on; # Data local
# Proteger com autenticação
auth_basic "Arquivos";
auth_basic_user_file /etc/nginx/.htpasswd;
}
Lab: Servidor de Arquivos Estáticos
Configure um servidor Nginx servindo múltiplos diretórios com diferentes configurações.
# 1. Criar estrutura de diretórios
sudo mkdir -p /var/www/static-site/{public,assets/{css,js,images},files,admin}
# 2. Criar arquivos de exemplo
echo "<h1>Bem-vindo ao Nginx</h1>" | sudo tee /var/www/static-site/public/index.html
echo "body { background: #f0f0f0; }" | sudo tee /var/www/static-site/public/assets/css/style.css
echo "console.log('Nginx OK');" | sudo tee /var/www/static-site/public/assets/js/app.js
echo "<h1>Área Administrativa</h1>" | sudo tee /var/www/static-site/public/admin/index.html
echo "Arquivo para download" | sudo tee /var/www/static-site/public/files/readme.txt
# 3. Criar configuração do site
cat << 'NGINX' | sudo tee /etc/nginx/sites-available/static-lab
server {
listen 80;
server_name static-lab.local;
root /var/www/static-site/public;
index index.html;
# Configuração principal
location / {
try_files $uri $uri/ =404;
}
# Assets com cache longo
location /assets/ {
expires 1y;
add_header Cache-Control "public, immutable";
access_log off;
}
# Alias para diretório de arquivos
location /downloads/ {
alias /var/www/static-site/public/files/;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
}
# Área administrativa protegida
location /admin/ {
auth_basic "Admin Access";
auth_basic_user_file /etc/nginx/.htpasswd;
}
# Negar acesso a arquivos ocultos
location ~ /\. {
deny all;
access_log off;
log_not_found off;
}
access_log /var/log/nginx/static-lab-access.log;
error_log /var/log/nginx/static-lab-error.log;
}
NGINX
# 4. Criar senha para admin
sudo apt install apache2-utils -y # para htpasswd
sudo htpasswd -c /etc/nginx/.htpasswd admin
# 5. Habilitar site
sudo ln -s /etc/nginx/sites-available/static-lab /etc/nginx/sites-enabled/
sudo rm -f /etc/nginx/sites-enabled/default
# 6. Testar e recarregar
sudo nginx -t && sudo systemctl reload nginx
# 7. Testar endpoints
curl -I http://static-lab.local/
curl -I http://static-lab.local/assets/css/style.css
curl http://static-lab.local/downloads/
curl -I http://static-lab.local/admin/
Conteúdo estático bem configurado é a base de Performance. Use root para mapeamento direto, alias para redirecionar caminhos, try_files para fallback inteligente e expires para cache eficiente.