iac/nginx/templates/default.conf.template

167 lines
7.2 KiB
Plaintext
Raw 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.

# Рендерится образом nginx: envsubst подставляет ${PLATFORM_DOMAIN} и т.п.
# из окружения и кладёт результат в /etc/nginx/conf.d/default.conf (внутри http{}).
# Переменные вида $host / $http_upgrade — НЕ окруженческие, envsubst их не трогает.
large_client_header_buffers 8 128k;
client_max_body_size 5000M; # крупные загрузки (снимки, облака точек)
tcp_nopush on;
# TLS (самоподписанный сертификат на все домены). Задаём на http-уровне —
# наследуется всеми server-блоками. Файлы монтируются из ./nginx/certs.
ssl_certificate /etc/nginx/certs/selfsigned.crt;
ssl_certificate_key /etc/nginx/certs/selfsigned.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_session_cache shared:SSL:10m;
http2 on;
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml;
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
upstream backend { server backend:8000; }
upstream frontend { server frontend:80; }
upstream minio_s3 { server minio:9000; }
upstream minio_console { server minio:9001; }
upstream rabbitmq_mgmt { server rabbitmq:15672; }
# processing пока не поднимаем — upstream'ы отключены (иначе nginx падает на
# "host not found in upstream" при старте)
# upstream processing_api { server processing-api:8080; }
# upstream processing_frontend { server processing-frontend:8080; }
# Общие проксирующие заголовки. ВАЖНО: если в location задан свой proxy_set_header,
# эти НЕ наследуются — там заголовки продублированы явно.
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;
# ============================ Платформа (основной домен) ====================
server {
listen 80 default_server;
listen 443 ssl default_server;
server_name ${PLATFORM_DOMAIN};
location = /healthz {
access_log off;
add_header Content-Type text/plain;
return 200 "ok\n";
}
# Рантайм-конфиг фронта. Прод-сборка по умолчанию уходит в zitadel, которого
# тут нет, — форсим классический вход через backend (auth_type=original).
# Отдаём сами: в образе frontend этого файла нет (был бы 404).
location = /static/config.json {
default_type application/json;
add_header Cache-Control "no-store";
return 200 '{"auth_type":"original"}';
}
# Django backend: REST API + админка
location /api/ { proxy_pass http://backend; }
location /admin/ { proxy_pass http://backend; }
# --- processing (workflows) под /workflows --- (пока не поднимаем)
# Префикс /workflows срезаем: api ждёт пути /api/v1/..., фронт — от корня.
# location = /workflows { return 301 /workflows/; }
# location /workflows/api/ {
# rewrite ^/workflows/(.*)$ /$1 break;
# proxy_pass http://processing_api;
# }
# location /workflows/ {
# rewrite ^/workflows/(.*)$ /$1 break;
# 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;
# proxy_set_header Upgrade $http_upgrade;
# proxy_set_header Connection $connection_upgrade;
# proxy_pass http://processing_frontend;
# }
# S3-объекты (media) по относительному пути, с поддержкой Range (TODO: в работе)
# location /sarex-media-storage/ {
# 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;
# proxy_http_version 1.1;
# proxy_set_header Connection "";
# proxy_set_header Range $http_range;
# proxy_set_header If-Range $http_if_range;
# proxy_buffering off;
# proxy_request_buffering off;
# proxy_max_temp_file_size 0;
# proxy_pass http://minio_s3;
# }
# Frontend SPA (host-приложение само отдаёт статику и роутинг)
location / {
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;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_pass http://frontend;
}
}
# ======================= Admin: RabbitMQ management UI ======================
server {
listen 80;
listen 443 ssl;
server_name ${ADMIN_DOMAIN};
location / {
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;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_pass http://rabbitmq_mgmt;
}
}
# ============================== MinIO (отдельный домен) =====================
# Консоль отдаётся с КОРНЯ домена (порт 9001) — так её статика (/static, /api,
# websocket) резолвится без сабпути. У сервиса minio:
# MINIO_BROWSER_REDIRECT_URL = https://<MINIO_DOMAIN>
# S3 API (:9000) здесь НЕ публикуется: backend ходит в minio:9000 по внутренней
# сети. Понадобится S3 наружу — заведи отдельный домен (напр. s3.<...>) на minio_s3.
server {
listen 80;
listen 443 ssl;
server_name ${MINIO_DOMAIN};
location / {
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;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header X-NginX-Proxy true;
chunked_transfer_encoding off;
# крупные загрузки объектов через консоль
proxy_buffering off;
proxy_request_buffering off;
proxy_max_temp_file_size 0;
proxy_pass http://minio_console;
}
}