使用别名和反向代理时 Apache 2.4 压缩不起作用

Apache 2.4 compression not working when using alias and reverse proxy

问题: 我有一个用于提取静态数据的 url 子路径的别名目录。我可以把它 gzip 压缩就好了。但是,当我向其他路径添加代理并为我的静态数据添加例外时,压缩停止。

环境

httpd.conf

中的按键配置
<Directory "${SRVROOT}/static">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

# I have used FilterProvider as well an know this just does javascript at the moment
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript
SetOutputFilter DEFLATE

<IfModule alias_module>
    Alias "/static" "${SRVROOT}/static"
    ScriptAlias /cgi-bin/ "${SRVROOT}/cgi-bin/"
</IfModule>

使用此配置和 SRVROOT 下的“static”文件夹,我放置了一个文件 bundle.js(3M 数据).在 http://localhost/static/bundle.js 轮询这个文件给我 600K 的 gzip 压缩下载。一切顺利

现在进行更改。应用程序的默认路径需要反向代理到另一个应用程序,而 apache 只是提供静态内容。

<IfModule proxy_html_module>
    Include conf/extra/proxy-html.conf
</IfModule>

extra/proxy-html.conf 文件内容

#default proxy stuff above...
ProxyRequests off
ProxyPass / http://localhost:5000/
#ProxyPass /static/ /
ProxyHTMLURLMap http://localhost:5000/ /

<Location />
        ProxyPassReverse /
        ProxyHTMLEnable On
        ProxyHTMLURLMap  /      /
        RequestHeader    unset  Accept-Encoding
</Location>

<Location /static/ >
    ProxyPass !
</Location>

这仍然允许我访问我的静态数据,只是现在没有进行 gzip 压缩。我不知道这是不是 apache 中的错误,或者是否有更好的配置方法。

这是我的要求:

RequestHeader unset Accept-Encoding 似乎正在渗透到其他 Location 定义中。这似乎应该 而不是 是预期的行为。该问题似乎有两种解决方案。

  1. 移除 ProxyHTMLURLMapRequestHeader unset Accept-Encoding 因为这需要解压内容 进行 url 重写。
  2. 膨胀和收缩内容。我还没有确定这会膨胀和缩小服务器上的静态内容。我提到这个的唯一原因是因为 Accept-Encoding 的使用似乎渗入了静态部分。 -- 还不确定如何测试它。

移除 ProxyURLMap 的示例

ProxyRequests off
ProxyPass / http://localhost:5000/
ProxyPassReverse / http://localhost:5000/

<Location /static/ >
    ProxyPass !
</Location>

#Do not use this anymore
#<Location />
#        ProxyPassReverse /
#        ProxyHTMLEnable On
#        ProxyHTMLURLMap  /      /
#        RequestHeader    unset  Accept-Encoding
#</Location>

使用 INFLATE;DEFLATE 的示例

ProxyRequests off
ProxyPass / http://localhost:5000/
ProxyPassReverse / http://localhost:5000/

<Location />
        ProxyPassReverse /
        ProxyHTMLEnable On
        ProxyHTMLURLMap  /      /
        SetOutputFilter INFLATE;DEFLATE
</Location>

<Location /static/ >
    ProxyPass !
</Location>