Files

66 lines
2.1 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
server {
listen 80;
server_name 1bis.hocks.eu localhost _;
root /usr/share/nginx/html;
index index.html;
gzip on;
gzip_types text/css application/javascript image/svg+xml application/json;
gzip_min_length 1024;
# Docker-eigener DNS: Upstream-Namen bei jeder Anfrage neu auflösen.
# Ohne das puffert nginx die Container-IP vom Start – nach einem Recreate
# der Mail-API (neue IP) liefert jede Anfrage 502, bis nginx neu startet.
resolver 127.0.0.11 valid=10s;
# HTML nie cachen (Assets sind hash-benannt → ein Reload genügt)
location = /index.html {
add_header Cache-Control "no-cache" always;
}
# Cache für gehashte Build-Assets
location ^~ /assets/ {
expires 30d;
add_header Cache-Control "public, immutable";
}
# Statische Dateien im Root (Favicons – nicht hash-benannt, kurz cachen)
location ~* \.(png|jpg|jpeg|webp|ico|svg|woff2?)$ {
expires 1d;
add_header Cache-Control "public";
}
# Mail-API (Container onebis8-mail-api im selben Docker-Netz npm_default).
# Das Token kommt aus app.env (envsubst beim Container-Start) und liegt
# NIE im Browser – der Endpunkt ist nur vom Server erreichbar.
location = /api/mail/send {
limit_except POST { deny all; }
set $mail_api http://onebis8-mail-api:8080;
proxy_pass $mail_api/send;
proxy_set_header Host $host;
proxy_set_header X-Api-Token "${MAIL_API_TOKEN}";
proxy_set_header X-Request-Source onebis8-nginx;
client_max_body_size 64k;
proxy_read_timeout 15s;
}
# Game-API (Multiplayer-Spielräume, Container onebis8-api)
location /api/game/ {
set $game_api http://onebis8-api:8080;
proxy_pass $game_api;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 64k;
proxy_read_timeout 30s;
}
# SPA-Fallback
location / {
try_files $uri $uri/ /index.html;
}
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "DENY" always;
}