2016-11-18 162 views
3

我正在嘗試將Apache Web服務器(A)的反向代理配置到不同計算機(B)上的另一個Apache Web服務器。Apache Proxying導致ERR_CONTENT_DECODING_FAILED錯誤

隨着目前我使用的是我能夠訪問位於服務器B就好像它是在服務器上的Web頁面配置,但要求對一些資產不斷產生ERR_CONTENT_DECODING_FAILED(至少在鉻)。 當我使用簡單重定向而不是代理時,這不會發生。

我已經通過請求和響應頭瀏覽,似乎一切正常與文件傳輸:

請求:

GET /app1/assets/css/vendor.min.css?1470017050 HTTP/1.1 
Host: some.host.address 
... 
Accept: text/css,*/*;q=0.1 
Accept-Encoding: gzip, deflate, sdch 

響應:

HTTP/1.1 200 OK 
... 
Vary: Accept-Encoding 
Content-Encoding: gzip 
Content-Type: text/css;charset=utf-8 
Connection: Keep-Alive 
Transfer-Encoding: chunked 

我用下面的配置上服務器 - 答:

ProxyPreserveHost on 
ProxyPass "/app1/" "http://some.host.address:8080/app1/" 
ProxyPassReverse "/app1/" "some.host.address:8080/app1/" 
ProxyHTMLURLMap "http://some.host.address:8080" "/app1" 

<Location /app1/> 
     ProxyPassReverse /app1/ 
     ProxyHTMLEnable On 
     ProxyHTMLURLMap//app1/ 
</Location> 

回答

2

當後端服務器使用壓縮並且代理服務器在重寫期間不處理縮小的內容時,會發生ERR_CONTENT_DECODING_FAILED錯誤。

我在this wiki以及Marco Balestra對mod_proxy_html documentation的評論中發現了有用的信息。

我試着不成功以下(改寫前膨脹):

ProxyHTMLEnable On 
SetOutputFilter INFLATE;proxy-html;DEFLATE 
ProxyHTMLURLMap//app1/ 

然後閱讀評論後,我修改了這個(要正確處理字符編碼):

ProxyHTMLEnable On 
RequestHeader unset Accept-Encoding 
ProxyHTMLCharsetOut * 
ProxyHTMLURLMap//app1/ 
ProxyHTMLURLMap /app1/ /app1/