Files
BarevClub/infra/prod/nginx.conf
T
zabudko-ruandClaude Opus 5.5 dda917fc71 Prod: new admin on admin.*, old admin moves to admin.*/old/
Dockerfile builds apps/backoffice into /srv/admin and the old admin with
base /old/; nginx serves /old/ with its own uncached index.html.
Worker notification links point to the new admin pages (moves, requests,
chats); BACKOFFICE_URL defaults to ADMIN_URL.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-21 04:22:36 +04:00

96 lines
3.1 KiB
Nginx Configuration File

# Шлюз Barev: Nginx Proxy Manager (TLS) → этот контейнер → статика / API / лендинг.
# Хост определяется по первому сегменту домена: app.*, pro.*, admin.*, api.*, иначе — лендинг.
map $host $barev_site {
~^app\. client;
~^pro\. pro;
~^admin\. admin;
~^api\. api;
default landing;
}
server {
listen 80;
server_name _;
client_max_body_size 12m;
server_tokens off;
# www.barevclub.com → barevclub.com: один адрес для SEO и CORS (API разрешает только основной домен)
if ($host ~* ^www\.(.+)$) {
return 301 https://$1$request_uri;
}
# NPM терминирует TLS и передаёт схему в X-Forwarded-Proto: http → https для всех хостов Barev.
# ACME-проверки Let's Encrypt NPM обрабатывает сам, сюда они не доходят.
if ($http_x_forwarded_proto = "http") {
return 301 https://$host$request_uri;
}
add_header Strict-Transport-Security "max-age=31536000" always;
add_header X-Content-Type-Options nosniff always;
add_header Referrer-Policy strict-origin-when-cross-origin always;
gzip on;
gzip_types text/css application/javascript application/json image/svg+xml;
# API доступен с любого хоста Barev — Mini App и админка ходят в него с того же origin
location /trpc/ {
proxy_pass http://barev-app:4000;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
}
location /files/ {
proxy_pass http://barev-app:4000;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location = /client-log {
proxy_pass http://barev-app:4000;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location = /health {
proxy_pass http://barev-app:4000;
}
location / {
if ($barev_site = landing) {
proxy_pass http://barev-landing:3000;
}
if ($barev_site = api) {
return 404;
}
root /srv/$barev_site;
index index.html;
try_files $uri $uri/ /index.html;
}
# index.html Mini App и админки не кешируем: иначе Telegram держит старую страницу со ссылкой на старый бандл
location = /index.html {
if ($barev_site = landing) {
proxy_pass http://barev-landing:3000;
}
root /srv/$barev_site;
add_header Cache-Control "no-cache";
}
# старая админка: admin.barevclub.com/old/ — своя index.html, тоже без кеша
location ^~ /old/ {
root /srv/$barev_site;
try_files $uri $uri/ /old/index.html;
location ~ \.html$ {
root /srv/$barev_site;
add_header Cache-Control "no-cache";
}
}
# статика с хешами в имени — кешируем надолго
location /assets/ {
root /srv/$barev_site;
expires 1y;
add_header Cache-Control "public, immutable";
try_files $uri =404;
}
}