我已经通过easyapache 4在我的WHM服务器上安装了mod_brotli - html,css,js文件等都被压缩了。
然后我在社交文档中遇到了这个问题 - https://httpd.apache.org/docs/2.4/mod/mod_brotli.html#precompressed
我已将此添加到WHM中的Post VirtualHost包含文件(post_virtualhost_global.conf)而不是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>
这是我的/etc/apache2/conf.2/brotli.conf
<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
# Enable mod_brotli
LoadModule brotli_module modules/mod_brotli.so
因此,如果有人可以帮我弄清楚如何确认这些文件是否已预压缩,那将会非常棒。
编辑:我不认为我的文件是预先压缩的。有没有人对此有任何进一步的信息?我在akk上找不到任何进一步的帖子或文档
答案 0 :(得分:1)
我参加聚会很晚,但是在Brotli通过Apache崩溃的过程中,OP不可能实现。
Apache文档显示的是如何正确地为文件“ if”提供预压缩的文件,从而提供文本:“ if它们存在”。
根据我搜集的内容以更好地理解这一点,Apache实际上无法对其进行预压缩,这必须通过超出Apache范围的二进制文件或扩展名来实现。
Apache mod_brotli为您执行的操作是在发送请求时动态地动态压缩请求。对于OP,使用cPanel,如果启用了mod_brotli,则EasyApache4将添加必要的位,以服务和压缩 AddOutputFilterByType 中概述的文件作为Brotli。同样,这些是动态提供的。即时生成并投放。据我所知,它们被缓存在内存中而不是磁盘上。
启用mod_brotli是启用brotli的简便方法,但是由于必须压缩所有流经Apache的请求的开销和性能,因此最好预先压缩用作OP的文件。我遇到了一个博客,他们谈论这个问题,动态与静态之间的区别值得使用静态预压缩文件,但是,如果您的网站很小,或者是一个真正强大的托管平台,那么动态服务可能就可以了你。
如果我没记错的话,只要您能找到一种方法来预压缩.br,您甚至不需要启用mod_brotli即可提供预压缩的.br文件。
以下是使用PHP预压缩文件的示例:https://github.com/kjdev/php-ext-brotli
到目前为止,还没有人以可行的方式来回答OP,以将文件预压缩为Brotli(因为我也在搜索此文件),但我需要指出的是Apache并未进行预压缩如果您要寻找一种静态的方式来提供Brotli .br文件,就必须继续搜索。
答案 1 :(得分:0)
暂时删除对/etc/apache2/conf.2/brotli.conf
的引用并重新启动Apache,您应该会看到预压缩的brotli文件仍然使用brotli压缩,而动态压缩文件(例如HTML或CSS或JS,其中预压缩文件执行现在还没有压缩。
答案 2 :(得分:0)
要将Apache配置为提供预压缩的Brotli文件:
确保brotli压缩文件位于相应文件夹中的正常文件旁边。例如,如果您有文件/var/www/html/index.html,那么也应该有/var/www/html/index.html.br
将以下内容添加到正确的VirtualHost配置中:
RewriteCond %{HTTP:Accept-Encoding} br
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME}.br -f
RewriteRule ^(.*)$ $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>
要检查是否提供了预压缩的brotli文件:
您可以记录重写以查看您的重写是否正在进行。如果这些操作有效,则将提供您的预压缩brotli文件。在您的虚拟主机中,添加以下内容:
LogLevel alert rewrite:trace6
重新启动apache2,点击您的URL,然后grep在您的apache错误日志中重写语句
tail -f /var/log/apache2/error.log | grep '[rewrite'