首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Apache上使用Brotli提供预压缩内容

在Apache上使用Brotli提供预压缩内容
EN

Stack Overflow用户
提问于 2018-04-11 21:16:00
回答 3查看 1.8K关注 0票数 1

我已经安装了mod_brotli在我的WHM服务器上通过easyapache 4- html,css,js文件等都是压缩。

然后我在官方文档中发现了这个-- https://httpd.apache.org/docs/2.4/mod/mod_brotli.html#precompressed

我已经将它添加到我的WHM (post_virtualhost_global.conf)中的Post VirtualHost包含文件中,而不是htaccess,因为我希望它是服务器范围的。

我如何验证这是否正常工作,并确实为预压缩文件提供服务?无论哪种方式,我都没有找到任何东西可以说,我只能确认正在使用brotli压缩。不管有没有include,CPU负载都差不多,所以我怀疑它可能不会保存压缩文件以备下次使用。

这是虚拟主机,包括:

代码语言:javascript
复制
<IfModule mod_headers.c>
  # Serve brotli compressed CSS and JS files if they exist
  # and the client accepts brotli.
  RewriteCond "%{HTTP:Accept-encoding}" "br"
  RewriteCond "%{REQUEST_FILENAME}\.br" "-s"
  RewriteRule "^(.*)\.(js|css)"              "$1\.$2\.br" [QSA]

  # Serve correct content types, and prevent double compression.
  RewriteRule "\.css\.br$" "-" [T=text/css,E=no-brotli:1]
  RewriteRule "\.js\.br$"  "-" [T=text/javascript,E=no-brotli:1]


<FilesMatch "(\.js\.br|\.css\.br)$">
  # Serve correct encoding type.
  Header append Content-Encoding br

  # Force proxies to cache brotli &
  # non-brotli css/js files separately.
  Header append Vary Accept-Encoding
</FilesMatch>
</IfModule>

这是我的/etc/apache2/conf.2/brotli.conf

代码语言:javascript
复制
  <IfModule brotli_module>
  # Compress only a few types
  # https://httpd.apache.org/docs/trunk/mod/mod_brotli.html
  AddOutputFilterByType BROTLI_COMPRESS text/plain text/css text/html application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript

  SetOutputFilter BROTLI_COMPRESS
  SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-brotli


BrotliFilterNote Input instream
BrotliFilterNote Output outstream
BrotliFilterNote Ratio ratio

LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%)' brotli
CustomLog "logs/brotli_log" brotli
</IfModule>

这是/etc/apache2/conf.modules.d/115_mod_brotli.conf

代码语言:javascript
复制
# Enable mod_brotli
LoadModule brotli_module modules/mod_brotli.so

所以,如果有人能帮我弄清楚如何确认这些文件是否是预压缩的,那就太好了。

编辑:我不认为我的文件是预压缩的。有没有人有更多关于这个的信息?我在akk上找不到更多关于它的帖子或文档

EN

回答 3

Stack Overflow用户

发布于 2018-06-20 19:58:30

配置Apache为压缩前的Brotli文件提供服务的

  1. 确保brotli压缩文件存在于相应文件夹中普通文件的旁边。例如,如果您有一个文件/var/www/html/index.html,则还应该将以下内容/var/www/html/index.html.br
  2. Add到正确的VirtualHost configuration:

RewriteCond %{HTTP:Accept-Encoding} br RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME}.br -f RewriteRule ^(.*)$ $1.br [L]

代码语言:javascript
复制
<Files *.js.br>
  AddType "text/javascript" .br
  AddEncoding br .br
</Files>
<Files *.css.br>
  AddType "text/css" .br
  AddEncoding br .br
</Files>
<Files *.svg.br>
  AddType "image/svg+xml" .br
  AddEncoding br .br
</Files>
<Files *.html.br>
  AddType "text/html" .br
  AddEncoding br .br
</Files>

用于检查是否正在提供预压缩的brotli文件的

您可以记录重写,以查看您的重写是否生效。如果这些都在运行,那么您的预压缩的brotli文件将得到服务。在虚拟主机中,添加以下内容:

代码语言:javascript
复制
LogLevel alert rewrite:trace6

重启apache2,点击URL,然后grep重写apache错误日志中的语句。

代码语言:javascript
复制
tail -f /var/log/apache2/error.log | grep '[rewrite'
票数 1
EN

Stack Overflow用户

发布于 2020-11-11 08:37:51

我来晚了,但在我通过阿帕奇的Brotli速成课程中,行动是不可能的。

Apache文档所展示的是如何正确地服务于“如果”文件是预先压缩的,因此文本是:“如果它们存在”。

根据我在搜索中收集到的更好的理解,Apache实际上不能对文件进行预压缩,这必须通过二进制或扩展来完成,这超出了Apache的范围。

Apache mod_brotli为您做的是在发送请求时动态地对其进行压缩。在OP的情况下,使用cPanel,如果您启用了mod_brotli,EasyApache4将添加必要的位来服务和压缩在Brotli中概述的文件。同样,这些服务是动态提供的。动态生成并提供服务。据我所知,它们被缓存在内存中,而不是磁盘上。

启用mod_brotli是启用brotli的一种简单方法,但是,由于必须对流经Apache的所有请求进行字面上的压缩,因此最好将提供服务的文件预先压缩为OP所需的文件。我遇到了一个博客,他们谈到了这一点,动态和静态之间的区别是值得使用静态预压缩文件的,然而,如果你有一个小网站,或者可能是一个非常强大的托管平台,那么动态服务可能对你来说很好。

如果我没记错的话,你甚至不需要启用mod_brotli来服务预压缩的.br文件,如果你能找到一种方法来预压缩它们的话。

下面是一个使用PHP预压缩文件的示例:https://github.com/kjdev/php-ext-brotli

到目前为止,还没有人用可行的方法将文件预压缩为Brotli (因为我也在寻找),但我需要指出的是,Apache不做预压缩,如果你正在寻找一种静态的方式来服务Brotli .br文件,你将不得不继续你的搜索。

票数 1
EN

Stack Overflow用户

发布于 2018-04-11 23:20:15

只需暂时删除对/etc/apache2/conf.2/brotli.conf的引用并重新启动Apache,您应该会看到预压缩的brotli文件仍然使用brotli压缩,而动态压缩文件(例如,HTML,或者CSS或JS,其中不存在预压缩文件)现在根本不压缩。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49776150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档