Wir arbeiten in einem Umfeld in dem sich fast alles um das Web und HTTP dreht. Wir betreiben Webseiten und benutzen Dienste die über HTTP REST APIs kommunizieren. Es ist essenziell ein gutes Verständnis für HTTP zu haben und zu verstehen wie es funktioniert. Vor allem wenn es darum geht Probleme zu debuggen.
GET
, POST
, PUT
und DELETE
unterscheiden und weißt wann welche eingesetzt wird.OPTIONS
Methode und weißt wofür diese gebraucht wird.Content Security Policy
? Grenze zu CORS ab.HSTS
ist. Kann man das Gleiche mit CSP
s erreichen?restart
und einem reload
. Was passiert technisch bei einem reload?If is Evil
Bescheidactive
und passive
healthchecks bei nginxfail_timeout
bei den passiven healthchecks an?Konfigurationen, die du erstellst, sollten in ein Git Repo abgelegt werden, damit dein Mentor diese reviewen kann. Pushe die Commits in einem Feature Branch und erstelle einen Merge Request und weise diesen deinem Mentor zu.
Rufe die makandra Webseite mit geöffneten Entwicklertools (im Chrome oder Firefox) auf und schaue dir den Netzwerktab an. Zeige das auch deinem Mentor und sprich mit ihm über die Dinge, die du im Netzwerktab herausfinden kannst.
Starte dir einen LXD Testcontainer mit Ubuntu. Installiere Nginx und erstelle eine Konfiguration die folgende Eigenschaften erfüllt:
/var/www/staticcontent.local.test
ausindex.html
X-Static-Website: True
gesetzt.Anschließend erstellst du eine Datei /var/www/staticcontent.local.test/index.html
die eine Überschrift Hello World!
anzeigt und darunter einen beliebigen Text.
Die Domain machst du erreichbar, indem du sie dir in die /etc/hosts
mit der entsprechenden IP einträgst.
Installiere Docker auf deinem Testcontainer und starte httpbin
auf Port 8080. Du kannst dafür folgendes Kommando verwenden:
docker run -d --name=httpbin --restart=always -p 8080:80 kennethreitz/httpbin
(Falls es dabei einen Error gibt, siehe
hier
Show archive.org snapshot
)
Nun erstellst du einen weiteren Nginx Vhost mit folgenden Spezifikationen:
httpbin
aus Aufgabe 3 weitergeleitet werden.http://httpbin.local.test/static
aufruft, soll es einen 302
auf http://staticcontent.local.test/
geben.Die Domain machst du erreichbar, indem du sie dir in die /etc/hosts
mit der entsprechenden IP einträgst.
Erweitere deine staticcontent.local.test
Konfiguration:
Requests an http://staticcontent.local.test/httpbin
sollen an httpbin
weitergereicht werden (kein redirect!). Dabei muss der /httpbin
Part der URL durch /
ersetzt werden, da httpbin
keine Pfade unter /httpbin
kennt. Der Rest der URL soll erhalten bleiben. Das heißt: http://staticcontent.local.test/httpbin/uuid
soll nur mit /uuid
an den httbin Service weitergeleitet werden. Sieh dir dafür genau die Dokumentation zu proxy_pass
an.
Mache ein systemctl reload nginx
und schau dir an, was mit den Nginx Prozessen passiert. Warum werden Verbindungen bei einem Reload nicht unterbrochen? Warum können nicht alle Konfigurationen mit einem reload geändert werden?
Starte eine zweite Instanz von httpbin
die auf dem Port 8081 hört. Erstelle eine Nginx upstream
Konfiguration die beide Installationen beinhaltet. Schau dir an wie passive Healthchecks bei nginx funktionieren und teste ob der "Failover" funktioniert wenn du eine der beiden httpbin
Instanzen beendest.
Unser staticcontent
unterstützt kein POST
. Liefere einen entsprechenden Statuscode zurück, wenn jemand versucht einen HTTP POST zu machen.
Konfiguriere staticcontent
so, dass requests erst erlaubt werden, wenn man sich mit einem Benutzer und Passwort authentifiziert hat. Die /httpbin
location soll davon ausgenommen sein. Wenn du die /httpbin
location im Webbrowser öffnest wirst du dennoch eine Basic Auth Abfrage erhalten. Warum ist das so? Finde das mit Hilfe des Entwicklermodus in deinem Webbrowser heraus.