2

Apache mod_include を試しています。

Apache を実行している 2 つのサーバーを取得しました。test_local.shtml (server1) に test_remote.shml (server2) からの単純なテキストを含めようとしています。

test_local.shtml :

<html>
  <head>
  <title></title>
  </head>
  <body>
    <!--#include virtual="http://www.server2.com/test_remote.shtml"-->
  </body>
</html>

test_remote.shtml :

<b>this is a test</b>

最初は機能しませんでした (error_log に「ファイルが存在しません」というエラーが表示されました)。セキュリティ上の理由から、含めることができた唯一のファイルはローカル サーバー (server1) にあり、ローカル パスはありますが、リモート URL はないようです。次に、リモート インクルードを機能させるには、mod_include と組み合わせて mod_proxy (および mod_proxy_html) を使用する必要があることを理解しました。

そこで、(server1 の) httpd.conf に以下を追加しました。

ProxyPass /server2 http://www.server2.com

次に、test_local.shtml のインクルード行を次のように変更しました。

<!--#include virtual="/server2/test_remote.shtml"-->

今回はエラーはありません。何かが含まれていますが、結果のテキストはすべて文字化けしています。

 ‹³I²+ÉÈ,V¢D…’Ôâý$;.j¿è

構成に何か不足していますか? どうしたの?

更新: 2つのサーバー間でデータが送信される(そして読み取られる)方法に関するものだと思います..圧縮など。両方のサーバーに含まれており、機能している mod_deflate 構成セクションを確認しましたが、同じです。何か案が?ありがとう

更新 2: server2 で SetOutputFilter DEFLATE を無効にすると、server1 の mod_include に含まれるテキストは完全に読み取り可能になります。それが問題の原因です:gzipされたコンテンツを処理して正しく表示するようにserver1を構成するにはどうすればよいですか? (仮説として、outputfilter とは反対の何らかの inputfilter を想像します..)

4

1 に答える 1

2

2 つの解決策を見つけましたが、リモート サーバーの構成を変更する必要がないため、2 番目の方法を好みます。

解決策 1:

以下をリモート サーバー構成に追加することで、.shtml ファイルの gzip 圧縮を無効にします。

<IfModule mod_deflate.c>
    SetEnvIfNoCase Request_URI \.shtml$ no-gzip dont-vary
</IfModule>

コンテンツを含めるリモートサーバーに常にアクセスできるとは限らないため、これは私にとって最善の解決策ではありません。

解決策 2:

「ローカル」サーバー (SSI インクルージョンを使用する 1 つのホスティング ページ) で、次を追加します。

ProxyPass /server2 http://www.server2.com/
ProxyPassReverse /server2 http://www.server2.com/
<Location "/server2/">
    RequestHeader unset Accept-Encoding
</Location>

基本的に、Apache に Accept-Encoding リクエスト ヘッダーを無効にするように指示しています。リモート サーバーに .shtml ページを要求するときは、圧縮せずにページを要求します。その結果、文字化けしたコンテンツを回避して、プレーンテキストを取得します。

詳細情報: http://wiki.apache.org/httpd/ReInflating

于 2013-02-20T09:45:23.517 に答える