nginx: vhost для Astro-контейнера (proxy на :4146, 301-карта WP-cyrillic slugs + старый /feed/ → /feed.xml)
Some checks failed
deploy / deploy (push) Failing after 8s

This commit is contained in:
striker
2026-05-21 03:24:12 +03:00
parent 2edb852da3
commit 5dddb68803

View File

@@ -1,15 +1,19 @@
# pushkinohistory.ru — Vite+React (v2)
# Container: pushkinohistory-ru-v2 on 127.0.0.1:4146
# v2 cutover: 2026-05-21 (старый WP на :4143 оставлен в /opt/docker/sites/pushkinohistory-ru как backup)
# pushkinohistory.ru — Astro v2
# Container: pushkinohistory-ru-v2 (nginx:alpine + Astro SSG) on 127.0.0.1:4146
# v2 cutover: 2026-05-21 (старый WP на :4143 оставлен в /opt/docker/sites/pushkinohistory-ru как backup для отката)
# 301-редиректы со старых URL-encoded WP slugs (cyrillic) на новые транслитерированные.
# nginx уже декодирует URI до cyrillic'а, поэтому в ключах map'а — кириллица в UTF-8.
# 301-редиректы со старых URL-encoded WP-cyrillic slugs на новые транслитерированные.
# nginx URL-декодирует $request_uri до cyrillic, поэтому в ключах map'а — кириллица в UTF-8.
map $request_uri $legacy_redirect {
default "";
~^/добро-пожаловать/?$ /dobro-pozhalovat/;
~^/фото/?$ /foto/;
~^/сегодня-ночью-россияне-увидят-первое-суперлуние-года-волчью-луну/?$ /segodnya-nochyu-rossiyane-uvidyat-pervoe/;
~^/первые-20-градусные-морозы/?$ /pervye-20-gradusnye-morozy/;
# WP feed → новый Astro feed
~^/feed/?$ /feed.xml;
~^/feed/rss2/?$ /feed.xml;
~^/\?feed=rss2$ /feed.xml;
}
server {
@@ -59,39 +63,18 @@ server {
client_max_body_size 4M;
# 301-редиректы с легаси WP-slugs на новые транслитерированные пути
# 301-редиректы с легаси WP-URL
if ($legacy_redirect != "") {
return 301 $legacy_redirect;
}
# WP-эндпоинты больше не существуют, отдаём 410 Gone (помогает поисковикам пометить как удалённые)
location ~* ^/(wp-admin|wp-login\.php|wp-content|wp-includes|xmlrpc\.php|wp-cron\.php|wp-config\.php|readme\.html)$ {
# WP-эндпоинты больше не существуют 410 Gone (поисковики помечают как удалённые)
location ~* ^/(wp-admin|wp-login\.php|wp-content|wp-includes|xmlrpc\.php|wp-cron\.php|wp-config\.php|readme\.html) {
return 410;
}
# RSS-фид (статичный файл, отдаётся из dist)
location = /feed/ {
proxy_pass http://127.0.0.1:4146;
include /etc/nginx/templates/proxy.conf;
add_header Content-Type "application/rss+xml; charset=utf-8" always;
add_header Cache-Control "public, max-age=600" always;
}
# Агрегатор новостей: апдейтится по cron, кешируем коротко
location = /api/news.json {
proxy_pass http://127.0.0.1:4146;
include /etc/nginx/templates/proxy.conf;
add_header Cache-Control "public, max-age=120" always;
}
# Картинки/статические ассеты — кешируем подольше
location ~* ^/(uploads|assets)/ {
proxy_pass http://127.0.0.1:4146;
include /etc/nginx/templates/proxy.conf;
add_header Cache-Control "public, max-age=604800, immutable" always;
proxy_cache_valid 200 7d;
}
# Всё остальное — на контейнер v2. Astro nginx внутри сам разруливает кэши,
# MIME для RSS, /api/news.json из bind-mount и т.д.
location / {
proxy_pass http://127.0.0.1:4146;
include /etc/nginx/templates/proxy.conf;