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

时间:2019-03-24 01:11:10

标签: apache gzip alias reverse-proxy

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

环境

  • Windows x64
  • Apache 2.4

httpd.conf中的密钥配置

<!DOCTYPE html>
<html>

<style>

.item {
    flex: 1 1 25%;
    margin: 20px 10px;
    text-align: center;
}

.container {        
    padding: 60px;
    display: flex;
    flex-wrap: wrap;
    align-items: flex-start;
}

</style>
<head>

<title>Page Title</title>
</head>
<body>

<div class="container">

    <div class="item">
      <img src="../photos/example.jpg" alt="image for testing">
    </div>

    <div class="item">
      <img src="../photos/example.jpg" alt="image for testing">
    </div>

    <div class="item">
      <img src="../photos/example.jpg" alt="image for testing">
    </div>

    <div class="item">
      <img src="../photos/example.jpg" alt="image for testing">
    </div>

    <div class="item">
      <img src="../photos/example.jpg" alt="image for testing">
    </div>

    <div class="item">
      <img src="../photos/example.jpg" alt="image for testing">
    </div>

  </div>

</body>
</html>

使用此配置和SRVROOT下的“ static ”文件夹,我放置了一个文件 bundle.js (3M数据)。在http://localhost/static/bundle.js上轮询此文件可以通过gzip压缩为我提供600K的下载量。一切都好

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

<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>

extra / proxy-html.conf文件内容

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

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

这是我的要求:

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

1 个答案:

答案 0 :(得分:0)

RequestHeader未设置Accept-Encoding 似乎正在渗入另一个Location定义。看来是预期的行为。这个问题似乎有两种解决方法。

  1. 删除 ProxyHTMLURLMap RequestHeader未设置接受编码 ,因为这需要解压缩内容 进行网址重写。
  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>