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