ProxyHTMLURLMap を使用して CSS および JS リクエストをリダイレクトする

ProxyHTMLURLMap を使用して CSS および JS リクエストをリダイレクトする

Ubuntu 16.04にApache 2.4.19をインストールしてTomcatで動作させています。ノードアプリを追加して、/nodeへのすべてのリクエストをリダイレクトしようとしています。http://ローカルホスト:3000ProxyPass を使用。もちろん、私のノード アプリはポート 3000 をリッスンしています。

リクエストをリダイレクトするのに非常に便利ですhttps://myapi.com/node/foo

しかし、私は生成されたドキュメントに問題がありますアピドックこれを私のノードアプリで静的に提供しますapp.use(express.static('doc'));https://myapi.com/node/vendor/xxx、のようなすべての URLにプレフィックス/locales/xxxが付けられなかったようです/node。ProxyHTMLURLMap がそれを処理してくれると思っていましたが、使い方が間違っているようです。

以下は私の /etc/apache2/sites-enabled/000-default.conf です (短くするためにコメントをいくつか削除しました)

<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>

編集
Andrew Schulmanの提案どおりに使用できません。apidoc.jsProxyHTMLExtended Onの出力が台無しになってしまうからです。apidoc.jsで生成された出力
index.html最後には、次のステートメントがあります。
<script data-main="main.js" src="vendor/require.min.js"></script>
次に、スクリプトステートメントでを 置き換えようとしましたmain.jsが、requiresが失敗しています... クエリを実行すると、require
main.jsnode/main.js
ノード直接、すべてのファイルが正常に読み込まれるようです。Apache を設定して /node を /node/index.html にリダイレクトするだけでいいかもしれません。

答え1

デフォルトでは、mod_proxy_htmlはインラインCSSとJavascriptのリンクを書き換えません。これを有効にするには、設定する必要がありますProxyHTMLExtended Onドキュメント

これで問題は解決するかもしれませんが、インラインではなく他のファイルから取得された CSS や Javascript には影響しません。これらも修正したい場合は、mod_sed や mod_line_edit などの別のモジュールを使用する必要があります。これもうまくいくかもしれませんが、コード (Javascript など) では URL が正規表現パーサーが見つけられない任意の方法で計算される可能性があるため、完全に正しく実行することは不可能です。

関連情報