Squid Web Cache Wiki

Squid Web Cache 文档

🔗 功能:存储 URL 重写

🔗 详细信息

此功能的主要重点是支持缓存各种 CDN 提供的、将相同资源/内容映射到多个位置的内容。最初,我将目标定为 Google 内容 - Google Earth、Google 地图、Google 视频、Youtube - 但相同的技术也可用于缓存 Akamai 等 CDN 的类似内容(例如“Microsoft Updates”。)

Squid-2.HEAD 的当前更改通过一系列结构性更改实现了此功能

🔗 Squid 配置

首先,您需要确定要发送到存储 URL 重写器的 URL。

acl store_rewrite_list dstdomain mt.google.com mt0.google.com mt1.google.com mt2.google.com
acl store_rewrite_list dstdomain mt3.google.com
acl store_rewrite_list dstdomain kh.google.com kh0.google.com kh1.google.com kh2.google.com
acl store_rewrite_list dstdomain kh3.google.com
acl store_rewrite_list dstdomain kh.google.com.au kh0.google.com.au kh1.google.com.au
acl store_rewrite_list dstdomain kh2.google.com.au kh3.google.com.au

# This needs to be narrowed down quite a bit!
acl store_rewrite_list dstdomain .youtube.com

storeurl_access allow store_rewrite_list
storeurl_access deny all

然后,您需要配置一个重写器辅助程序。

storeurl_rewrite_program /Users/adrian/work/squid/run/local/store_url_rewrite

然后,要缓存 Google 地图/等内容,您需要更改默认设置,以便带有“?”的 URL 不会自动变得不可缓存。搜索您的配置并删除这两行

#We recommend you to use the following two lines.
acl QUERY urlpath_regex cgi-bin \?
cache deny QUERY

确保检查配置文件中的 cache 和 no_cache 指令;您需要禁用它们,并在适用的地方使用 refresh_patterns 来告诉 Squid 不要缓存什么!

然后,在您的 refresh_pattern 部分的底部添加这些刷新模式。

refresh_pattern -i (/cgi-bin/|\?)   0       0%      0
refresh_pattern .                   0       20%     4320

这些规则确保您不会尝试缓存 cgi-bin 和 ? URL,除非明确提供了过期信息。确保不要在“refresh_pattern .”行之后添加规则;refresh_pattern 条目按顺序评估,第一个匹配项将被使用!最后一个条目必须是“.”条目!

🔗 存储 URL 重写辅助程序

这是我一直在使用的

#!/usr/bin/perl
$| = 1;
while (<>) {
        chomp;
        # print STDERR $_ . "\n";
        if (m/kh(.*?)\.google\.com(.*?)\/(.*?) /) {
                print "http://keyhole-srv.google.com" . $2 . ".SQUIDINTERNAL/" . $3 . "\n";
                # print STDERR "KEYHOLE\n";
        } elsif (m/mt(.*?)\.google\.com(.*?)\/(.*?) /) {
                print "http://map-srv.google.com" . $2 . ".SQUIDINTERNAL/" . $3 . "\n";
                # print STDERR "MAPSRV\n";
        } elsif (m/^http:\/\/([A-Za-z]*?)-(.*?)\.(.*)\.youtube\.com\/get_video\?video_id=(.*) /) {
                # http://lax-v290.lax.youtube.com/get_video?video_id=jqx1ZmzX0k0
                print "http://video-srv.youtube.com.SQUIDINTERNAL/get_video?video_id=" . $4 . "\n";
        } else {
                print $_ . "\n";
        }
}

一个简单且非常快的重写器,名为 SQUIRM,也值得一看,它使用 regex 库进行模式匹配。

一个更快、功能稍多一点的重写器是 jesred

🔗 我如何制作自己的?

辅助程序必须从标准输入读取 URL(每行一个),并在标准输出写入重写的 URL 或空行。Squid 会在 URL 之后写入附加信息,重定向器可以使用这些信息来做出决定。

从 Squid 接收的输入行

[channel-ID] URL [key-extras]

返回给 Squid 的结果行

[channel-ID] [result] [kv-pair] [URL]

:information_source: 结果字段仅被 Squid-3.4 及更新版本接受。

:information_source: 此辅助程序返回的 kv-pair 可以通过 %note logformat 代码进行日志记录。

类别:功能

导航:站点搜索站点页面类别🔼 向上