From 2f9b933132575a452b3d200985d19b5f4f158c46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Pasternak?= Date: Thu, 18 Jun 2026 11:03:36 +0200 Subject: [PATCH] =?UTF-8?q?feat(nginx):=20strona=20b=C5=82=C4=99du=20500?= =?UTF-8?q?=20per-domena=20z=20fallbackiem=20na=20generyczn=C4=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit W instalacji multi-hosted każda domena (Site/Uczelnia) ma własną stronę 500 z brandingiem swojej uczelni. - error_page 500 przeniesiony z _bpp-locations.conf (includowany dosłownie, bez envsubst — nie da się tam użyć ${VHOST_NAME}) do vhost.conf.template, gdzie render script podstawia ${VHOST_NAME} przez envsubst. - Każdy vhost: internal location /__bpp_500__ z try_files /staticroot/500/.html -> /staticroot/500.html -> =500. Per-domena gdy istnieje, generyczny fallback gdy nie (zgodny z obrazami pre-multi-hosted). Pliki produkuje appserver: manage.py generate_500_page w $STATIC_ROOT. Co-Authored-By: Claude Opus 4.8 (1M context) --- defaults/webserver/_bpp-locations.conf | 6 +++++- defaults/webserver/vhost.conf.template | 16 ++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/defaults/webserver/_bpp-locations.conf b/defaults/webserver/_bpp-locations.conf index 955486c..fa6c261 100644 --- a/defaults/webserver/_bpp-locations.conf +++ b/defaults/webserver/_bpp-locations.conf @@ -16,7 +16,11 @@ include /etc/nginx/conf.d/security-headers.conf; # ERROR PAGES CONFIGURATION # ============================================================================ # Custom error pages for better user experience -error_page 500 /static/500.html; +# +# error_page 500 jest definiowany PER-HOST w vhost.conf.template (potrzebuje +# ${VHOST_NAME}, którego envsubst NIE podstawia w tym pliku — jest on +# includowany dosłownie). Multi-hosted: każda domena dostaje własną stronę +# 500 z brandingiem swojej uczelni, z fallbackiem na generyczny /static/500.html. error_page 502 503 504 /maintenance.html; location = /maintenance.html { root /usr/share/nginx/html; diff --git a/defaults/webserver/vhost.conf.template b/defaults/webserver/vhost.conf.template index 4cf02ca..a1730a3 100644 --- a/defaults/webserver/vhost.conf.template +++ b/defaults/webserver/vhost.conf.template @@ -65,5 +65,21 @@ server { access_log /dev/stdout bpp_access; access_log /var/log/nginx-shared/bpp_access.log bpp_access; + # Strona błędu 500 PER-DOMENA (multi-hosted). nginx próbuje najpierw + # /staticroot/500/.html (branding uczelni przypisanej do tej domeny), + # a gdy go brak — generyczny /staticroot/500.html (fallback; dokładnie to, + # co generują obrazy pre-multi-hosted). Oba pliki produkuje w runtime + # `manage.py generate_500_page` (appserver) w $STATIC_ROOT = wolumen + # staticroot, widziany przez nginx pod /var/www/html/staticroot/. + # ${VHOST_NAME} podstawia envsubst przy renderze vhost-.conf; ścieżki + # try_files są literalne (brak zmiennych runtime nginx-a). Ostatni argument + # =500 to twardy fallback, gdyby nawet generyczna strona nie istniała. + error_page 500 /__bpp_500__; + location = /__bpp_500__ { + internal; + root /var/www/html; + try_files /staticroot/500/${VHOST_NAME}.html /staticroot/500.html =500; + } + include /etc/nginx/bpp-templates/_bpp-locations.conf; }