
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.js
node/main.js
ノード直接、すべてのファイルが正常に読み込まれるようです。Apache を設定して /node を /node/index.html にリダイレクトするだけでいいかもしれません。
答え1
デフォルトでは、mod_proxy_htmlはインラインCSSとJavascriptのリンクを書き換えません。これを有効にするには、設定する必要がありますProxyHTMLExtended On
。ドキュメント。
これで問題は解決するかもしれませんが、インラインではなく他のファイルから取得された CSS や Javascript には影響しません。これらも修正したい場合は、mod_sed や mod_line_edit などの別のモジュールを使用する必要があります。これもうまくいくかもしれませんが、コード (Javascript など) では URL が正規表現パーサーが見つけられない任意の方法で計算される可能性があるため、完全に正しく実行することは不可能です。