2016-10-19 10 views
0

私はApacheのhttpサーバで設定したプロキシリライトディレクティブで配信されるレスポンスヘッダを変更する必要があります。問題は、ホストがからも、いくつかの静的ファイルを提供しなければならないことであるしかしapache httpサーバでのプロキシの書き換えとヘッダ操作の併用

<VirtualHost ...> 
    ... 
    # unconditionally modify headers 
    Header set Content-Type "text/html" 
    Header unset Content-Disposition 
    Header unset Content-Transfer-Encoding 
    # fetch goal from backend 
    RewriteEngine on 
    SSLProxyEngine on 
    RewriteRule^https://back.example.org/goal [P] 
    ... 
    # prevent all access to the file system 
    DocumentRoot /var/www/html 
    <Directory /var/www/html> 
    Options none 
    Order deny,allow 
    Deny from All 
    </Directory> 
</VirtualHost> 

物事はその簡単な例で正常に動作し、それは無条件にのためにバックエンドサーバからすべてのの要求を、目標を実現しますヘッダーがでない別のバックエンドサーバーでを変更する必要があります。

<VirtualHost ...> 
    ... 
    # modify headers only for /goal 
    <Location /goal> 
    Header set Content-Type "text/html" 
    Header unset Content-Disposition 
    Header unset Content-Transfer-Encoding 
    </Location> 
    # fetch static exceptions from static backend 
    RewriteEngine on 
    SSLProxyEngine on 
    RewriteRule static-1$ https://static.example.org/static-1 [P] 
    RewriteRule static-2$ https://static.example.org/static-2 [P] 
    RewriteRule static-3$ https://static.example.org/static-3 [P] 
    # two step rewrite and proxy to fetch goal from backend and get the headers modified 
    RewriteRule ^/goal$ https://back.xample.org/goal [P] 
    RewriteRule^/goal [PT,N] 
    ... 
    # prevent all access to the file system 
    DocumentRoot /var/www/html 
    <Directory /var/www/html> 
    Options none 
    Order deny,allow 
    Deny from All 
    </Directory> 
</VirtualHost> 

しかしこれはHTTPステータス403

で私の葉:だから私は2番目のステップでプロキシに、その後、最初のステップで仮想目標に書き換えるヘッダ修正規則を適用し、しようとする試みを行いました

私は詳細な洞察のためにリライトロギングを使用しましたが、最初の手順で要求が/goalに書き換えられ、URI-to-filehandler APIが再び呼び出され、要求が単に403を説明するファイルシステムにマッピングされます。次のラウンドでは、2回目の書き換えステップが適用されます。プロキシステップですか?

それとも、私の実際の質問:どのように私はヘッダーいる可能変更はキャッチオール書き換えプロキシルールに適用されますが結果として生じるが、ヘッダの変更からいくつかの明示的な例外を定義しますか?私はどちらの答えもコメントを受信して​​から[OK]を

答えて

0

は、(それを、なぜ私の質問のほとんどは唯一の沈黙の壁にぶつかること?)...、少しのmiRを突きました。

作業溶液は、静的コンテンツの例外のために負のLocationMatchディレクティブを使用することです。セクシーな、しかし、動作していない:

<VirtualHost ...> 
    ... 
    RewriteEngine on 
    SSLProxyEngine on 
    # fetch static exceptions from static backend 
    RewriteRule static-1$ https://static.example.org/static-1 [P] 
    RewriteRule static-2$ https://static.example.org/static-2 [P] 
    RewriteRule static-3$ https://static.example.org/static-3 [P] 
    # proxy goal from backend 
    RewriteRule^https://back.xample.org/goal [P] 
    ... 
    # modify headers, but _not_ for static exceptions 
    <LocationMatch "^/(?!static)"> 
    Header set Content-Type "text/html" 
    Header unset Content-Disposition 
    Header unset Content-Transfer-Encoding 
    </LocationMatch> 
    ... 
    # prevent all access to the file system 
    DocumentRoot /var/www/html 
    <Directory /var/www/html> 
    Options none 
    Order deny,allow 
    Deny from All 
    </Directory> 
</VirtualHost> 
関連する問題