01 - Publicação de Documentos
video: https://youtu.be/... no frontmatter da nota.Publicação de Documentos
No contexto de um Servidor Web, a publicação de documentos é a função primária que permite que recursos (HTML, imagens, CSS, scripts, PDFs, vídeos) sejam disponibilizados para acesso global via protocolo HTTP/HTTPS. Tecnicamente, publicar um documento não é apenas "copiar um arquivo para uma pasta", mas sim inseri-lo em um ecossistema gerenciado pelo software servidor (Apache, Nginx, IIS, LiteSpeed), que controla permissões, tipos de conteúdo, cache, visibilidade e segurança.
1. O Diretório Raiz de Documentos (Document Root)
Todo servidor web possui uma diretiva de configuração fundamental chamada Document Root (Apache) ou root (Nginx). Este é o diretório no sistema de arquivos (/var/www/html no Linux, C:\inetpub\wwwroot no IIS) que o servidor mapeia como o ponto de partida para a URL principal. Quando o servidor recebe uma requisição para http://exemplo.com/doc.pdf, ele traduz internamente para o caminho físico /var/www/html/doc.pdf.
Configuração em Apache
<VirtualHost *:80>
ServerName exemplo.com
DocumentRoot /var/www/exemplo/public
<Directory /var/www/exemplo/public>
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
Configuração em Nginx
server {
listen 80;
server_name exemplo.com;
root /var/www/exemplo/public;
index index.html index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
}
2. Segurança por Isolamento
A publicação garante que o cliente web só consiga acessar arquivos dentro do diretório específico, impedindo navegação por arquivos sensíveis do sistema (ex: /etc/passwd, /etc/shadow).
Ataques Path Traversal
URLs maliciosas como http://exemplo.com/../../../../etc/passwd tentam escapar do Document Root. Servidores modernos normalizam essas URLs (resolvendo .. internamente) e bloqueiam requisições que saiam do diretório.
# Apache: deny all por default, allow apenas no diretório público
<Directory />
Require all denied
Options None
AllowOverride None
</Directory>
<Directory /var/www/html>
Require all granted
Options -Indexes
</Directory>
3. Processo de Disponibilização (Deployment)
A publicação envolve a transferência dos documentos do ambiente de desenvolvimento para o servidor de produção, através de:
Métodos Tradicionais
| Método | Vantagem | Desvantagem |
|---|---|---|
| SCP/SFTP (SSH) | Seguro, simples | Manual, sem versionamento |
| rsync (SSH) | Diferencial, rápido | Sincronização manual |
| FTP | Veloz | Inseguro (senhas em claro) |
| WebDAV (HTTP) | Edição remota | Raramente usado hoje |
Métodos Modernos (CI/CD)
- Git push: servidor tem clone do repositório; webhook aciona
git pullno deploy. - Pipelines CI/CD: GitHub Actions, GitLab CI, Jenkins fazem build, testes e deploy automáticos.
- Atomic Deploys: nova versão em pasta paralela + symlink swap (zero downtime).
- Container Deploy: Docker image push + pull no servidor (Kubernetes, Docker Swarm).
Deploy Atômico com Symlink
tar xzf release-20240115.tar.gz -C /var/www/releases/20240115 # 1. build nova versão
ln -sfn /var/www/releases/20240115 /var/www/exemplo/current # 2. swap atômico
systemctl reload nginx # 3. reload web
ls -dt /var/www/releases/*/ | tail -n +6 | xargs rm -rf # 4. manter últimos 5
4. Cabeçalhos de Entidade e MIME Types
Ao publicar um documento, o servidor deve informar ao navegador o que aquele arquivo representa, através do mapeamento de extensões para MIME Types (Multipurpose Internet Mail Extensions, RFC 2045).
Tipos MIME Comuns
| Extensão | MIME Type | Extensão | MIME Type |
|---|---|---|---|
| .html/.htm | text/html | .png | image/png |
| .css | text/css | .jpg | image/jpeg |
| .js | application/javascript | .svg | image/svg+xml |
| .json | application/json | .mp4 | video/mp4 |
| application/pdf | .woff2 | font/woff2 | |
| .exe | application/octet-stream |
Configuração em Nginx: tipos definidos em /etc/nginx/mime.types (bloco types { ... }).
5. Indexação Automática e Documentos Padrão
Directory Index
Se o usuário acessa uma pasta (ex: http://exemplo.com/imagens/), o servidor procura por um arquivo padrão de publicação, geralmente index.html, index.php ou default.asp.
index index.html index.htm index.php;
Listagem de Diretório
Se o arquivo de índice não existir e a configuração permitir, o servidor gera uma listagem automática de arquivos. Em produção, isso costuma ser desativado por motivos de segurança (evita expor estrutura interna):
Options -Indexes # Desativar listagem (Apache)
Options +Indexes # Ativar (apenas para áreas internas)
6. Permissões de Sistema de Arquivos
Um documento só está "tecnicamente publicado" se o processo do servidor web (geralmente o usuário www-data no Debian/Ubuntu, nginx no RHEL, IIS_USR no Windows) tiver permissões de leitura sobre o arquivo.
Modelo de Permissões Recomendado
| Dono | Grupo | Outros | Permissão | Justificativa |
|---|---|---|---|---|
| deploy | www-data | --- | 750 (rwxr-x---) | Deploy edita, servidor lê |
| deploy | www-data | --- | 640 (rw-r-----) | Arquivos regulares |
| deploy | www-data | --- | 770 (rwxrwx---) | Diretório de upload |
Riscos Comuns
- Permissão 777: qualquer usuário do sistema pode alterar (risco de defacement).
- Dono www-data: se processo web for comprometido, atacante edita documentos.
- Permissão 000: documento não será servido (HTTP 403 Forbidden).
7. Publicação Estática vs Dinâmica
Documentos Estáticos
O arquivo existe fisicamente no disco. O servidor apenas lê o conteúdo e o envia pelo socket TCP. Exemplos: .jpg, .css, .txt, .html simples. Vantagens: rápido (pode ser cacheado em CDN), não consome CPU.
Documentos Dinâmicos
O "documento" não existe até o momento da requisição. O servidor executa um interpretador (PHP, Python, Node, Ruby, Java) que gera o HTML em tempo real. Vantagens: conteúdo personalizado, dados atualizados. Desvantagens: consome CPU, difícil de cache.
Híbrido (SSG/ISR)
- SSG (Static Site Generation): build no deploy gera HTML estático (Gatsby, Next.js, Hugo).
- ISR (Incremental Static Regeneration): estático mas regenera periodicamente (Next.js).
8. Virtual Hosting (Múltiplos Sites)
Um único servidor web pode publicar documentos de múltiplos domínios no mesmo IP, distinguindo-os pelo cabeçalho HTTP Host: (HTTP/1.1+, RFC 9112).
| Tipo | Distinção | Exemplo |
|---|---|---|
| Name-based | Por hostname (header Host) | Mais comum |
| IP-based | Por IP de chegada | Servidor com múltiplos IPs |
| Port-based | Por porta TCP | Sites em portas diferentes |
9. Serviço de Documentos em CDN
CDNs publicam cópias dos documentos em edges geograficamente distribuídos:
- Origin pull: primeira requisição busca no servidor, subsequentes no cache do edge.
- Push: administrador envia documentos para CDN antecipadamente.
- Invalidation: marcar versão antiga como obsoleta para forçar re-fetch.
10. Auditoria de Publicação
curl -I https://exemplo.com/Documento.pdf | grep -i content-type # MIME type retornado
curl -I https://exemplo.com/style.css | grep -i cache-control # headers de cache
apachectl configtest # validar Apache
nginx -t # validar Nginx
stat /var/www/exemplo/index.html # owner/permissões
find /var/www -perm /o+w -type f # arquivos com permissões inseguras
11. Headers Críticos de Publicação Segura
| Header | Função |
|---|---|
Content-Type, Content-Length, Content-Disposition |
MIME type, tamanho, sugestão download/inline |
Cache-Control, ETag, Last-Modified |
Diretivas de cache e cache condicional |
Content-Encoding |
gzip, br, deflate |
X-Content-Type-Options |
nosniff (evita MIME sniffing) |
X-Frame-Options, Content-Security-Policy |
Prevenir clickjacking, restringir fontes |
12. Conclusão
A publicação de documentos é o ato de transformar dados inertes no disco rígido em recursos endereçáveis e recuperáveis através da World Wide Web. Envolve muito mais do que copiar arquivos: requer planejamento de diretórios, configuração correta de MIME types, controle de permissões, estratégia de deploy (atômico, CI/CD), isolamento de segurança (path traversal, listagem de diretório), headers HTTP de segurança e estratégias de cache (estático, dinâmico, CDN). Uma publicação bem feita garante performance, segurança e disponibilidade — pilares de qualquer serviço web profissional.