
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:
„Abschließende“ Schrägstriche müssen in jeder einzelnen
ProxyPass
AnweisungProxyPassReverse
übereinstimmen.ProxyPass
undProxyPassReverse
mü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/app1
man 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_html
Möglicherweise möchten Sie „ undmod_proxy_http
zusätzlich“ aktivieren,mod_proxy
wenn sie aus irgendeinem Grund noch nicht aktiviert sind.