230 lines
9.4 KiB
HTML
230 lines
9.4 KiB
HTML
<!doctype html>
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
|
|
|
|
<title>reveal.js</title>
|
|
|
|
<link rel="stylesheet" href="dist/reset.css">
|
|
<link rel="stylesheet" href="dist/reveal.css">
|
|
<link rel="stylesheet" href="dist/theme/black.css" id="theme">
|
|
|
|
<!-- Theme used for syntax highlighted code -->
|
|
<link rel="stylesheet" href="plugin/highlight/monokai.css" id="highlight-theme">
|
|
</head>
|
|
<body>
|
|
<div class="reveal">
|
|
<div class="slides">
|
|
<section>
|
|
<section>
|
|
<h1 class="r-fit-text">Reverse proxies</h1>
|
|
|
|
<p>
|
|
<img src="revproxy.svg" width="466" height="338" alt="Revers Proxy schematisch"/>
|
|
</p>
|
|
<p class="justify-end">
|
|
<small>© 2021 Jan Dittberner</small>
|
|
</p>
|
|
</section>
|
|
<section data-markdown>
|
|
<textarea data-template>
|
|
> Ein Reverse-Proxy ist ein Proxy in einem Rechnernetz, der Ressourcen für einen externen Client von einem oder mehreren internen Servern holt. Die Umsetzung der Adresse ist
|
|
> atypisch und der Richtung des Aufrufes entgegengesetzt (deutsch „umgekehrter Proxy“). ...
|
|
|
|
Quelle: [Wikipedia](https://de.wikipedia.org/wiki/Reverse_Proxy)
|
|
</textarea>
|
|
</section>
|
|
<section data-markdown>
|
|
<textarea data-template>
|
|
> ... Die wahre Adresse des internen Zielsystems bleibt dem externen Client verborgen. Das
|
|
> unterscheidet ihn vom typischen (Forward-)Proxy, der mehreren Clients eines internen (in sich abgeschlossenen) Netzes den Zugriff auf ein externes Netz gewährt.
|
|
|
|
Quelle: [Wikipedia](https://de.wikipedia.org/wiki/Reverse_Proxy)
|
|
</textarea>
|
|
</section>
|
|
<section>
|
|
<h2 class="r-fit-text">Wichtige Funktionen</h2>
|
|
|
|
<ul>
|
|
<li class="fragment fade-in">Weiterleitung auf dahinterliegende Systeme</li>
|
|
<li class="fragment fade-in">Performanceoptimierungen</li>
|
|
<li class="fragment fade-in">TLS-Terminierung</li>
|
|
<li class="fragment fade-in">Loadbalancing</li>
|
|
</ul>
|
|
</section>
|
|
<section>
|
|
<h2>Warum?</h2>
|
|
|
|
<ul>
|
|
<li class="fragment fade-in">schnelle Rekonfiguration ohne Restart langsamer Backend-Anwendungen
|
|
</li>
|
|
<li class="fragment fade-in">einheitliche Konfiguration von TLS-Terminierung</li>
|
|
|
|
<li class="fragment fade-in">bessere Security z.B. durch URL-Filterung, Beschränkung von Zugriffen,
|
|
Rate-Limiting
|
|
</li>
|
|
<li class="fragment fade-in">Caching und direkte Auslieferung von statischen Resourcen (Bilder, CSS,
|
|
...)
|
|
</li>
|
|
<li class="fragment fade-in">(Pre-)Authentifizierung, z.B. Kerberos, Client-Zertifikate, ...</li>
|
|
<li class="fragment fade-in">Zusammenstellung von Content aus mehreren Teilanwendungen</li>
|
|
</ul>
|
|
</section>
|
|
</section>
|
|
<section>
|
|
<section>
|
|
<h2 class="r-fit-text">Bekannte Vertreter</h2>
|
|
</section>
|
|
<section data-markdown>
|
|
<textarea data-template>
|
|
## Bekannte Vertreter
|
|
|
|
### klassisch
|
|
|
|
- [Apache httpd](https://httpd.apache.org/)
|
|
- [nginx](https://nginx.org/)
|
|
- [Microsoft IIS](https://www.iis.net/)
|
|
</textarea>
|
|
</section>
|
|
<section data-markdown>
|
|
<textarea data-template>
|
|
## Bekannte Vertreter
|
|
|
|
### Cloud native
|
|
|
|
- [Traefik](https://traefik.io/)
|
|
- [Envoy](https://www.envoyproxy.io/)
|
|
</textarea>
|
|
</section>
|
|
</section>
|
|
<section>
|
|
<section>
|
|
<h2>Apache httpd</h2>
|
|
<img src="apache_logo.svg" width="97" height="195">
|
|
<ul>
|
|
<li class="fragment fade-in">bewährte, ausgereifte Software, gibt es seit 1995</li>
|
|
<li class="fragment fade-in">Apache Software Foundation</li>
|
|
</ul>
|
|
</section>
|
|
<section>
|
|
<h2>Apache httpd</h2>
|
|
<h3>Charakteristika</h3>
|
|
|
|
<ul>
|
|
<li class="fragment fade-in">mehrere Processing Module (MPM) zur Auswahl <small>(Standard: prefork)</small></li>
|
|
<li class="fragment fade-in">Integration von PHP, Perl, usw. über Module</li>
|
|
<li class="fragment fade-in">in (fast) allen OS-Distributionen enthalten</li>
|
|
</ul>
|
|
</section>
|
|
<section>
|
|
<h2>Apache httpd</h2>
|
|
<h3>Vorteile 👍</h3>
|
|
|
|
<ul>
|
|
<li class="fragment fade-in">viele Tutorials
|
|
<li class="fragment fade-in">starke Rewrite-Engine
|
|
<li class="fragment fade-in">Unterstützung für .htaccess zum Überschreiben von Einstellungen
|
|
</ul>
|
|
</section>
|
|
<section>
|
|
<h2>Apache httpd</h2>
|
|
<h3>Nachteile 👎</h3>
|
|
|
|
<ul>
|
|
<li class="fragment fade-in">viele schlechte Tutorials</li>
|
|
<li class="fragment fade-in">Unterstützung für .htaccess zum Überschreiben von Einstellungen</li>
|
|
<li class="fragment fade-in">relativ langsam</li>
|
|
<li class="fragment fade-in">relative speicherhungrig</li>
|
|
</ul>
|
|
</section>
|
|
</section>
|
|
<section>
|
|
<section>
|
|
<h2>nginx</h2>
|
|
<img src="nginx_logo.svg" width="480" height="100"/>
|
|
|
|
<ul>
|
|
<li class="fragment fade-in">inzwischen auch sehr ausgereift, gibt es seit 2004</li>
|
|
<li class="fragment fade-in">ursprünglich von Igor Sysoev entwickelt, um Apache Performance-Probleme zu lösen</li>
|
|
<li class="fragment fade-in">laut Netcraft seit April 2019 Marktführer</li>
|
|
<li class="fragment fade-in">kommerziell supported durch Nginx, Inc., jetzt Teil von F5</li>
|
|
<li class="fragment fade-in">kommerzielle Variante mit Zusatzfunktionen</li>
|
|
</ul>
|
|
</section>
|
|
<section>
|
|
<h2>nginx</h2>
|
|
<h3>Characteristika</h3>
|
|
|
|
<ul>
|
|
<li class="fragment fade-in">asynchrone, Event-basierte Request-Verarbeitung</li>
|
|
<li class="fragment fade-in">Skriptsprachenanbindung per FastCGI, uwsgi, scgi oder direkt per http(s)</li>
|
|
<li class="fragment fade-in">in vielen OS-Distributionen enthalten</li>
|
|
</ul>
|
|
</section>
|
|
<section>
|
|
<h2>nginx</h2>
|
|
<h3>Vorteile 👍</h3>
|
|
|
|
<ul>
|
|
<li class="fragment fade-in">sehr schnell</li>
|
|
<li class="fragment fade-in">geringer Speicherbedarf</li>
|
|
<li class="fragment fade-in">Support für E-Mail (IMAP, SMTP) sowie TCP und UDP Proxying</li>
|
|
<li class="fragment fade-in">Support für Streaming</li>
|
|
</ul>
|
|
</section>
|
|
<section>
|
|
<h2>nginx</h2>
|
|
<h3>Nachteile 👎</h3>
|
|
|
|
<ul>
|
|
<li class="fragment fade-in">weniger Dokumentation als für Apache httpd</li>
|
|
<li class="fragment fade-in">weniger mächtiges Rewriting als Apache httpd</li>
|
|
<li class="fragment fade-in">keine .htaccess-Dateien</li>
|
|
</ul>
|
|
</section>
|
|
</section>
|
|
<section>
|
|
<h2>Microsoft IIS</h2>
|
|
<p class="fragment fade-in-then-out">Microsoft® Windows® only</p>
|
|
<p class="fragment fade-in r-fit-text">🤷</p>
|
|
</section>
|
|
<section>
|
|
<h2>Cloud native reverse proxies</h2>
|
|
|
|
<h3>Vertreter: Traefik, Envoy</h3>
|
|
|
|
<ul>
|
|
<li class="fragment fade-in">dynamische Konfiguration (z.B. aus Kubernetes Configmaps, etcd, Docker
|
|
Labels, Consul, ...)
|
|
</li>
|
|
<li class="fragment fade-in">Support für Prometheus, Tracing, etc.</li>
|
|
<li class="fragment fade-in">noch wenig Erfahrung vorhanden (bei uns)</li>
|
|
<li class="fragment fade-in">auf stark dynamische Anwendungen ausgelegt</li>
|
|
<li class="fragment fade-in">eingebautes Traffic-Routing, Failover, etc.</li>
|
|
<li class="fragment fade-in">brauchen hohen Grad an Automatisierung für Konfiguration</li>
|
|
</ul>
|
|
</section>
|
|
<section>
|
|
<h2 class="r-fit-text">Fragen? Feedback?</h2>
|
|
</section>
|
|
</div>
|
|
</div>
|
|
|
|
<script src="dist/reveal.js"></script>
|
|
<script src="plugin/notes/notes.js"></script>
|
|
<script src="plugin/markdown/markdown.js"></script>
|
|
<script src="plugin/highlight/highlight.js"></script>
|
|
<script>
|
|
// More info about initialization & config:
|
|
// - https://revealjs.com/initialization/
|
|
// - https://revealjs.com/config/
|
|
Reveal.initialize({
|
|
hash: true,
|
|
|
|
// Learn about plugins: https://revealjs.com/plugins/
|
|
plugins: [RevealMarkdown, RevealHighlight, RevealNotes]
|
|
});
|
|
</script>
|
|
</body>
|
|
</html>
|