Ferramentas Essenciais para Web
Códigos de Status HTTP Comuns
Compreender os códigos de status HTTP é fundamental para diagnosticar problemas e otimizar o desempenho do servidor.
- 1xx (Informacional): Indica que a solicitação está sendo processada (ex: 100 Continue, 101 Switching Protocols).
- 2xx (Sucesso): A solicitação foi recebida, entendida e aceita com sucesso (ex: 200 OK).
- 3xx (Redirecionamento): Indica que o cliente precisa realizar uma ação adicional para completar a solicitação (ex: 301 Moved Permanently, 302 Found).
- 4xx (Erro do Cliente): A solicitação contém sintaxe incorreta ou não pode ser cumprida (ex: 403 Forbidden, 404 Not Found).
- 5xx (Erro do Servidor): O servidor falhou em cumprir uma solicitação aparentemente válida (ex: 500 Internal Server Error, 502 Bad Gateway).
Download de Arquivos com wget
O utilitário wget é uma ferramenta poderosa para baixar arquivos da web, com suporte a reinício de downloads interrompidos e controle de taxa de transferência.
# Exemplo: Baixar um arquivo com nome especificado e limitar a velocidade
wget -O nginx-1.24.0.tar.gz --limit-rate=1M 'https://nginx.org/download/nginx-1.24.0.tar.gz'
# Opções comuns:
# -q: Modo silencioso
# -c: Continuar download interrompido
# -P /caminho: Especificar o diretório de destino
# -O nome_arquivo: Especificar o nome do arquivo de saída
# --limit-rate=velocidade: Definir a taxa de transferência (ex: 1M para 1 Megabyte/segundo)
Obtendo Código de Status e IP com curl
O curl é versátil para interagir com servidores web, permitindo verificar respostas e identificar IPs.
# Obter apenas o código de status HTTP
curl -s -I -m10 -o /dev/null -w "%{http_code}" http://10.0.0.31:8080
# Obter o IP remoto do servidor de destino
curl -s -I -m10 -o /dev/null -w "%{remote_ip}" www.baidu.com
# Obter o IP local do cliente
curl -s -I -m10 -o /dev/null -w "%{local_ip}" www.baidu.com
# Opções comuns:
# -s: Modo silencioso
# -I: Realizar um request HEAD (apenas cabeçalhos)
# -m segundos: Definir timeout em segundos
# -o /dev/null: Descartar o corpo da resposta
# -w formato: Especificar o formato de saída (ex: %{http_code}, %{remote_ip})
Instalação e Atualização Suave do Nginx
O Nginx é um servidor web popular, conhecido por sua eficiência e flexibilidade. Ele possui versões Mainline (em desenvolvimento ativo), Stable (mais recente e estável) e Legacy (versões estáveis mais antigas).
O site oficial para download é: http://nginx.org/en/download.html
Instalação Compilada do Nginx
Compilar o Nginx a partir do código-fonte oferece controle total sobre os módulos incluídos.
#!/bin/bash
set -euo pipefail
readonly NGINX_SOURCE_FILE="nginx-1.24.0.tar.gz"
readonly INSTALL_PREFIX="/usr/local/nginx"
readonly SOURCE_DIR="/usr/local/src"
readonly NGINX_USER="nginx"
readonly NGINX_GROUP="nginx"
# Verifica se o arquivo fonte existe
if [ ! -f "${SOURCE_DIR}/${NGINX_SOURCE_FILE}" ]; then
echo "Erro: Arquivo fonte ${NGINX_SOURCE_FILE} não encontrado em ${SOURCE_DIR}."
exit 1
fi
# Verifica se o Nginx já está instalado
if [ -d "${INSTALL_PREFIX}/sbin" ]; then
echo "Erro: Nginx já parece estar instalado em ${INSTALL_PREFIX}."
exit 1
fi
# Cria diretórios necessários
mkdir -pv "${INSTALL_PREFIX}" "${SOURCE_DIR}"
# Cria usuário e grupo do Nginx, se não existirem
if ! getent group "${NGINX_GROUP}" &>/dev/null; then
useradd -r -s /sbin/nologin "${NGINX_USER}"
echo "Usuário e grupo '${NGINX_USER}' criados."
else
echo "Usuário e grupo '${NGINX_USER}' já existem."
fi
# Instala dependências
echo "Instalando dependências..."
yum install -y pcre pcre-devel zlib zlib-devel openssl openssl-devel gcc make gcc-c++ # Adicione outras dependências conforme necessário
if [ $? -ne 0 ]; then
echo "Erro: Falha ao instalar dependências."
exit 1
fi
# Descompacta e configura o Nginx
echo "Descompactando e compilando Nginx..."
tar xzf "${SOURCE_DIR}/${NGINX_SOURCE_FILE}" -C "${SOURCE_DIR}"
NGINX_DIR=$(basename "${NGINX_SOURCE_FILE}" .tar.gz)
cd "${SOURCE_DIR}/${NGINX_DIR}"
./configure \
--prefix="${INSTALL_PREFIX}" \
--user="${NGINX_USER}" \
--group="${NGINX_GROUP}" \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-pcre \
--with-stream \
--with-stream_ssl_module \
--with-stream_realip_module
make -j$(nproc) && make install
if [ $? -ne 0 ]; then
echo "Erro: Compilação e instalação do Nginx falharam."
exit 1
fi
# Ajusta permissões
chown -R "${NGINX_USER}:${NGINX_GROUP}" "${INSTALL_PREFIX}"
# Cria link simbólico para o executável
ln -sv "${INSTALL_PREFIX}/sbin/nginx" "/usr/local/sbin/nginx"
# Cria script de inicialização do systemd
cat > /etc/systemd/system/nginx.service <<eof after="network.target" and="" ao="" com="" compilado="" daemon-reload="" description="The" e="" echo="" else="" em="" enable="" eof="" execreload="/bin/kill" execstart="${INSTALL_PREFIX}/sbin/nginx" execstartpre="/bin/rm" exit="" falha="" fi="" habilita="" http="" hup="" if="" inicia="" iniciar="" instalado="" is-active="" killmode="process" killsignal="SIGQUIT" limitnofile="100000" nginx="" nginx.="" nss-lookup.target="" o="" pidfile="${INSTALL_PREFIX}/logs/nginx.pid" privatetmp="true" proxy="" recarrega="" remote-fs.target="" reverse="" server="" servi="" start="" sucesso="" systemctl="" systemd="" then="" timeoutstopsec="5" type="forking" wantedby="multi-user.target"></eof>
Comandos úteis do Nginx:
nginx -h: Exibe a ajuda.nginx -t: Testa a sintaxe dos arquivos de configuração.nginx -s reload: Recarrega a configuração sem interromper os processos em execução.nginx -s stop: Fecha graciosamente todos os processos.nginx -s quit: Fecha graciosamente o processo master e os workers.nginx -s reopen: Reabre os arquivos de log.
Atualização Suave do Nginx
A atualização suave permite atualizar o binário do Nginx sem interromper as conexões existentes. O processo envolve compilar a nova versão com os mesmos argumentos de configuração da versão antiga e, em seguida, sinalizar os processos do Nginx para substituírem os antigos gradualmente.
- Verifique os argumentos de configuração da versão atual:
nginx -V. - Compile a nova versão do Nginx usando os mesmos argumentos.
- Execute
make(semmake install) para gerar o novo binário na pastaobjs/. - Faça backup do binário antigo:
cp /usr/local/nginx/sbin/nginx /opt/nginx.old. - Substitua o binário antigo pelo novo:
cp objs/nginx /usr/local/nginx/sbin/nginx -f. - Teste a configuração:
nginx -t. - Envie o sinal
USR2para o processo master antigo:kill -USR2 $(cat /usr/local/nginx/logs/nginx.pid). Isso iniciará uma nova instância do Nginx com o novo binário. - Envie o sinal
WINCHpara o processo master antigo para que seus workers processem as conexões existentes e depois terminem:kill -WINCH $(cat /usr/local/nginx/logs/nginx.pid.oldbin). - Após um período de teste e confirmação de que a nova versão está funcionando corretamente, envie o sinal
QUITpara o processo master antigo para encerrá-lo:kill -QUIT $(cat /usr/local/nginx/logs/nginx.pid.oldbin).
Para reverter a atualização, envie o sinal HUP para o processo master antigo (kill -HUP $(cat /usr/local/nginx/logs/nginx.pid.oldbin)) e o sinal QUIT para o novo processo master (kill -QUIT $(cat /usr/local/nginx/logs/nginx.pid)).
Módulos Principais do Nginx
Configuração Principal (nginx.conf)
O arquivo nginx.conf contém configurações globais, de eventos e de HTTP. É comum incluir arquivos de configuração adicionais a partir de diretórios como conf.d/.
# Exemplo de estrutura básica do nginx.conf
worker_processes auto; # Define o número de worker processes (auto ou número de CPUs)
events {
worker_connections 1024; # Define o número máximo de conexões por worker process
use epoll; # Utiliza epoll para I/O multiplexing
}
http {
include mime.types; # Inclui tipos MIME
default_type application/octet-stream; # Tipo de conteúdo padrão
sendfile on; # Otimiza transferência de arquivos
keepalive_timeout 65; # Tempo limite para conexões keep-alive
# Inclui configurações de sites virtuais
include /usr/local/nginx/conf/conf.d/*.conf;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
Configurações Globais
user: Define o usuário e grupo sob os quais os worker processes rodarão.worker_processes: Número de worker processes. 'auto' ajusta com base nos núcleos da CPU.worker_cpu_affinity: Permite vincular worker processes a CPUs específicas.error_log: Define o caminho e o nível de severidade do log de erros (debug, info, notice, warn, error, crit, alert, emerg).worker_priority: Define a prioridade do worker process (nice value).worker_rlimit_nofile: Limita o número de arquivos que um worker process pode abrir.
Configurações de Eventos (events block)
worker_connections: Número máximo de conexões simultâneas que um worker process pode gerenciar.use: Método de I/O multiplexing a ser utilizado (ex: epoll, kqueue, select).accept_mutex: Habilita um mutex para serializar aceitação de novas conexões entre workers.multi_accept: Permite que um worker aceite múltiplas conexões de uma vez.
Teste de Carga com ab (Apache Bench)
O ab é uma ferramenta para medir o desempenho de servidores web.
# Aumentar o limite de arquivos abertos pelo processo
ulimit -n 102400
# Executar teste de carga com 800 conexões concorrentes e 10000 requisições totais
ab -c 800 -n 10000 http://10.0.0.41/
# Analisar a saída para "Failed requests" para identificar problemas.
Módulos Comuns do Nginx
Configuração HTTP (http block)
Dentro do bloco http, definem-se os server blocks para hospedar múltiplos sites ou configurar diferentes aspectos do servidor web.
Configuração de Virtual Hosts
# Arquivo: /usr/local/nginx/conf/conf.d/meusite.conf
server {
listen 80; # Porta de escuta
server_name www.meudominio.com; # Nome do domínio
root /var/www/meudominio/html; # Diretório raiz dos arquivos do site
index index.html index.htm; # Arquivos de índice padrão
location / {
try_files $uri $uri/ /index.html; # Tenta servir o arquivo, depois o diretório, ou o index.html
}
}
Configurando Múltiplos Sites (Desktop e Mobile)
# Arquivo: /usr/local/nginx/conf/conf.d/desktop.conf
server {
listen 80 default_server; # O primeiro server com listen 80 default_server será o padrão
server_name desktop.meudominio.com;
root /var/www/desktop/html;
}
# Arquivo: /usr/local/nginx/conf/conf.d/mobile.conf
server {
listen 80;
server_name mobile.meudominio.com;
root /var/www/mobile/html;
}
Redirecionamento de Erro 404 com location
server {
listen 80 default_server;
server_name site.com;
root /var/www/site/html;
error_page 404 = @custom_404; # Redireciona erro 404 para o named location @custom_404
location / {
index index.html;
}
location @custom_404 {
return 200 'Página não encontrada.'; # Retorna uma mensagem personalizada
add_header Content-Type text/plain;
}
}
Controle de Acesso por IP (allow/deny)
Restringe o acesso a determinados locais com base no endereço IP do cliente.
server {
listen 80;
server_name admin.site.com;
root /var/www/admin/html;
location /login {
allow 192.168.1.100; # Permite acesso do IP específico
deny all; # Nega acesso de todos os outros IPs
}
}
Redirecionamento com try\_files
O try\_files verifica a existência de arquivos ou diretórios em uma ordem específica e, se nenhum for encontrado, redireciona para um URI padrão.
server {
listen 80;
server_name app.com;
root /var/www/app/public;
# Tenta servir $uri, depois $uri.html, depois o diretório $uri/, e se nada funcionar, redireciona para /default.html
try_files $uri $uri.html $uri/ /default.html;
}
Página de Status do Nginx (stub\_status)
Exibe métricas de desempenho do Nginx.
server {
listen 80;
server_name status.com;
location /nginx_status {
stub_status;
allow 192.168.1.0/24; # Permite acesso da rede interna
deny all;
}
}
HTTPS e Módulo rewrite
Configuração Básica de HTTPS
Para habilitar HTTPS, configure a porta 443 com certificados SSL/TLS.
server {
listen 80; # Listener para HTTP
listen 443 ssl http2; # Listener para HTTPS com HTTP/2
server_name www.example.com;
ssl_certificate /etc/nginx/ssl/www.example.com.crt; # Caminho para o certificado público
ssl_certificate_key /etc/nginx/ssl/www.example.com.key; # Caminho para a chave privada
ssl_session_cache shared:sslcache:20m; # Cache de sessão SSL
ssl_session_timeout 10m; # Tempo de expiração do cache
# ... outras configurações do server ...
}
O módulo ngx_http_rewrite_module, que depende da biblioteca PCRE, é usado para reescrita de URLs.
Redirecionamento de HTTP para HTTPS com return
server {
listen 80;
listen 443 ssl http2;
server_name www.example.com;
ssl_certificate /etc/nginx/ssl/www.example.com.crt;
ssl_certificate_key /etc/nginx/ssl/www.example.com.key;
if ($scheme = http) {
return 301 https://$server_name$request_uri; # Redireciona permanentemente HTTP para HTTPS
}
# ... outras configurações ...
}
Redirecionamento para Manutenção
Utilize if e rewrite para redirecionar temporariamente o tráfego durante a manutenção.
server {
listen 80 default_server;
server_name maintenance.com;
set $maintenance_mode 0;
if ($remote_addr = 192.168.1.50) { # Permite acesso de um IP específico
set $maintenance_mode 1;
}
if ($maintenance_mode = 0) {
rewrite ^(.*)$ /maintenance.html break; # Redireciona outros IPs para a página de manutenção
}
location / {
root /var/www/maintenance/html;
index index.html;
}
}
Prevenção de Hotlinking com valid\_referers
Impede que outros sites usem seus recursos (imagens, arquivos) diretamente, verificando o cabeçalho Referer.
server {
# ... outras configurações ...
# Define os referers permitidos
valid_referers none blocked *.example.com google.com baidu.com;
# Se o referer não estiver na lista permitida, retorna 403 Forbidden
if ($invalid_referer) {
return 403 "Access Denied";
}
location /images/ {
root /var/www/assets;
}
}