web-react/: SPA Vite+React+TS, nginx раздаёт статику и проксирует /api на api:8000 по локалке. docker-compose: web(Flet)->web-react на :80. transfer_crud.backup_restore: чистим содержимое data/radar вместо rmtree точки монтирования (EBUSY).
37 lines
1.5 KiB
Nginx Configuration File
37 lines
1.5 KiB
Nginx Configuration File
server {
|
||
listen 80;
|
||
server_name _;
|
||
root /usr/share/nginx/html;
|
||
index index.html;
|
||
|
||
# Статика SPA: всё неизвестное отдаём index.html (клиентский роутинг)
|
||
location / {
|
||
try_files $uri $uri/ /index.html;
|
||
}
|
||
|
||
# Прокси на внутренний API-контейнер (браузер к api:8000 напрямую не ходит).
|
||
# Префикс /api срезается: /api/auth/login -> http://api:8000/auth/login
|
||
#
|
||
# Используем встроенный DNS Docker (127.0.0.11) и переменную в proxy_pass,
|
||
# чтобы nginx переразрешал имя `api` на каждый запрос. Иначе nginx кэширует
|
||
# IP при старте и ломается (502), если контейнер api перезапустился и сменил IP.
|
||
location /api/ {
|
||
resolver 127.0.0.11 valid=10s ipv6=off;
|
||
set $api_backend api;
|
||
rewrite ^/api/(.*)$ /$1 break;
|
||
proxy_pass http://$api_backend:8000;
|
||
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_read_timeout 60s;
|
||
}
|
||
|
||
# Кэш статических ассетов с хэшем в имени
|
||
location /assets/ {
|
||
expires 1y;
|
||
add_header Cache-Control "public, immutable";
|
||
}
|
||
}
|