🔗 使用 eCAP 为 Squid 添加 GZip/DEFLATE 支持
作者:Yuri Voinov
🔗 目录
由于 Squid 不支持运行时使用 GZip/DEFLATE 进行内容压缩,我们将使用现有的 eCAP 支持以及此处重构和改进的适配器。
注意:由于原作者已长期弃用适配器,请使用重构和改进后的版本。
🔗 用法
此配置对于减少内部流量和下游接口负载非常有用。
🔗 构建 eCAP 库
我们正在为 Squid 3.5.x/4.x.x 使用 v1.0.0 或 v1.0.1 下载链接。由于 API 更改,适配器不再兼容旧的 libecap。
根据您的 Squid 32 位或 64 位版本构建和安装库。
## 32-bit GCC
./configure 'CXXFLAGS=-O2 -m32 -pipe' 'CFLAGS=-O2 -m32 -pipe'
## 64-bit GCC
./configure 'CXXFLAGS=-O2 -m64 -pipe' 'CFLAGS=-O2 -m64 -pipe'
gmake
gmake install-strip
然后,使用 –enable-ecap 编译选项重新构建您的 Squid。为此,您可能需要在 configure 选项中添加 PKG_CONFIG_PATH。
./configure '--enable-ecap' 'PKG_CONFIG_PATH=/usr/local/lib/pkgconfig'
PKG_CONFIG_PATH 指向 libecap 的 pkgconfig 文件。
🔗 构建 squid-ecap-gzip
./configure 'CXXFLAGS=-m32' 'LDFLAGS=-L/usr/local/lib'
or
./configure 'CXXFLAGS=-m64' 'LDFLAGS=-L/usr/local/lib'
make
make install-strip
注意:选择与您的 Squid 相同的 32 位或 64 位构建模式对 eCAP 库和 squid-gzip-ecap 至关重要。
注意:LDFLAGS 应指向 libecap 目录。
🔗 适配器配置
从 1.5.0 版本开始,适配器通过 squid.conf 中的 ecap_service 参数进行配置。
支持的配置参数
maxsize (default 16777216 bytes, i.e. 16 Mb) - maximum compressed file size
level (default is 6, valid range 0-9) - gzip/deflate global compression level
errlogname (default path/filename is /var/log/ecap_gzip_err.log) - arbitrary error log name.
complogname (default path/filename is /var/log/ecap_gzip_comp.log) - arbitrary compression log name.
errlog (default is 0, default path/filename is /var/log/ecap_gzip_err.log) - error log
complog (default is 0, default path/filename is /var/log/ecap_gzip_comp.log) - compression log
注意:errlogname/complogname 应指定完整的路径和文件名。目录应具有代理写入权限。如果文件存在,则会追加内容。如果文件不存在,将创建它。
适配器日志默认禁用。要启用错误日志,请指定 errlog=1。要启用压缩日志,请指定 complog=1。代理必须具有写入权限。
注意:当配置参数的规范有任何错误时,适配器将以默认值启动。如果存在错误日志,则会写入诊断消息。
🔗 Squid 配置文件
像这样粘贴配置文件
ecap_enable on
acl gzipmimes rep_mime_type -i "/usr/local/squid/etc/acl.gzipmimes"
loadable_modules /usr/local/lib/ecap_adapter_gzip.so
ecap_service gzip_service respmod_precache ecap://www.thecacheworks.com/ecap_gzip_deflate [maxsize=16777216] [level=6] [errlog=0] [complog=0] bypass=off
adaptation_access gzip_service allow gzipmimes
以及 acl.gzipmimes 的内容
# Note: single "/" produces error in simulators,
# but works in squid's regex
^application/atom+xml
^application/dash+xml
^application/javascript
^application/json
^application/ld+json
^application/manifest+json
^application/opensearchdescription+xml
^application/rdf+xml
^application/rss+xml
^application/schema+json
^application/soap+xml
^application/vnd.apple.installer+xml
^application/vnd.apple.mpegurl
^application/vnd.geo+json
^application/vnd.google-earth.kml+xml
^application/vnd.mozilla.xul+xml
^application/x-apple-plist
^application/x-javascript
^application/x-mpegurl
^application/x-ns-proxy-autoconfig
^application/x-protobuffer
^application/x-web-app-manifest+json
^application/x-www-form-urlencoded
^application/xop+xml
^application/xhtml+xml
^application/xml
^application/x-yaml
^application/x-cdf
^application/txt
^application/x-sdch-dictionary
^application/x-steam-manifest
^audio/x-mpegurl
^image/svg+xml
^image/x-icon
^text/.*
^video/abst
^video/vnd.mpeg.dash.mpd
最后,重新启动您的 Squid,尽情享受吧。
🔗 注释
出于性能考虑,所有 mime 检查仅在代理级别,适配器外部执行一次。因此,在选择要传递到适配器的 mime 类型时要小心。
此外,HTTP/200 状态现在直接在适配器内部进行检查。因此,此规则
acl HTTP_STATUS_OK http_status 200
adaptation_access gzip_service allow HTTP_STATUS_OK
不再需要。
另外,请小心处理 text/plain mime 类型。出于某些原因,您可能需要将其从 acl 中移除,因为有时纯文本文件可能会异常大,并在解压缩过程中使 CPU 过载。在这种情况下,请指定符合您要求的“maxsize”。
注意:适配器需要 c++11 兼容的 C++ 编译器才能进行构建。
⚠️ Disclaimer: Any example presented here is provided "as-is" with no support
or guarantee of suitability. If you have any further questions about
these examples please email the squid-users mailing list.
类别: ConfigExample
导航:网站搜索、网站页面、类别、🔼 向上