2017-01-15 8 views
0

Apache HTTP 2.4をリバースプロキシとして使用しています。私の構成では、1と思う除き正常に動作します:reverseProxy:埋め込みJavaScriptファイルの内容を変更する方法

  • 私はこれは私の実際の仮想ホストの設定である

ファイル埋め込まれたJavaScriptで文字列のコンテンツ(URL)を変更したいと思います:

<VirtualHost web.mydomain.com:80> 
     ServerName web.mydomain.com 
     ServerAlias web.mydomain.com 

     DocumentRoot "..." 
     ... 

     RewriteEngine On 
     RewriteCond %{REQUEST_METHOD} OPTIONS 
     RewriteRule ^(.*)$ $1 [R=200,L] 

     #Options -Indexes 
     #ProxyRequests On 
     #ProxyPreserveHost Off 

     # Web App 
     ProxyPass /hello http://middleware.mydomain.com:8082/hello-world-0.0.7 
     ProxyPassReverse /hello http://middleware.mydomain.com:8082/hello-world-0.0.7 

     AddOutputFilterByType SUBSTITUTE text/html 
     Substitute "s|hello-world-0.0.7|hello|ni" 
</VirtualHost> 

私を助けてもらえますか?

答えて

0

通常、アプリケーションサーバーで外部URLを構成できるため、Apacheサーバーで置換する必要はありません。このような構成はより効率的である。

ブラウザで返されたContent-Typeがフィルタに一致することを確認しましたか?あなたはJavascriptファイルを指定しますが、text/htmlをフィルタリングします。 (例:Chrome:開いているデベロッパーツール>ページに移動して[ネットワーク]タブを開き、代替が必要なリソースをクリックします>レスポンスヘッダーでContent-Typeヘッダーを探します)。 Content-Typeヘッダーはフィルタに一致する必要があります。

それでも動作しない場合は、アプリケーションサーバーがgzippedコンテンツを返す可能性があります(応答ヘッダーでContent-Encoding:gzipを確認してください)。その場合、置換は機能しません。

は、Apacheの設定で次のディレクティブを追加し、その回避するには、次の

RequestHeader unset Accept-Encoding 

は、より多くのデータがネットワークを介して送信する必要があるため、これはパフォーマンスの低下につながることに注意してください。このソリューションは、現在の仮想ホストのすべての要求に適用されるため、このソリューションは運用環境ではお勧めしません。

<Location "/hello/path/to/your/javascript/file.js"> 
    RequestHeader unset Accept-Encoding 
    AddOutputFilterByType SUBSTITUTE text/html 
    Substitute "s|hello-world-0.0.7|hello|ni" 
</Location> 
+0

こんにちはいただきありがとうございます、:あなたは、単一のファイルに対して置換を使用する必要がある場合はApacheのみがそのファイルの追加作業を行うように、私は、ブロックにAddOutputFilterByTypeディレクティブ、代替とRequestHeaderディレクティブを包むお勧めします有用なコメントが得られます。私のルールのコンテンツタイプがtext/htmlである理由は、html.head.baseタグのコンテンツを変更するために使用されるためです。提案された設定を自分の仮想ホスト定義に追加しました。これは魅力的です。どうも! – zappee

+0

質問がもう1つありますか? URLがhttp://web.mydomain.com/hello/の場合、上記のルールは機能します。その場合、html.head.baseタグが期待どおりに変更されました。しかし、リクエストURLがhttp://web.mydomain.com/hello/whateverであれば、html.head.baseタグには元のコンテンツが含まれています。それは変更されません。どうして? – zappee

+0

あなたは何をあなたの設定に正確に入れましたか? Locationディレクティブは、Locationディレクティブの範囲を、Locationの後のパスで始まるURLに制限します。したがって、2番目のURLが異なる場合は、意味があります。そうでなければ、何が起こっているのか分かりません。 Locationディレクティブを削除すると問題は解決するはずですが、元の回答で述べたパフォーマンスの低下を最小限に抑えることをお勧めします。 – oneton

関連する問題