【问题标题】:Apache 2.4 compression not working when using alias and reverse proxy使用别名和反向代理时 Apache 2.4 压缩不起作用
【发布时间】:2019-03-24 01:11:10
【问题描述】:

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

环境

  • Windows x64
  • Apache 2.4

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>

额外的/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 中的一个错误,或者是否有更好的方法来配置它。

这是我的要求:

  • 我无法更改 url 的路径(静态是它所在的位置,并且根 url 内容被反向代理
  • 我需要压缩
  • 部署到一个根文件夹,但实际上并未命名为 static,因此我将(在本例中)static 路由到 {some directory} /static 实际上是 http://localhost/static/* 到 dist 文件夹。

【问题讨论】:

    标签: apache gzip alias reverse-proxy


    【解决方案1】:

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

    1. 删除 ProxyHTMLURLMap 和 RequestHeader 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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多