Verwenden von ProxyHTMLURLMap zum Umleiten von CSS- und JS-Anfragen

Verwenden von ProxyHTMLURLMap zum Umleiten von CSS- und JS-Anfragen

Ich habe bereits Apache 2.4.19 auf meinem Ubuntu 16.04 installiert und arbeite mit Tomcat. Ich versuche, eine Node-App hinzuzufügen und alle Anfragen für /node umzuleiten anhttp://localhost:3000mit ProxyPass. Meine Node-App lauscht natürlich auf Port 3000.

Es funktioniert sehr gut, meine Anfragen umzuleiten wiehttps://myapi.com/node/foo

Ich habe jedoch Probleme mit der Dokumentation, die mitapidocdie ich statisch in meiner Node-App bereitstelle app.use(express.static('doc'));. Wenn ich zuhttps://myapi.com/node, es scheint, dass alle URLs wie /vendor/xxxnicht /locales/xxxmit /nodeeinem Präfix versehen wurden. Ich dachte, ProxyHTMLURLMap würde sich darum kümmern, aber ich muss es falsch verwenden.

Hier ist meine /etc/apache2/sites-enabled/000-default.conf (ich habe einige Kommentare entfernt, um sie kürzer zu machen)

<VirtualHost *:443>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    # Tomcat
    JkMount /* worker1

    # SSL Config
    SSLEngine on
    SSLCertificateFile /path/to/certificate
    SSLCertificateKeyFile /path/to/private.key
    SSLCACertificateFile /path/to/intermediate-cert

    # Headers
    Header always set Access-Control-Allow-Origin "*"
    Header always set Access-Control-Allow-Headers "X-Requested-With, Content-Type, Origin, Authorization, Accept, Client-Security-Token, Accept-Encoding"
    Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PULL"
    # Return 200 for all OPTIONS requests
    RewriteEngine On
    RewriteCond %{REQUEST_METHOD} OPTIONS
    RewriteRule ^(.*)$ $1 [R=200,L]

    # Reverse Proxy to Node
    # The part below was supposed to change the relative url to /node/xxx but it does not seem to work
    ProxyHTMLURLMap http://localhost:3000 /node
    <Location /node>
           ProxyPass http://localhost:3000
           ProxyPassReverse http://localhost:3000
           ProxyHTMLEnable On
           SetOutputFilter proxy-html
           ProxyHTMLURLMap http://localhost:3000
    </Location>
</VirtualHost>
<VirtualHost *:80>
    ServerName myapi.com
    Redirect / https://myapi.com/
</VirtualHost>

BEARBEITEN
Ich kann es nicht ProxyHTMLExtended Onwie von Andrew Schulman vorgeschlagen verwenden, da dies die Ausgabe von apidoc.js durcheinander bringen würde.
Das index.htmlmit apidoc.js generierte hat diese Anweisung ganz am Ende:
<script data-main="main.js" src="vendor/require.min.js"></script>
Dann main.jsführt das eine Reihe von aus. require
Ich habe versucht, das main.jsdurch node/main.jsin der Skriptanweisung zu ersetzen, aber dann schlagen die Anforderungen fehl ...
Mir ist auch aufgefallen, dass, wenn ich abfragehttps://myapi/node/index.htmldirekt, alle Dateien scheinen einwandfrei zu laden. Vielleicht konfiguriere ich Apache einfach so, dass /node auf /node/index.html umgeleitet wird

Antwort1

Standardmäßig schreibt mod_proxy_html keine Links in Inline-CSS und Javascript um. Um dies zu aktivieren, müssen Sie Folgendes festlegen ProxyHTMLExtended On. Siehe dieDokumente.

Das könnte Ihr Problem beheben, aber es betrifft nicht CSS und Javascript, die aus anderen Dateien stammen, anstatt inline eingefügt zu sein. Wenn Sie versuchen möchten, diese auch zu beheben, müssen Sie ein anderes Modul wie mod_sed oder mod_line_edit verwenden. Das könnte auch für Sie funktionieren, aber es kann auch unmöglich sein, es vollständig richtig zu machen, da URLs im Code (d. h. Javascript) auf beliebige Weise berechnet werden können, die ein Regex-Parser nicht finden kann.

verwandte Informationen