2

cento の 7 サーバーで Apache 2.4 を使用してリバース プロキシを構築しました。標準の html ページで動作しますが、.js ファイルに保存されている URL も置き換える必要があります。ディレクティブ:

ProxyHTMLExtended On

外部の .css および .js ファイル内の解析を有効にする必要がありますが、機能しません。ログファイルで私は見ることができます:

[proxy_html:trace1] [pid 3263] mod_proxy_html.c(823): [client xxx] Non-HTML content; not inserting proxy-html filter

mod_substitute を使用しようとしましたが、これは httpd.conf の興味深い部分です。

ProxyPass /mylocation/ http://remoteserver/
<Location /mylocation/>
  ProxyHTMLEnable On
  ProxyHTMLExtended On

  LogLevel debug proxy_html:trace3  substitute_module:debug 
  RequestHeader    unset  Accept-Encoding

  AddOutputFilterByType SUBSTITUTE text/javascript text/html
  Substitute "s|/css/|/mylocation/css/|ni"
  Substitute "s|/js/|/mylocation/js/|ni"
  Substitute "s|/custom_logo/|/mylocation/custom_logo/|ni"
  Substitute "s|/html/|/mylocation/html/|ni"
  Substitute "s|/current_config/|/mylocation/current_config/|ni"
  Substitute "s|/web_lang/|/mylocation/web_lang/|ni"
  Substitute "s|/custom_lang/|/mylocation/custom_lang/|ni"

  ProxyPassReverse /

  ProxyHTMLURLMap //remoteserver /mylocation/
  ProxyHTMLURLMap http://remoteserver /mylocation/
  ProxyHTMLURLMap /mylocation /mylocation
  ProxyHTMLURLMap ^\/(.*) /mylocation/$1 R   
</Location>

しかし、ログ ファイルには mod_substitute トレースはありません。mod_substitute が呼び出されないようです。

proxyHTMLURLMap ルールは正常に機能しますが、通常の html ファイルでのみ機能します。

サーバーに要求している .js ファイルに応じて、ログ ファイルで確認できます。

[xml2enc:debug] [pid 3259] mod_xml2enc.c(254): [client xxx] AH01434: Charset ISO-8859-1 not supported by libxml2; trying apr_xlate

また

[proxy_html:trace1] [pid 3263] mod_proxy_html.c(823): [client xxx] Non-HTML content; not inserting proxy-html filter

その後、プロセスが停止し、ファイルを受け取りましたが、何も置き換えられていません。

1) 「ProxyHTMLExtended On」ルールは、Apache ドキュメントで説明されているように、外部の .js ファイルを解析しないのはなぜですか?

2) mod_substitute が機能しないのはなぜですか?

4

3 に答える 3

2

私はあなたの質問に答えようとします

1) 「ProxyHTMLExtended On」ルールは、Apache ドキュメントで説明されているように、外部の .js ファイルを解析しないのはなぜですか?

あなたはそのProxyHTMLExtended指令を言います:

外部の .css および .js ファイル内の解析を有効にする必要がありますが、機能しません。

それは間違っているようです、現在のドキュメントは次のように述べています:

Off に設定すると、ProxyHTMLURLMap ディレクティブに従って HTML リンクが書き換えられますが、Javascript および CSS で表示されるリンクは無視されます。

On に設定すると、すべてのスクリプト イベント (ProxyHTMLEvents によって決定される) および埋め込まれたスクリプトまたはスタイルシートも、各ルールに設定されたフラグに従って、ProxyHTMLURLMap ルールによって処理されます。これにはより多くの解析が必要になるため、厳密に必要な場合にのみ有効にすると、パフォーマンスが最適になります。

つまり、埋め込みスクリプト、内のもの<script></script>はチェックされます。.js ファイルについては触れていません。

2) mod_substitute が機能しないのはなぜですか?

これについては、なぜ機能しないのかよくわかりませんが、Apache がエラーなしで起動してから mod_substitute が有効になっていると仮定すると、推測できる唯一のことは、Apache があなたが書いたものapplication/javascriptではなく Mime-Type として送信していることです。text/javascript

いくつかのボーナスの提案:

  • あなたが持っている場合は、あなたのスクリプトですべてを翻訳するので、私は使用ProxyHTMLURLMap ^\/(.*) /mylocation/$1 Rしません。使用を検討します(フラグは、「埋め込みスクリプトとスタイル セクションをそのまま渡す」ことを意味します)。ProxyHTMLExtended On/<script> var a = 12/2; </script><script> var a = 12/mylocation/2; </script>ProxyHTMLURLMap / /mylocation/ cc
  • 私は本当にあなたが必要だとは思わないProxyHTMLURLMap /mylocation /mylocation
  • ProxyHTMLURLMap http://remoteserver /mylocation/あなたのURLに余分なものを追加/しますが、それでも機能しますが、私見では、それは良い翻訳ではありません.
    元。<a href="http://remoteserver/about">このように書き直す<a href="/mylocation//about">
    ことをお勧めしますProxyHTMLURLMap http://remoteserver /mylocation
于 2016-11-21T14:35:52.167 に答える
2

mod 代替が機能しないという同様の問題があります。

次に、通常、mod_subsittue は、サーバーから取得した HTTP 応答の MIME タイプが txt/html の場合にのみデフォルトで機能することをどこかで読みました。

これは私のシナリオではありませんでした。私のシナリオは、XML のコンテンツ、つまり apache httpd によってリバース プロキシされていた JEE Web サービスを書き直したいというものでした。

mod の代用者が応答内容を変更できるようにするには、次のことを行う必要がありました。

<Location /mockOutgoingWebServicePortBinding>

              # core authentication and mod_auth_basic configuration
              # for mod_authn_dbd
              AuthType Basic
              Authname "Password Required"

             # core authorization configuration
             AuthUserFile C:\Apache24\conf\htpasswd
             Require valid-user

             # mod_filter to be able to subsitute text xml
             AddOutputFilterByType SUBSTITUTE text/xml text/html
             Substitute "s|http://someHostName:8088/|http://localhost:80/|i"
</Location>

魔法のステップは、mod_filter を有効にして、ディレクティブ AddOutputFilterByType を追加することでした。

これが追加されると、置換によって xml の本文が変更されました。エンドポイント アドレスを置き換えます。

于 2019-05-28T18:43:29.553 に答える
0

これについて:

しかし、ログ ファイルには mod_substitute トレースはありません

以下を使用して、error.log で mod_substitute トレースを取得することができました。

LogLevel alert substitute:trace8
于 2021-08-12T14:39:29.107 に答える