2016-11-18 68 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/