2026-08-25 16:27:57 +02:00
|
|
|
# nginx-configuratie voor Electrum Gate.
|
|
|
|
|
#
|
|
|
|
|
# Dit bestand is een template en dat is bewust. umbrelOS ververst bij een update
|
|
|
|
|
# alleen een whitelist van bestanden, en *.template staat daarin; een gewoon
|
|
|
|
|
# bestand naast de compose zou na een update ongewijzigd blijven staan. Daarnaast
|
|
|
|
|
# vult umbrelOS bij elke start de omgevingsvariabelen hieronder in en schrijft het
|
|
|
|
|
# resultaat naast dit bestand weg als nginx.conf.
|
|
|
|
|
#
|
|
|
|
|
# Let op bij het wijzigen: gebruik hier geen nginx-variabelen met een dollarteken
|
|
|
|
|
# (zoals de gebruikelijke in een log_format). De invulling vervangt elke ${...}
|
|
|
|
|
# en zou die stilzwijgend leegmaken. Daarom staat access_log voor http uit, en
|
|
|
|
|
# wordt het log_format van de stream-sessies door het command-blok in
|
|
|
|
|
# docker-compose.yml weggeschreven; dáár is een dollarteken te ontsnappen.
|
|
|
|
|
|
|
|
|
|
user nginx;
|
|
|
|
|
worker_processes auto;
|
|
|
|
|
error_log /var/log/nginx/error.log notice;
|
|
|
|
|
pid /var/run/nginx.pid;
|
|
|
|
|
|
|
|
|
|
events {
|
|
|
|
|
worker_connections 1024;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# ── De web-UI ────────────────────────────────────────────────────────────────
|
|
|
|
|
# Wordt niet rechtstreeks gepubliceerd: umbrelOS zet er zijn eigen app_proxy
|
|
|
|
|
# voor, en die verwijst naar poort 80 van deze container.
|
|
|
|
|
http {
|
|
|
|
|
include /etc/nginx/mime.types;
|
|
|
|
|
default_type application/octet-stream;
|
|
|
|
|
access_log off;
|
|
|
|
|
sendfile on;
|
|
|
|
|
|
|
|
|
|
server {
|
|
|
|
|
listen 80;
|
|
|
|
|
root /usr/share/nginx/html;
|
|
|
|
|
index index.html;
|
|
|
|
|
|
|
|
|
|
# status.json wordt door de agent in de gedeelde map geschreven, niet in
|
|
|
|
|
# de webroot. Geen cache: de pagina vraagt hem juist op om te zien hoe
|
|
|
|
|
# oud de gegevens zijn.
|
|
|
|
|
location = /status.json {
|
|
|
|
|
alias /var/lib/gate/status.json;
|
|
|
|
|
add_header Cache-Control "no-store";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# De API van de agent. Het enige pad waarlangs iets van buiten de
|
|
|
|
|
# instellingen van de app raakt, en dat is de certificaatkeuze.
|
|
|
|
|
#
|
|
|
|
|
# Waarom dit te verantwoorden is op een app waarvan de kleinheid het punt
|
|
|
|
|
# is: het pad hangt achter de app_proxy van umbrelOS, die er zijn eigen
|
|
|
|
|
# inlog voor zet, de TLS-poort staat er los van, en de agent accepteert
|
|
|
|
|
# alleen een certificaat-id die hij zelf in de gemounte mappen gevonden
|
|
|
|
|
# heeft. Het ergste wat een geslaagde aanroep doet is een ander, ook
|
|
|
|
|
# bestaand, certificaat kiezen.
|
|
|
|
|
#
|
|
|
|
|
# Geen proxy_set_header hier, en dat is geen vergetelheid: die zouden een
|
|
|
|
|
# nginx-variabele vragen, en die haalt de template-invulling weg. De
|
|
|
|
|
# agent heeft ze niet nodig.
|
2026-08-28 11:41:58 +02:00
|
|
|
#
|
|
|
|
|
# De volledige containernaam en niet de servicenaam 'agent'. Dat stond er
|
|
|
|
|
# tot 0.0.23 wel, en het werkte zolang deze app de enige was met een
|
|
|
|
|
# service van die naam. Sinds Evolu Relay er is, is dat niet meer waar:
|
|
|
|
|
# beide apps zitten op hetzelfde Docker-netwerk, allebei met een 'agent'
|
|
|
|
|
# op poort 8000, en Docker verdeelt de naam dan over de twee. Op
|
|
|
|
|
# 28-08-2026 gemeten op het apparaat: van tien verzoeken kwamen er vijf
|
|
|
|
|
# bij de verkeerde app uit. De vorm <app-id>_<service>_1 is uniek per app;
|
|
|
|
|
# het is dezelfde les die in de compose al stond over de naam 'server'.
|
2026-08-25 16:27:57 +02:00
|
|
|
location /api/ {
|
2026-08-28 11:41:58 +02:00
|
|
|
proxy_pass http://whatsnext-electrum-gate_agent_1:8000;
|
2026-08-25 16:27:57 +02:00
|
|
|
client_max_body_size 1k;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# Het uploaden van een certificaat, en het enige pad met een grotere
|
|
|
|
|
# limiet: een sleutel plus keten haalt de 1k van hierboven ruim. Een
|
|
|
|
|
# exacte match, dus deze regel wint van /api/ hierboven en de grotere
|
|
|
|
|
# limiet geldt nergens anders. De agent kapt zelf ook af, op 96k; deze
|
|
|
|
|
# limiet is de eerste zeef en niet de enige.
|
|
|
|
|
location = /api/certificate/upload {
|
2026-08-28 11:41:58 +02:00
|
|
|
proxy_pass http://whatsnext-electrum-gate_agent_1:8000;
|
2026-08-25 16:27:57 +02:00
|
|
|
client_max_body_size 96k;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# ── De TLS-terminatie ────────────────────────────────────────────────────────
|
|
|
|
|
# Die staat niet hier maar in stream.conf.template, en dat is geen ordening maar
|
|
|
|
|
# de reparatie van een klem. nginx weigert te starten als een 'listen ... ssl'
|
|
|
|
|
# geen certificaat heeft; stond het stream-blok hier, dan kwam met dat blok ook
|
|
|
|
|
# de pagina hierboven niet omhoog zolang de agent geen certificaat gekozen had.
|
|
|
|
|
# En de pagina is juist de plek waar die keuze gemaakt wordt.
|
|
|
|
|
#
|
|
|
|
|
# Het command-blok van docker-compose.yml legt stream.conf in de map hieronder
|
|
|
|
|
# zodra cert.conf bestaat, en haalt het weg als dat niet zo is. Een include met
|
|
|
|
|
# een jokerteken die nergens op uitkomt is voor nginx geen fout, dus zonder
|
|
|
|
|
# certificaat start deze server zonder poort 50022 en met een pagina die
|
|
|
|
|
# vertelt waarom.
|
|
|
|
|
include /var/lib/gate/tls/*.conf;
|