Files
anatomia/nginx/nginx.conf
T

81 lines
3.0 KiB
Nginx Configuration File

worker_processes auto;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
gzip on;
gzip_types text/plain text/css application/javascript application/json application/wasm model/gltf-binary;
# Respect a proxy in front of this container (the user's own reverse proxy).
set_real_ip_from 0.0.0.0/0;
real_ip_header X-Forwarded-For;
server {
listen 80;
server_name _;
root /usr/share/nginx/html;
index index.html;
absolute_redirect off;
# 127.0.0.11 é o DNS interno do Docker. Usar uma variável no proxy_pass
# (em vez do hostname direto) força o nginx a resolver "anatomia-api"
# de novo a cada `valid=`, em vez de resolver uma única vez quando o
# worker sobe e cachear esse IP para sempre — sem isso, recriar o
# container anatomia-api (rebuild, restart) muda o IP dele e o nginx
# continua batendo no IP antigo até ser reiniciado manualmente.
# ipv6=off: a rede "dockernet" atribui IPv6 aos containers, mas o
# caminho IPv6 entre eles parece sem rota nesse host (a conexão via
# AAAA ora falha rápido com "Connection refused", ora fica pendurada
# até estourar o timeout) — forçamos resolução só por IPv4 (A records).
resolver 127.0.0.11 valid=10s ipv6=off;
location /api/ {
set $api_upstream anatomia-api:3333;
# Sem caminho depois da variável: com proxy_pass "dinâmico" (via
# variável) o nginx não reescreve o prefixo da location — ele só
# repassa a URI original inteira. Como as rotas do Fastify já são
# registradas em /api/..., isso bate certinho sem precisar reescrever.
proxy_pass http://$api_upstream;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# Consultas grandes (milhares de estruturas) ou o host sob carga de
# outras aplicações podem passar de 60s (default do nginx).
proxy_read_timeout 300s;
proxy_send_timeout 300s;
}
location /models/ {
set $api_upstream anatomia-api:3333;
proxy_pass http://$api_upstream;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 300s;
proxy_send_timeout 300s;
# NÃO usar "immutable"/cache longo aqui: os arquivos .glb têm nome
# fixo por sistema (ex: muscular.glb) mas o CONTEÚDO muda toda vez
# que o pipeline roda de novo — com cache "immutable" o navegador
# nunca mais rebaixava a versão nova, mesmo com hard-refresh.
# "no-cache" ainda permite resposta 304 (rápida) quando o arquivo
# realmente não mudou, via ETag do @fastify/static.
add_header Cache-Control "no-cache";
}
# SPA fallback.
location / {
try_files $uri $uri/ /index.html;
}
}
}