Bewaar gecorrigeerde live nginx-configs als referentie in de repo

De configs die deze sessie zijn nagelopen en gefixt (slpsoftware-analytics.conf,
slpsoftware-test-webserver.conf, slpsoftware.conf) stonden alleen als geplakte
tekst in de chat en een tijdelijke scratchpad-map, niet in de repo of op de
Pi's zelf toegepast. Dit zet ze duurzaam vast als referentiesnapshot, met een
README die per bestand aangeeft wat er is aangepast en waarom. Nog steeds
handmatig te kopiëren naar de Pi's; niet automatisch gesynchroniseerd.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-27 14:49:11 +02:00
co-authored by Claude Sonnet 5
parent b5e8ae1820
commit d1f544555d
4 changed files with 195 additions and 0 deletions
@@ -0,0 +1,26 @@
# Live Configs
Deze map bevat **gecorrigeerde kopieën** van de daadwerkelijk op de Raspberry Pi's
draaiende nginx-configuratiebestanden, zoals doorgenomen en gefixt op 2026-07-27.
In tegenstelling tot de `*.example`-bestanden een map hoger (die generieke, minimale
sjablonen zijn om een nieuwe omgeving vanaf nul op te zetten), zijn dit snapshots van
bestanden die specifiek voor déze Pi's gelden — inclusief zaken die niet bij de
react-frontend-feature horen (bv. de mail/iRedAdmin-proxying in `slpsoftware.conf`).
**Deze bestanden worden niet automatisch gesynchroniseerd met de Pi's.** Als je op de
Pi's iets aanpast, is dit bestand pas weer correct nadat je de wijziging hier ook
handmatig doorvoert (of andersom: kopieer bij twijfel altijd eerst de live versie van
de Pi hierheen voordat je hem hier aanpast).
## Bestanden
| Bestand | Waar het hoort | Wat er is gefixt (2026-07-27) |
|---|---|---|
| `slpsoftware-analytics.conf` | pi-entry (reverse-proxy), `/etc/nginx/sites-available/` | Acme-challenge-location verplaatst van het poort-80-blok naar het 443-blok (renewal zou anders stilzwijgend falen); listen-volgorde 443/[::]:443 rechtgezet. |
| `slpsoftware-test-webserver.conf` | pi-main (webserver), `/etc/nginx/sites-available/` | Ontbrekende `error_log`/`access_log`-regels toegevoegd; misleidende comment over "alleen intern IP" vervangen door een correcte toelichting (luistert bewust op alle interfaces, consistent met de rest). |
| `slpsoftware.conf` | pi-entry (reverse-proxy), `/etc/nginx/sites-available/` | Acme-challenge-location toegevoegd aan beide 443-blokken (ontbrak volledig); `/sentry-tunnel`-proxy toegevoegd aan het slpsoftware.nl/www-blok (ontbrak volledig, dus Sentry-events vanuit productie werden niet getunneld); iredadmin/mail-regex aangescherpt (`^\/(iredadmin\|mail)(\/\|$)`) om valse matches te voorkomen. |
Zie ook: `../deployment-instructions.md` en `../deployment-plan.md` voor de bredere
context, en `../production-nginx.conf.example` / `../production-nginx.conf.post-certbot.example`
voor de generieke, react-frontend-only variant zonder de mail/iRedAdmin-onderdelen.
@@ -0,0 +1,43 @@
server {
server_name analytics.slpsoftware.nl;
error_log /var/log/nginx/slpsoftware-analytics_error.log;
access_log /var/log/nginx/slpsoftware-analytics_access.log;
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
location / {
proxy_pass http://192.168.1.103:3001;
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;
}
listen 443 ssl; # managed by Certbot
listen [::]:443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/analytics.slpsoftware.nl/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/analytics.slpsoftware.nl/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = analytics.slpsoftware.nl) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
listen [::]:80;
server_name analytics.slpsoftware.nl;
return 404; # managed by Certbot
}
@@ -0,0 +1,31 @@
server {
# Luistert op alle interfaces (net als de andere sites op deze Pi); deze
# Pi is sowieso niet vanaf internet bereikbaar, dus dit is bewust en consistent.
listen 80;
listen [::]:80;
server_name test.slpsoftware.nl;
error_log /var/log/nginx/slpsoftware-test-webserver_error.log;
access_log /var/log/nginx/slpsoftware-test-webserver_access.log;
root /mnt/storage1/www/html/test/slpsoftware;
index index.html;
# De React-app gebruikt client-side routing (React Router), dus onbekende
# paden moeten terugvallen op index.html in plaats van een 404 te geven.
location / {
try_files $uri $uri/ /index.html;
}
# Statische assets mogen langer gecachet worden.
location ~* \.(?:css|js|svg|png|jpg|jpeg|gif|ico|woff2?)$ {
try_files $uri =404;
expires 7d;
add_header Cache-Control "public";
}
# Doorgeven van het echte client-IP en protocol, afkomstig van de reverse proxy.
#set_real_ip_from 192.168.1.0/24;
#real_ip_header X-Forwarded-For;
}
@@ -0,0 +1,95 @@
server {
listen [::]:443 ssl; # managed by Certbot
listen 443 ssl; # managed by Certbot
server_name slpsoftware.nl www.slpsoftware.nl;
access_log /var/log/nginx/slpsoftware_access.log;
error_log /var/log/nginx/slpsoftware_error.log;
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
# Sentry "tunnel" endpoint (zie src/main.tsx's Sentry.init tunnel-optie en
# de toelichting in reverse-proxy-nginx.conf.example) — voorkomt dat
# ad-blockers Sentry-events blokkeren door ze via ons eigen domein te
# tunnelen. VITE_SENTRY_DSN is bewust gedeeld tussen test en productie
# (één Sentry-project, environment-tag onderscheidt ze), dus dezelfde
# org-/project-id als de testomgeving is hier correct.
location /sentry-tunnel {
proxy_pass https://o4511795618185216.ingest.de.sentry.io/api/4511795622838352/envelope/;
proxy_set_header Host o4511795618185216.ingest.de.sentry.io;
proxy_ssl_server_name on;
}
location ~ ^\/(iredadmin|mail)(\/|$) {
proxy_pass https://192.168.1.104:443;
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;
}
location / {
proxy_pass http://192.168.1.103:80;
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;
}
ssl_certificate /etc/letsencrypt/live/slpsoftware.nl/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/slpsoftware.nl/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
listen [::]:443 ssl; # managed by Certbot
listen 443 ssl; # managed by Certbot
server_name mail.slpsoftware.nl;
access_log /var/log/nginx/mail.slpsoftware_access.log;
error_log /var/log/nginx/mail.slpsoftware_error.log;
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
location / {
proxy_pass https://192.168.1.104:443; # Odroid C4 hosting iRedMail
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;
}
ssl_certificate /etc/letsencrypt/live/mail.slpsoftware.nl/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/mail.slpsoftware.nl/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
listen 80;
listen [::]:80;
server_name slpsoftware.nl www.slpsoftware.nl mail.slpsoftware.nl;
if ($host = mail.slpsoftware.nl) {
return 301 https://$host$request_uri;
} # managed by Certbot
if ($host = www.slpsoftware.nl) {
return 301 https://$host$request_uri;
} # managed by Certbot
if ($host = slpsoftware.nl) {
return 301 https://$host$request_uri;
} # managed by Certbot
return 404; # managed by Certbot
}