So richten Sie einen Reverse-Proxy mit Apache ein – CloudSavvy IT
Webagentur » Digitale Nachrichten » So konfigurieren Sie einen Reverse-Proxy mit Apache

So konfigurieren Sie einen Reverse-Proxy mit Apache

Apache ist ein vielseitiger Webserver, der eine vollständige Palette unterstützender Funktionen bietet, einige davon durch Erweiterungen. In diesem Artikel verwenden wir die mod_proxy Modul zum Konfigurieren von Apache in einer Reverse-Proxy-Rolle.

Während Apache vielleicht nicht Ihre erste Wahl als Reverse-Proxy ist, mit moderneren Alternativen wie NGINX, die tendenziell Aufmerksamkeit erregen, mod_proxy ist nützlich für Server, auf denen bereits Apache ausgeführt wird und die nun den Datenverkehr an einen anderen Dienst weiterleiten müssen. Sie können einen virtuellen Apache-Host so konfigurieren, dass Anforderungen von einer bestimmten Domäne an einen separaten Webserver weitergeleitet werden.

Für die Zwecke dieses Handbuchs verwenden wir Apache 2.4 mit einem Debian-basierten System. Wir gehen auch davon aus, dass die Server, an die Sie den Datenverkehr weiterleiten möchten, bereits über das Netzwerk von Ihrem Apache-Host aus zugänglich sind. Dieser Artikel konzentriert sich auf die Aktivierung von Proxy basierend auf einem einzelnen virtuellen Host, aber mod_proxy ist auch global als Teil Ihrer Apache-Serverkonfiguration oder auf Verzeichnisebene via konfigurierbar .htaccess Dateien.

Aktivierung des Proxy-Moduls

mod_proxy ist in der Standard-Apache-Installation enthalten. Benutzen a2enmod um das Modul und seine unabhängige HTTP-Komponente jetzt zu aktivieren:

sudo a2enmod Proxy sudo a2enmod Proxy_http

Dadurch wird Apache so konfiguriert, dass er Proxy-HTTP-Verbindungen zu anderen Hosts unterstützt. Das Modul wird konfiguriert mit Proxy-vorangestellte Anweisungen in Ihren Apache-Konfigurationsdateien. Wir werden sie als nächstes konfigurieren.

Konfigurieren eines virtuellen Proxy-Hosts

Lassen Sie uns einen virtuellen Host einrichten, der sendet example.com an die interne IP-Adresse 192.168.0.1. Sie müssen einen DNS-Eintrag hinzufügen example.com die auf Ihren Apache-Host zeigt.

Der Proxy in diesem Szenario ermöglicht Besuchern den transparenten Zugriff auf Ihren internen Webserver über eine externe Adresse. Apache fungiert als Gatekeeper, der den Datenverkehr an sein endgültiges Ziel weiterleitet. Der Benutzer wird sehen example.com, obwohl Apache Anfragen über den separaten Server auflöst.

Fügen Sie eine neue virtuelle Hostdatei hinzu /etc/apache2/sites-available mit folgendem Inhalt:

Servername example.com ProxyPass / http://80/ nocanon ProxyPassReverse / http://192.168.0.1/

le ProxyPass et ProxyPassReverse Richtlinien geben diesen Datenverkehr an example.com sollte ein Agent von sein 192.168.0.1. Die Wahl nocanon Das Schlüsselwort weist Apache an, die Roh-URL an den Remote-Server zu übergeben. Ohne dieses Schlüsselwort wird Apache die URL automatisch kanonisieren, was mit einigen Servern und Frameworks möglicherweise nicht kompatibel ist. Verwenden nocanon garantiert die Kompatibilität, kann jedoch Ihr Sicherheitsniveau beeinträchtigen, da es den integrierten Schutz von Apache gegen URL-basierte Proxy-Angriffe deaktiviert.

ProxyPassReverse muss angegeben werden, um Ihr Setup als Reverse-Proxy-Setup zu unterscheiden. Apache verwendet die bereitgestellte URL zum Umschreiben Location, Content-Locationund URI Antwortheader, die von Ihrem Back-End ausgegeben werden. Dadurch wird sichergestellt, dass nachfolgende Anfragen weiterhin den Reverse-Proxy erreichen, anstatt zu versuchen, den internen Server direkt zu erreichen.

Diese Konfiguration leitet alle Anfragen weiter. Sie können den Proxy auf einen bestimmten Pfad beschränken, z /media durch Anpassung der ProxyPass et ProxyPassReverse Anweisungen:

ProxyPass/Medien http://192.168.0.1/ ProxyPassReverse/Medien http://192.168.0.1/

Hinzufügung mehrerer ProxyPass Mit Regeln können Sie Anforderungen zwischen mehreren Zielen mithilfe eines virtuellen Hosts weiterleiten. Regeln werden in der Reihenfolge abgeglichen, in der sie geschrieben wurden. Wenn Sie ein komplexeres Routing-Verhalten benötigen, verwenden Sie die ProxyPassMatch Direktive stattdessen. Dies entspricht ProxyPass ordnet aber eingehende URLs einem regulären Ausdruck zu:

ProxypassMatch ^/Client /(.*)/ Bilder $ http://192.168.0.1/

Speichern Sie Ihre virtuelle Hostdatei und aktivieren Sie sie mit der a2ensite bestellen. Dies nimmt den Basisnamen Ihrer Datei relativ zur sites-available Telefonbuch:

sudo a2ensit Beispiel-Proxy-vhost

Starten Sie Apache neu, um Ihre Änderungen zu übernehmen:

Sudo service apache2 neu starten

Ihr einfacher Proxy sollte jetzt betriebsbereit sein. Versuchen Sie zu besuchen example.com – Sie sollten den Inhalt sehen, der von bereitgestellt wird 192.168.0.1. Die Anfrage landet auf Ihrem Apache-Host, der sie dann an Ihren internen Server weiterleitet.

SSL verwenden

Das obige Beispiel lässt SSL aus. In einer Produktionsworkload möchten Sie dies durch Hinzufügen konfigurieren SSLCertificateFile et SSLCertificateKeyFile Einstellungen zu Ihrem virtuellen Host. Diese geben das SSL-Zertifikat und den Schlüssel an, die bei der Validierung von SSL-Verbindungen verwendet werden sollen. Sie können auch den Certbot von Let’s Encrypt verwenden, um die Einrichtung zu automatisieren.

Wenn Sie SSL auf diese Weise konfigurieren, wird die sichere Verbindung auf Ihrem Apache-Host unterbrochen. Die Verbindung zwischen Apache und Ihrem Proxy-Ziel erfolgt über einfaches HTTP.

Wenn Sie auch die Proxy-Verbindung benötigen, um sicher zu sein, sollten Sie die verwenden SSLProxy Optionen bereitgestellt von mod_ssl. SSLProxyEngine = On funktioniert als einfachste Konfiguration, vorausgesetzt, Apache und Ihr Ziel-Proxyserver haben Zugriff auf dieselben Zertifikate. Diese Option leitet SSL-Informationen über die Proxy-Verbindung weiter.

Proxy-Optionen

Apache-Reverse-Proxys verfügen über mehrere optionale Anweisungen, mit denen Sie das Weiterleitungsverhalten optimieren können. Hier sind einige häufig verwendete Optionen:

  • ProxyAddHeaders – Apache-Pass X-Forwarded-Host, XForwarded-Forund X-Forwarded-Server Header zu Ihrem Standard-Hauptserver. Diese ermöglichen Ihrem Backend zu erkennen, dass eine Anfrage über Apache weitergeleitet wurde. Setzen Sie diesen Header auf Off verhindert, dass Apache diese Header hinzufügt.
  • ProxyErrorOverride – Apache stört die von Ihrem Hauptserver gesendeten Antworten nicht, sofern nicht anders angegeben. Wenn Ihr Backend einen Fehlercode 400, 404, 500 oder einen anderen Fehlercode bereitstellt, erhält der Benutzer diesen Inhalt unverändert. Einstellung ProxyErrorOverride ändert dies und lässt Apache den Inhalt von Fehlerseiten durch die ersetzen ErrorDocument eher. Dies kann in Situationen wünschenswert sein, in denen Sie möchten, dass Fehler von all Ihren Backends einheitlich mit einer zentralisierten Konfiguration auf dem Proxy-Host behandelt werden.
  • ProxyPassReverseCookieDomain – Es funktioniert genauso wie obligatorisch (für Reverse-Proxy) ProxyPassReverse Richtlinie. Es wird die Domäne neu schreiben Set-Cookie Kopfzeilen, um auf den Namen des virtuellen Hosts zu verweisen, und nicht auf den Hostnamen des Hauptservers, von dem sie stammen.
  • ProxyPreserveHost – Apache sendet normalerweise seinen eigenen Hostnamen als Wert von an Ihre Hauptserver Host in deinen Gedanken. Die Definition dieser Richtlinie bedeutet, dass die Original Host stattdessen wird der Header gesendet. Dies kann erforderlich sein, wenn Ihre Hauptsoftware ihr eigenes Routing basierend auf dem Hostnamen durchführt.
  • ProxyTimeout – Verwenden Sie diese Anweisung, um die Wartezeit von Apache anzupassen, während Ihr Hauptserver eine Proxy-Anfrage verarbeitet. Apache bricht die Anfrage ab und gibt einen Fehlercode an den Client zurück, wenn das Timeout überschritten wird. Es ist standardmäßig auf Serverebene Timeout Wert.

Sie können diese Anweisungen als zusätzliche Zeilen in Ihrer virtuellen Hostdatei definieren. Denken Sie daran, den Apache-Dienst jedes Mal neu zu starten, wenn Sie eine Änderung anwenden.

Lastverteilung

Die Reverse-Proxy-Implementierung von Apache unterstützt auch den Lastenausgleich zwischen mehreren verschiedenen Backends. Dies ermöglicht eine Anfrage an example.com Tippen Sie auf einen der Server in Ihrem Ausgleichspool.

BalancerMember http://192.168.0.1 BalancerMember http://192.168.0.2 ProxySet lbmethod=bytraffic ProxyPass / balancer://Beispiel-Balancer ProxyPassReverse / balancer://Beispiel-Balancer

Dieses Beispiel leitet Anforderungen an einen von zwei Servern in der weiter example-balancer Schüssel. Der Lastausgleichsalgorithmus wird durch die definiert lbmethod Einstellung; das bytraffic Der hier verwendete Wert versucht sicherzustellen, dass jeder der Server die gleiche Menge an Datenverkehr verarbeitet.

Die Alternative byrequests balancing method ist eine einfachere Version von Bytraffic, die jedem Backend einen gleichen Anteil an eingehenden Anfragen zuweist. das bybusyness balancer verfolgt die Anzahl der Anfragen, die von jedem Backend verarbeitet werden, und weist dann neue Anfragen dem weniger „ausgelasteten“ Backend zu.

Zusammenfassung

le mod_proxy Das Modul kann Apache in einen Reverse-Proxy-Host verwandeln, mit dem Sie namensbasiertes Routing verwenden können, um auf mehrere unabhängige Dienste zuzugreifen. Sie können auch Lastenausgleich hinzufügen, um Stabilität und Verfügbarkeit bereitzustellen, indem Sie Anforderungen über Ihre gesamte Serverfarm verteilen.

Andere Proxy-Varianten sind ebenfalls verfügbar. Sie können unter anderem FTP-, WebSocket- und HTTP2-Verbindungen als Proxy verwenden, indem Sie daneben Add-Ons installieren mod_proxy. Die vollständige Liste der Module ist in den Apache-Dokumenten verfügbar.

★ ★ ★ ★ ★