{"id":8345,"date":"2022-01-30T19:36:05","date_gmt":"2022-01-30T17:36:05","guid":{"rendered":"https:\/\/u-labs.de\/portal\/?p=8345"},"modified":"2022-12-12T16:53:59","modified_gmt":"2022-12-12T14:53:59","slug":"was-ist-ein-reverse-proxy-funktionsweise-einfach-erklaert-fuer-klassische-webanwendungen-docker","status":"publish","type":"post","link":"https:\/\/u-labs.de\/portal\/was-ist-ein-reverse-proxy-funktionsweise-einfach-erklaert-fuer-klassische-webanwendungen-docker\/","title":{"rendered":"Was ist ein Reverse Proxy? Funktionsweise einfach erkl\u00e4rt f\u00fcr klassische Webanwendungen + Docker!"},"content":{"rendered":"<p>Wer mehrere Webanwendungen per HTTP bzw. HTTPS auf dem Raspberry Pi oder jedem anderen Linux-Server betreiben m\u00f6chte, wird feststellen: Jeder Port darf nur von einer Anwendung belegt werden. Genauer gesagt nur einmal pro IP-Adresse. Betreiben wir beispielsweise eine NextCloud (oder aber jeden anderen Webdienst) auf dem Standard-HTTP Port 80 und m\u00f6chten zus\u00e4tzlich eine weitere Anwendung wie z.B. WordPress betreiben, kann WordPress den Port nur nutzen, wenn es zusammen mit NextCloud im gleichen Webserver l\u00e4uft.<\/p>\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-7.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"532\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-7-1024x532.png\" alt=\"\" class=\"wp-image-8351\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-7-1024x532.png 1024w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-7-300x156.png 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-7-768x399.png 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-7-70x36.png 70w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-7.png 1276w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<p>In diesem Szenario w\u00e4re das m\u00f6glich. Anders sieht es aber aus, wenn eine Anwendung einen anderen Webserver ben\u00f6tigt oder unsere Programme in Docker-Containern laufen: In diesem Falle kann Port 80 nicht verwendet werden, da er bereits belegt ist. Man m\u00fcsste daher einen anderen freien Port nutzen, etwa 81. Die entsprechenden Portnummern sich zu merken und diese immer angeben zu m\u00fcssen, ist unbequem und wird zudem schnell un\u00fcbersichtlich. <\/p>\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-8.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"406\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-8-1024x406.png\" alt=\"\" class=\"wp-image-8352\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-8-1024x406.png 1024w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-8-300x119.png 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-8-768x305.png 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-8-1536x609.png 1536w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-8-70x28.png 70w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-8.png 1565w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<h2 class=\"wp-block-heading\" id=\"was-ist-ein-reverse-proxy\">Was ist ein Reverse Proxy?<\/h2>\n<p>Hier kommt ein Reverse Proxy ins Spiel: Ein Proxy ist ein Stellvertreter. Wir Platzieren den Reverse Proxy auf den gew\u00fcnschten Ports, hier 80. Er nimmt alle Verbindungen an und entscheidet anhand von Regeln, welche Daten er an welchen Dienst weiterleitet. Bei HTTP bieten sich Domains oder Subdomains an. Unterverzeichnisse sind auch m\u00f6glich, wobei das &#8211; je nach Anwendung dahinter &#8211; Probleme bereiten kann. Die Programme hinter dem Reverse Proxy k\u00f6nnen andere Ports nutzen, etwa 81 f\u00fcr NextCloud und 82 f\u00fcr WordPress. Der Proxy-Server leitet die Daten auf die entsprechenden Ports weiter. Der Nutzer des Programmes bekommt davon nichts mit. Die Ports m\u00fcssen dort auch nicht angegeben werden. Aus Sicht des Anwenders kommuniziert er direkt mit unserem Reverse Proxy auf Port 80.<\/p>\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-9.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"530\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-9-1024x530.png\" alt=\"\" class=\"wp-image-8353\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-9-1024x530.png 1024w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-9-300x155.png 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-9-768x397.png 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-9-1536x795.png 1536w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-9-70x36.png 70w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-9.png 1838w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<p>Stelle es dir ungef\u00e4hr so vor, wie der Empfang eines Unternehmens: Du rufst den Empfang an und sagst, mit wem du sprechen m\u00f6chtest (das w\u00e4re hier die Anwendung, wie z.B. WordPress). Anschlie\u00dfend wirst du direkt mit der gew\u00fcnschten Person verbunden. Dass diese Person eine eigene Telefonnummer und vielleicht sogar ein anderes Telefon nutzt, merkst du nicht &#8211; dein Anruf l\u00e4uft ja weiterhin auf die Telefonnummer vom Empfang. Es spielt aber auch keine Rolle: Die Telefonanlage des Unternehmens k\u00fcmmert sich darum, die hier \u00e4hnlich funktioniert wie ein Reverse Proxy.<\/p>\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-10.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"520\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-10-1024x520.png\" alt=\"\" class=\"wp-image-8354\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-10-1024x520.png 1024w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-10-300x152.png 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-10-768x390.png 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-10-1536x780.png 1536w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-10-70x36.png 70w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-10.png 1883w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<h2 class=\"wp-block-heading\" id=\"was-ist-ein-reverse-proxy\">Wie grenzt sich der Reverse Proxy zu einem &#8222;normalen Proxy&#8220; ab?<\/h2>\n<p>Ein typischer Proxy erm\u00f6glicht es Computern aus einem internen, geschlossenen Netzwerk heraus auf externe Dinge zuzugreifen. Dies wird z.B. im Unternehmensnetzwerken genutzt, um den Internetzugriff zu kontrollieren und ggf. auch zu \u00fcberwachen. Der Client baut hier also eine Verbindung zum Proxy auf, der wiederum als Vermittler die gew\u00fcnschte Ressource (z.B. eine Internetseite) anfragt und die Antwort zur\u00fcck liefert. <\/p>\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-11.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"348\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-11-1024x348.png\" alt=\"\" class=\"wp-image-8355\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-11-1024x348.png 1024w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-11-300x102.png 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-11-768x261.png 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-11-70x24.png 70w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-11.png 1505w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<p>Privat k\u00f6nnen Proxy-Server genutzt werden, um ein anderes Land vorzut\u00e4uschen. Ein Proxy-Server in den USA beispielsweise gaukelt einer Internetseite vor, man w\u00e4re US-B\u00fcrger. So k\u00f6nnen L\u00e4ndersperren umgangen werden, etwa bei Filmen oder Serien.<\/p>\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-12.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"438\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-12-1024x438.png\" alt=\"\" class=\"wp-image-8356\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-12-1024x438.png 1024w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-12-300x128.png 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-12-768x329.png 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-12-1536x657.png 1536w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-12-70x30.png 70w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-12.png 1846w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<p>Der Reverse Proxy sitzt dagegen am anderen Ende, also nicht vor einem Client, sondern vor einem Server bzw. dessen Diensten. Ein Client fragt einen Server an und landet beim Reverse Proxy, der entsprechend an den Zieldienst vermittelt &#8211; ohne, dass der Client etwas davon mitbekommt. Daher spricht man von einem &#8222;umgekehrten Proxy&#8220;, auf Englisch <em>Reverse Proxy<\/em>.<\/p>\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-13.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"429\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-13-1024x429.png\" alt=\"\" class=\"wp-image-8357\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-13-1024x429.png 1024w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-13-300x126.png 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-13-768x322.png 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-13-1536x643.png 1536w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-13-70x29.png 70w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-13.png 1812w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<h2 class=\"wp-block-heading\" id=\"vorteile-eines-reverse-proxys\">Vorteile eines Reverse Proxys<\/h2>\n<p>Einfach gesagt k\u00f6nnen wir also verschiedene Webserver hinter einem Reverse Proxy bereitstellen, ohne dass dies nach au\u00dfen hin \u00fcber z.B. mehrere Ports sichtbar ist. Aber das Konzept bietet noch weitere Vorteile: Beispielsweise lassen sich Zugriffsbeschr\u00e4nkungen einbauen, damit bestimmte Anwendungen nicht \u00fcberall bzw. f\u00fcr jeden erreichbar sind. Wer HTTPS nutzen m\u00f6chte, kann auf dem Reverse Proxy zentral die Zertifikate hinterlegen oder dies mit Let&#8217;s Encrypt automatisieren. So liegen die Zertifikate an einer Stelle, statt auf den einzelnen Anwendungen verstreut. Das vereinfacht die Verwaltung und man ist nicht darauf angewiesen, dass z.B. Let&#8217;s Encrypt die Anwendung unterst\u00fctzt. Sp\u00e4testens wenn Webdienste direkt \u00fcbers Internet erreichbar werden, sollte \u00fcber Transportverschl\u00fcsselung mit HTTPS nachgedacht werden.<\/p>\n<p>Dar\u00fcber hinaus lassen sich Inhalte zwischenspeichern oder andere Ma\u00dfnahmen ergreifen, um die Leistung zu verbessern. Etwa f\u00fcr alle Dienste GZIP oder eine andere Komprimierung einschalten. Modernere Verfahren wie Brotli lassen sich so zentral aktivieren, auch wenn manche Anwendungen dies nicht unterst\u00fctzen. <\/p>\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-14.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"466\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-14-1024x466.png\" alt=\"\" class=\"wp-image-8358\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-14-1024x466.png 1024w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-14-300x136.png 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-14-768x349.png 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-14-1536x699.png 1536w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-14-70x32.png 70w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-14.png 1877w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<p>In gr\u00f6\u00dferen Umgebungen hat man m\u00f6glicherweise mehrere Instanzen einer Anwendung. Viele Reverse Proxys unterst\u00fctzen Lastverteilung, sodass man die Anfragen an mehrere Instanzen oder sogar Server aufteilen kann.<\/p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/u-img.net\/img\/6691Eu.gif\" alt=\"\"\/><\/figure>\n<h2 class=\"wp-block-heading\" id=\"vorteile-eines-reverse-proxys\">Welche Reverse Proxys gibt es?<\/h2>\n<p>Nahezu jeder g\u00e4ngige Webserver besitzt ein entsprechendes Modul, um sich wie ein Reverse Proxy zu verhalten. Beispielsweise Nginx, Apache und LiteSpeed, die verbreitetsten quelloffenen Webserver. Nginx und LiteSpeed sind auf hohe Leistung sowie einen geringen Ressourcenverbrauch optimiert. Die Unterschiede zu Apache machen sich eher auf leistungsschwachen Servern wie z.B. \u00e4lteren Pis bemerkbar, oder wenn man eine gewisse Last auf das System bekommt.<\/p>\n<p>Wer Docker nutzt, kann theoretisch auch einen der genannten klassischen Webserver als Reverse Proxy konfigurieren. Es gibt hierf\u00fcr aber modernere Alternativen wie Traefik oder der Nginx Proxy Manager. Sie vereinfachen die Einrichtung und Verwaltung deutlich, da sie auf die Container-Welt zugeschnitten sind. Dies werde ich noch in eigenen Beitr\u00e4gen genauer zeigen. <\/p>\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-15.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-15-1024x576.png\" alt=\"\" class=\"wp-image-8360\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-15-1024x576.png 1024w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-15-300x169.png 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-15-768x432.png 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-15-1536x864.png 1536w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-15-70x39.png 70w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/01\/grafik-15.png 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Wer mehrere Webanwendungen per HTTP bzw. HTTPS auf dem Raspberry Pi oder jedem anderen Linux-Server betreiben m\u00f6chte, wird feststellen: Jeder Port darf nur von einer Anwendung belegt werden. Genauer gesagt nur einmal pro IP-Adresse. Betreiben wir beispielsweise eine NextCloud (oder aber jeden anderen Webdienst) auf dem Standard-HTTP Port 80 und m\u00f6chten zus\u00e4tzlich eine weitere Anwendung &#8230;<\/p>\n","protected":false},"author":5,"featured_media":8362,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[671],"tags":[497,773,847,937],"class_list":["post-8345","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-raspberry-pi","tag-docker","tag-proxy","tag-reverse-proxy","tag-webserver"],"_links":{"self":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/8345","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/comments?post=8345"}],"version-history":[{"count":9,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/8345\/revisions"}],"predecessor-version":[{"id":9784,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/8345\/revisions\/9784"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/media\/8362"}],"wp:attachment":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/media?parent=8345"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/categories?post=8345"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/tags?post=8345"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}