Wie umschreiben / proxy Apache-URI, um eine Anwendung lauscht auf einem bestimmten port / server?

Sagen Sie, dass Apache mod_rewrite ist das Schweizer Taschenmesser der URL manipulation, aber kann es dies tun?

Können sagen, möchte ich hinzufügen, dass eine neue Anwendung auf meinem Apache webserver, wo die einzige konfigurierbare option ist die app eine port-Nummer.

Ich will & geben URLs der form "http://hostname.example.com/app" anstatt "http://hostname.example.com:8080". Dies würde sicherstellen, dass die clients bekommen würde durch die institution, die firewall auch, und es ist generell aufgeräumter.

Mein Antrag beinhaltet absolute URIs in php, javascript und css, so möchte ich voranstellen meinen eigenen root Ordner auf die URI in der Anwendungen-interne links. Ich habe keinen Zugriff auf DNS-Einträge und kann so nicht, erstellen Sie einen anderen Namen-basierte virtuelle server.

Apache ' s mod_rewrite und mod_proxy Module, kann ich transparent umleiten von client auf die korrekte home-Seite der Anwendung. Aber links innerhalb dieser homepage zeigen Sie nicht ein client auf die links bezogen auf die neue Basis-URL.

Also, was ist der beste Weg von Proxys eine Anfrage an eine Anwendung lauscht auf einem bestimmten port?

Zum Beispiel, wenn ich eine Anwendung lauscht auf port 8080, ich könnte diese in meine Apache-Konfiguration:-

<VirtualHost *:80>
    SSLProxyEngine On
    ServerName myhost.example.com
    RewriteEngine On
    UseCanonicalName On
    ProxyVia On
    <Location "/application">
        RewriteRule ^/application/?(.*) http://localhost:8080/$1 [P,L]
    </Location>
</VirtualHost>

Dieser würde funktionieren, wenn die Anwendung nicht absolute URLs verwendet werden, aber es funktioniert. Was ich tun müssen, ist die rewrite-URLs, die zurückgegeben werden, von der Anwendung von css, javascript und php.

Ist, habe ich mich auf die ProxyPass-und ReverseProxyPass Dokumentation, aber ich glaube nicht, daß dies funktionieren würde..?

Habe ich auch gekommen, über Nick Kew ist mod_proxy_html, aber dies ist nicht enthalten in der standard-Apache-Distribution, und meine institution webserver scheint zu haben gewesen fein seit Jahren, ohne dass es.. Anderen als die Schleppnetzfischerei manuell (oder mit einem grep -r | sed-Typ Ausdruck) durch die Anwendung der source-code, oder mit 3rd-party-add-on, gibt es andere Wege zu gehen über diese?

Könnte ich vielleicht einige der internen server-Variablen in eine mod_rewrite-Regel? Beispiel einer rewrite-Regel basiert auf 'HTTP_REFERER'?

  • Sie müssen mod-proxy-html, weil die internen links auf Webseiten verweist, die außerhalb application/, wenn Sie beginnen mit / (Sie sind nicht fixierbar durch proxy, weil z.B. /img/abc Anfrage mehrdeutig ist ohne Kontext: application/img/abc oder wirklich /img/abc). Nicht Sie beheben die app zu verwenden, nur relative links?
  • Dachte ich geantwortet... :S Die apps in Frage nicht-directory-basierte (daemon-Anwendungen, hören Sie auf Ihre eigenen Anschluss) und bezieht sich nicht auf irgendetwas außerhalb Ihrer jeweiligen root-Verzeichnisse. Ich habe versucht Festsetzung alle der absolute URIs in einer app (Weg-tools), aber das nur die app getötet. Dies war auch eine Menge Arbeit, und müsste wiederholt werden, sollte ein update ersetzen, alles wichtige (von denen einige könnte verteilt werden als binäre und somit nicht bearbeitet werden; kein Zweifel, warum diese app brach). Ta-tho 🙂
InformationsquelleAutor Alex Leach | 2011-09-23
Schreibe einen Kommentar