revproxy-presentation/index.html

231 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>