Apache 代理导致 ERR_CONTENT_DECODING_FAILED 错误

标签 apache configuration assets reverse-proxy decoding

我正在尝试配置从 Apache Web 服务器 (A) 到另一台机器 (B) 上的另一个 Apache Web 服务器的反向代理。

通过我目前使用的配置,我可以访问位于服务器 B 上的网页,就像在服务器 A 上一样,但是对某些 Assets 的请求不断导致 ERR_CONTENT_DECODING_FAILED (至少在 Chrome )。
当我使用简单重定向而不是代理时,这不会发生。

我浏览了请求和响应 header ,似乎文件传输一切正常:

要求:

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

我在服务器 A 上使用了以下配置:
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>

最佳答案

当后端服务器使用压缩并且代理服务器在重写期间不处理压缩的内容时,会发生 ERR_CONTENT_DECODING_FAILED 错误。

我在 this wiki 中找到了有用的信息以及 mod_proxy_html documentation .

我尝试了以下成功(重写前膨胀):

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

然后在阅读了 mod_proxy_html 页面上的(现已删除)评论后,我修改了这个(应该正确处理字符编码):
ProxyHTMLEnable On
RequestHeader unset Accept-Encoding
ProxyHTMLCharsetOut *
ProxyHTMLURLMap / /app1/
ProxyHTMLURLMap /app1/ /app1/

关于Apache 代理导致 ERR_CONTENT_DECODING_FAILED 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40683850/

相关文章:

apache - Docker:将子域直接定向到特定容器

ruby-on-rails - 使用Passenger 和Apache : Unexpected error in mod_passenger: Cannot connect to Unix socket Permission denied (errno=13) 部署Rails 时出错

php - Bitnami Wampstack : PHP caching requires server restart

apache - (还有另一种)通过.htaccess中的重写方式删除www的漂亮方法吗?

c# - MEF - 我是否需要实现 IPartImportsSatisfiedNotification

c# - 如何将 Untiy 配置从 1.2.* 转换为 2.0.*

c# - 是否有等效于 C# 项目的 "Property Manager"(用于通用项目设置)?

image - DecorationImage 不显示图像 - Flutter

angular - 构建 Angular 库时包含 Assets

android - 葫芦安卓 : Asset path error when trying to run a test on an APK