使用别名和反向代理时 Apache 2.4 压缩不起作用
Apache 2.4 compression not working when using alias and reverse proxy
问题:
我有一个用于提取静态数据的 url 子路径的别名目录。我可以把它 gzip 压缩就好了。但是,当我向其他路径添加代理并为我的静态数据添加例外时,压缩停止。
环境
- Windowsx64
- 阿帕奇 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>
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 中的错误,或者是否有更好的配置方法。
这是我的要求:
- 我无法更改 url 的路径(静态是它所在的位置,根目录 url 内容被反向代理
- 我需要压缩
- 部署到一个根本没有命名为 static 的根文件夹,所以事实上我路由(在这个例子中)static {某些目录}/static 实际上 http://localhost/static/* 到 dist 文件夹。
RequestHeader unset Accept-Encoding 似乎正在渗透到其他 Location 定义中。这似乎应该 而不是 是预期的行为。该问题似乎有两种解决方案。
- 移除 ProxyHTMLURLMap 和 RequestHeader unset Accept-Encoding 因为这需要解压内容
进行 url 重写。
- 膨胀和收缩内容。我还没有确定这会膨胀和缩小服务器上的静态内容。我提到这个的唯一原因是因为 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>
问题: 我有一个用于提取静态数据的 url 子路径的别名目录。我可以把它 gzip 压缩就好了。但是,当我向其他路径添加代理并为我的静态数据添加例外时,压缩停止。
环境
- Windowsx64
- 阿帕奇 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>
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 中的错误,或者是否有更好的配置方法。
这是我的要求:
- 我无法更改 url 的路径(静态是它所在的位置,根目录 url 内容被反向代理
- 我需要压缩
- 部署到一个根本没有命名为 static 的根文件夹,所以事实上我路由(在这个例子中)static {某些目录}/static 实际上 http://localhost/static/* 到 dist 文件夹。
RequestHeader unset Accept-Encoding 似乎正在渗透到其他 Location 定义中。这似乎应该 而不是 是预期的行为。该问题似乎有两种解决方案。
- 移除 ProxyHTMLURLMap 和 RequestHeader unset Accept-Encoding 因为这需要解压内容 进行 url 重写。
- 膨胀和收缩内容。我还没有确定这会膨胀和缩小服务器上的静态内容。我提到这个的唯一原因是因为 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>