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

在Apache上使用Brotli提供预压缩内容,apache,include,compression,virtualhost,brotli,Apache,Include,Compression,Virtualhost,Brotli,我已经通过easyapache 4在我的WHM服务器上安装了mod_brotli-html、css、js文件等都被压缩 然后我在非社会文件中发现了这个- 此后,我将其添加到WHM(Post_VirtualHost_global.conf)中的Post VirtualHost include文件中,而不是htaccess,因为我希望它是服务器范围的 如何验证这是否正常工作,以及是否确实为预压缩文件提供服务?我还没有找到任何可以说的东西,我只能确认brotli压缩正在使用中。无论是否包含,CPU负载

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

然后我在非社会文件中发现了这个-

此后,我将其添加到WHM(Post_VirtualHost_global.conf)中的Post VirtualHost include文件中,而不是htaccess,因为我希望它是服务器范围的

如何验证这是否正常工作,以及是否确实为预压缩文件提供服务?我还没有找到任何可以说的东西,我只能确认brotli压缩正在使用中。无论是否包含,CPU负载都非常接近,因此我怀疑它可能无法为下次保存压缩文件

这是虚拟主机,包括:

<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>
因此,如果有人能帮我弄清楚如何确认文件是否已预压缩,那就太好了


编辑:我认为我的文件没有被预压缩。有人对此有进一步的信息吗?我在akk上找不到任何其他帖子或文档,只需暂时删除对
/etc/apache2/conf.2/brotli.conf
的引用并重新启动Apache,您应该会看到预压缩的brotli文件仍然使用brotli压缩,而动态压缩文件则使用brotli压缩(例如,HTML、CSS或JS,其中不存在预压缩文件)现在完全不压缩。

要配置Apache以提供预压缩的Brotli文件,请执行以下操作:

  • 确保brotli压缩文件位于相应文件夹中正常文件的旁边。例如,如果您有一个文件/var/www/html/index.html,则还应该有/var/www/html/index.html.br

  • 将以下内容添加到右侧VirtualHost配置中:

  • RewriteCond%{HTTP:Accept Encoding}br
    RewriteCond%{DOCUMENT\u ROOT}/%{REQUEST\u FILENAME}.br-f
    重写规则^(.*)$$1.br[L]

    <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>
    
    重新启动apache2,点击URL,然后在apache错误日志中搜索重写语句

    tail -f /var/log/apache2/error.log | grep '[rewrite'
    

    我参加聚会迟到了,但在我通过Apache的Brotli速成课程中,OP是不可能的

    Apache文档展示的是如何正确地为预压缩的文件提供服务,因此出现了文本:“如果它们存在”

    为了更好地理解这一点,我在搜索中收集到的信息表明,Apache实际上无法预压缩文件,这必须通过Apache范围之外的二进制或扩展来完成

    Apache mod_brotli为您所做的是动态地压缩发送的请求。对于OP,使用cPanel,如果您启用mod_brotli,EasyApache4会添加必要的位来服务并将AddOutputFilterByType中概述的文件压缩为brotli。同样,这些是动态服务的。动态生成和服务。据我所知,这些缓存在内存中,而不是磁盘上

    启用mod_brotli是启用brotli的简单方法,但是,由于必须严格压缩通过Apache的所有请求会带来开销和性能影响,因此最好对作为OP所需的文件进行预压缩。我在一个博客上看到他们讨论了这一点,动态与静态的区别是或者使用静态预压缩文件,但是,如果您有一个小站点,或者可能有一个非常强大的托管平台,那么动态服务可能对您很好

    如果我没有弄错的话,如果你能找到一种方法来预压缩.br文件,你甚至不需要启用mod_brotli来提供预压缩的.br文件

    下面是一个使用PHP预压缩文件的示例:


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

    很抱歉延迟,我尝试了此操作,但浏览器没有收到压缩内容。您知道我的配置有什么问题吗?这对我也不起作用,我知道我不认为这些文件是预压缩的。你有什么进一步的想法吗?我想你的问题是如何检查你的内容是否是从预压缩的brotli文件中提供的。如果这不是你的问题-你是否试图知道正确的apache配置来提供预压缩的brotli文件?很抱歉,回答晚了。看起来les不是服务器预压缩的。因此,是的,我现在会寻找合适的配置来提供预压缩文件。感谢Sok,已经更新了我的答案。请查看上面响应中的“配置Apache以提供预压缩Brotli文件”部分。
    <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>
    
    LogLevel alert rewrite:trace6
    
    tail -f /var/log/apache2/error.log | grep '[rewrite'