Webserver
FAQ › EUZOS Server › Webserver · English
Wat is het?
Webserver (web) is een serverpakket van EUZOS Server: het serveert statische websites en werkt als reverse proxy naar interne servers, op TCP 80 (HTTP) en 443 (HTTPS, TLS 1.3). Certificaten komen automatisch van Let's Encrypt met de eigen ACME-client van EUZOS, of worden door de beheerder geüpload. Alles wordt beheerd met Server Admin vanaf een EUZOS-pc; het ontwerp staat in docs/PACKAGE-WEBSERVER.md.
Beheer op afstand loopt via het beheerprotocol van Werkplekbeheer (poort 8446); een webserver installeer je dus samen met dat pakket.
Hoe…?
Hoe installeer en zet ik de webserver aan?
Kies Webserver in het installatieprogramma (standaard uit): het schrijft \EOS\FW\WEB.TXT met role=web. Zet het na de eerste start aan in Server Admin:
serveradmin <server> package-on web
Aanzetten opent allow tcp 80 anywhere en allow tcp 443 anywhere in de firewall. package-off web confirm stopt het serveren en sluit 80 en 443.
Voor een interne site kiest u eerst het LAN; dan staat er nooit iets open van buiten het eigen subnet:
serveradmin <server> web settings access=lan
serveradmin <server> package-on web
Aanzetten opent dan allow tcp 80 lan en allow tcp 443 lan. Op een server die zonder Webserver is geïnstalleerd, richt web settings het pakket in (nog uit). Let's Encrypt kan een server die alleen op het LAN staat niet bereiken: gebruik cert=local of cert=upload.
Hoe zet ik een interne site in één keer op de server?
serveradmin <server> web lan-site-from intranet.example usb:site.zip
Eén opdracht, de eerste keer en bij elke update. usb: leest de zip rechtstreeks van een stick; zonder dat is het pad in Mijn bestanden. Hij zet access=lan, voegt de site toe, zet het pakket aan, zorgt dat 80 en 443 alleen voor het LAN open staan (en stopt anders), maakt een certificaat op de server (cert=local), uploadt en publiceert. De site antwoordt ook op het privé-adres van de server, dus een DNS-record is niet nodig. Hij weigert zolang andere sites op access=anywhere staan.
Om de browserwaarschuwing te vermijden: open één keer per apparaat http://<serveradres>/lan-ca.crt en vertrouw die, na vergelijken van de SHA-256 in het antwoord. Die CA kan alleen instaan voor deze site en voor privé-adressen.
Hoe voeg ik een site toe?
serveradmin <server> web site-add example.com aliases=www.example.com
serveradmin <server> web site-add intranet.example cert=none redirect=no hsts=no
Opties: cert=acme (standaard, Let's Encrypt), cert=upload, cert=local (gemaakt door deze server) of cert=none (alleen HTTP); address=yes (ook op het privé-adres van de server, alleen met access=lan); redirect=yes|no (HTTP → HTTPS, standaard yes); hsts=yes|no (standaard yes, alleen met een echt certificaat); aliases= (tot 8 extra namen). Wijzigen met web site-set <domein> sleutel=waarde, verwijderen met web site-remove <domein> confirm (wist ook bestanden en certificaat).
Hoe zet ik de bestanden van een site op de server?
Zet de site in Mijn bestanden op de EUZOS-pc (een map, of een .zip):
serveradmin <server> web upload-from example.com Documenten/mijnsite
serveradmin <server> web upload-from example.com Documenten/mijnsite.zip
De pc stuurt de bestanden één voor één (elk als ondertekende opdracht, hoogstens 16 MiB per bestand) en de server publiceert ze aan het eind in één keer. Eén bovenste map in een zip wordt weggelaten. Bestanden die met een punt beginnen (behalve .well-known) worden overgeslagen. Een map serveert zijn index.html. Zet een style.css.gz naast style.css om hem gecomprimeerd te laten sturen.
Hoe maak ik een nieuwe website?
Server Admin → de server → Webserver: een tweede kolom toont de websites. Druk op Nieuwe website, kies Alleen LAN of Openbaar, typ een naam of domein en druk op Toevoegen. Hij krijgt een public_html met een eenvoudige eerste pagina. Een openbare website is vanaf internet bereikbaar zodra de toegang van de hele webserver op Overal staat (bovenaan de kolom); dat verandert niet vanzelf. Klik op een website voor de tabbladen: Bestanden, Git-versie, SSL-certificaat en Overig. In een smal venster wordt de kolom een rij knoppen boven de inhoud.
Hoe beheer ik de bestanden van een site?
Server Admin → de server → Webserver → een website → Bestanden. public_html is wat bezoekers krijgen; repo toont de werkbestanden van de repository's, alleen lezen. In public_html: Openen van een map, Nieuwe map, Hernoemen, Verwijderen (vraagt eerst), Downloaden (Opslaan als, naar je eigen mappen) en Uploaden (Openen, uit je eigen mappen). Maximaal 16 MiB per bestand via deze vensters, in stukken, met voortgang en Stoppen. Een bestaand bestand wordt niet vervangen: verwijder of hernoem het eerst.
Een site van hiervoor blijft werken: zijn bestanden zijn gewoon zijn public_html.
Hoe rol ik een site uit vanuit Git?
Webserver → een website → Git-versie. Voeg een repository toe met zijn https://-URL. Voor een privérepository druk je op Token instellen; het veld toont geen tekst en het token kan niet meer worden getoond. Kies een branch, druk op Bijwerken van remote (dat gaat door als je het venster sluit), controleer de commit en druk op HEAD uitrollen. De site schakelt in één stap om; Terugdraaien gaat terug naar de vorige versie.
Er is geen firewallregel nodig: uitgaand HTTPS mag en er gaat niets inkomend open. Symbolische koppelingen in een repository worden niet gevolgd of geschreven, en submodules worden genegeerd; beide staan naast de commit. Dotfiles worden niet uitgerold, omdat de server ze nooit serveert.
Hoe krijg ik een certificaat?
Met cert=acme vraagt de server het zelf aan bij Let's Encrypt, kort na het toevoegen en daarna zo nodig elke 12 uur (vernieuwen 30 dagen voor het verlopen). Voorwaarden: de naam wijst naar het publieke adres van de server en poort 80 is bereikbaar vanaf internet (http-01-uitdaging). Nu aanvragen met web cert-renew <domein>; bekijken met web cert <domein>. Test eerst met web settings acme=staging (een testbouw gebruikt standaard staging).
Een eigen certificaat uploaden (P-256-sleutel; RSA wordt niet ondersteund):
serveradmin <server> web cert-from example.com certs/chain.pem certs/key.pem
Hoe stel ik een reverse proxy in?
serveradmin <server> web proxy-add example.com /app/ http://<lan-address>:8080/ strip=yes
serveradmin <server> web proxy-add example.com /api/ https://<lan-address>:8443/ pin=<64 hex>
De backend moet een privé-IPv4-adres zijn (10/8, 172.16/12, 192.168/16): geen open proxy. pin= is de SHA-256 van de publieke sleutel van de backend (voor een interne server met een zelfondertekend certificaat). Verwijderen met web proxy-remove <domein> <prefix>.
Hoe zie ik de stand en het logboek?
web (of web status): pakket, ACME-instellingen, sites met bestanden en certificaat, proxyregels, verkeer. web log [n]: de laatste regels van het toegangslogboek. Op de serverconsole: webserver.
Details
- Grenzen: 64 verbindingen, 8 per adres; de header binnen 10 s (slowloris), 16 KiB header,
max-body(standaard 1 MiB) voor verzoeklichamen; 5 s stil tussen keep-alive-verzoeken. - Doorstromen: het lichaam van een verzoek voor een reverse-proxyroute gaat naar de backend terwijl het binnenkomt (hoogstens 256 KiB per verzoek in het geheugen; een chunked lichaam wordt opnieuw ingepakt doorgegeven); een sitebestand dat met Server Admin geüpload wordt, gaat na de controle van de handtekening van de beheerder in stukken van 64 KiB naar de opslag, en komt pas op zijn plaats als precies de ondertekende grootte en SHA-256 binnen zijn.
- Toegangslogboek (AVG): tijd, adres, host, methode, pad zonder query, status, bytes, duur. Adressen worden ingekort (laatste octet 0) na
ip-days(standaard 7; 0 = nooit bewaard), bestanden gewist nalog-days(standaard 30). Instellen metweb settings. - Opslag: sites, certificaten, het ACME-account en het logboek staan op partitie 2 in een eigen versleuteld gebied (sleutel
WEBKEY.TXT). - Nog niet: HTTP/2, WebSocket via de proxy, bestanden boven 16 MiB per upload, wildcardcertificaten (DNS-01), IPv6.
Naslag
Consoleopdrachten
| Opdracht | Argumenten | Wat het doet |
|---|---|---|
webserver | – of status, log [n], cert <domein> | de stand; in een testbouw ook de wijzigende subopdrachten van web |
Server Admin: subopdrachten van web
| Subopdracht | Wat het doet |
|---|---|
status | de stand |
log [n] | de laatste n regels van het toegangslogboek (standaard 50) |
cert <domein> | details van het certificaat |
cert-renew <domein> [force] | nu ACME (force negeert het wachten na fouten, niet de daggrens) |
site-add <domein> [opties] | site toevoegen |
site-set <domein> sleutel=waarde … | site wijzigen |
site-remove <domein> confirm | site met bestanden verwijderen |
proxy-add <domein> <prefix> <backend> [strip=yes] [pin=<hex>] | proxyregel toevoegen |
proxy-remove <domein> <prefix> | proxyregel verwijderen |
settings sleutel=waarde … | acme=production|staging, acme-email=, log-days=, ip-days=, max-body= |
lan-site <domein> | een interne site: access=lan, pakket aan, firewall gecontroleerd, cert=local, address=yes |
lan-site-from <domein> <zip> | (op de pc) hetzelfde, en uploaden en publiceren |
upload-from <domein> <pad> | (op de pc) map of zip uit Mijn bestanden, of usb:<naam.zip>, uploaden en publiceren |
cert-from <domein> <chain.pem> <key.pem> | (op de pc) certificaat en sleutel uit Mijn bestanden uploaden |
upload-reset <domein>, publish <domein> | de stappen van een upload (gebruikt door upload-from) |
Configuratiebestanden
| Bestand | Betekenis |
|---|---|
\EOS\FW\WEB.TXT | role=web, package=on|off, acme=, acme-email=, log-days=, ip-days=, max-body=, site=…, proxy=… |
\EOS\FW\WEBKEY.TXT | sleutel van het versleutelde webgebied op partitie 2 (64 hex, geheim) |
API-eindpunten
| Poort | Methode | Pad | Doel |
|---|---|---|---|
| 80 | GET | /.well-known/acme-challenge/<token> | ACME http-01 |
| 80 | alle | overig | 301 naar HTTPS, of de site (redirect=no) |
| 443 | GET, HEAD | paden van de site | statische bestanden; proxyregels laten andere methoden door |
| 8446 | POST | /admin/v1/upload | een ondertekende web upload … / web cert-upload … met het bestand (header X-EUZOS-Docs) |
Zie ook
- docs/PACKAGE-WEBSERVER.md
- docs/EXCEPTIONS.md (U-21, Let's Encrypt)
- Pakketten, Server Admin, Netwerk en firewall
EUZOS