Apache Reverse Proxy-Konfiguration

Apache Reverse Proxy-Konfiguration

Ich habe also eine Debian 9-Box mit Apache 2.4.25

Ich möchte, dass Apache auch Webinhalte von einem anderen Server aus bereitstellt (http://192.168.1.100:8088) im Netzwerk; ich habe mod_proxy dafür eingerichtet, aber es funktioniert nicht richtig.

Diese Konfiguration scheint fast zu funktionieren, da ich vom richtigen Server Fehlerinhalte erhalte. Es scheint, als gäbe es ein URL-Problem mit dem App1-Endpunkt, der vielleicht an die URL angehängt wird? Dieser Endpunkt existiert eigentlich nirgends und wird nur zum Abfangen von Anfragen verwendet.

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    ProxyPreserveHost On
    ProxyRequests Off
    <proxy *>
      Order deny,allow
      Allow from all
    </proxy>
    ProxyPass /app1 http://192.168.1.100:8088/
    ProxyPassReverse /app1 http://localhost/
</virtualHost>

Wenn ich versuche, alle Anfragen auf diese Weise per Proxy zu übermitteln, funktioniert es einwandfrei, aber ich kann offensichtlich nicht auf Ressourcen auf dem lokalen Host zugreifen.

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    ProxyPreserveHost On
    ProxyRequests Off
    <proxy *>
      Order deny,allow
      Allow from all
    </proxy>
    ProxyPass / http://192.168.1.100:8088/
    ProxyPassReverse / http://localhost/
</virtualHost>

Ich denke, dass ich vielleicht eine Art ReWrite durchführen muss? Ich habe nicht besonders viel Erfahrung mit der Verwendung von Apache mod_proxy.

:-(

Antwort1

Wie in den Kommentaren erwähnt, haben Sie mindestens zwei offensichtliche Probleme:

  1. „Abschließende“ Schrägstriche müssen in jeder einzelnen ProxyPassAnweisung ProxyPassReverseübereinstimmen.

  2. ProxyPassund ProxyPassReversemüssen auf denselben Host verweisen.

Also, in Ihrem ersten Beispiel:

ProxyPass /app1 http://192.168.1.100:8088/
ProxyPassReverse /app1 http://localhost/

Sollte sein:

ProxyPass /app1 http://192.168.1.100:8088
ProxyPassReverse /app1 http://192.168.1.100:8088

Oder:

ProxyPass /app1 http://localhost
ProxyPassReverse /app1 http://localhost

Für Ihr zweites Beispiel /gilt für die hier genannten Zwecke ein „abschließender“ Schrägstrich. Also:

ProxyPass / http://192.168.1.100:8088/
ProxyPassReverse / http://localhost/

Es müssen lediglich die Hosts übereinstimmen:

ProxyPass / http://192.168.1.100:8088/
ProxyPassReverse / http://192.168.1.100:8088/

Oder:

ProxyPass / http://localhost/
ProxyPassReverse / http://localhost/

Anmerkungen

  • Es ist wahrscheinlich erwähnenswert, dass die Art und Weise, wie Apache die von ihm weitergeleiteten URLs behandelt, /zu besseren Ergebnissen führen kann, als wenn /app1man davon abhängt, wie die empfangende Anwendung ihre eigenen URLs erstellt.

  • Abhängig von der Funktionsweise der empfangenden Anwendung müssen Sie möglicherweise mehrere URLs als Proxy verwenden.

  • mod_proxy_htmlMöglicherweise möchten Sie „ und mod_proxy_httpzusätzlich“ aktivieren, mod_proxywenn sie aus irgendeinem Grund noch nicht aktiviert sind.

verwandte Informationen