Squid Web Cache Wiki

Squid Web Cache 文档

🔗 配置 Web 浏览器使用 Squid

当今大多数 Web 浏览器都支持代理,并且可以轻松配置以使用 Squid 服务器作为代理。一些浏览器支持高级功能,例如不应通过代理获取的域或 URL 模式列表,或者 JavaScript 自动代理配置。

有三种方法可以配置浏览器使用 Squid。第一种方法涉及在每个浏览器中手动配置代理。或者,可以将 proxy.pac 文件手动输入到每个浏览器中,以便它下载代理设置(部分自动配置),最后,如果网络配置支持,所有现代浏览器也可以并且实际上已默认配置为完全自动配置自己。

为了最好地使用代理,我们推荐一种多层方法。以下是我们推荐的层,按偏好顺序排列。

我们知道,由于管理员熟悉 NAT、对好处的混淆以及前两层的历史问题,许多网络仅实现此设计的第 3 层和第 4 层。

  1. Web 代理自动检测 (WPAD)(又称 透明配置
    • 浏览器设置为自动检测它们所连接的任何网络的代理。这对于移动用户特别有用。
    • 此层的主要问题是没有正式的 RFC 标准可遵循,因此浏览器会实现和两个单独的 DNS 和 DHCP 系统进行设置。
    • 需要实现 PAC。
  2. 代理自动配置 (PAC)(又称透明代理
    • 作为每台机器配置的备份。
    • 一些系统支持将 PAC 文件明确设置在机器范围的环境中。
  3. 机器范围配置
    • 使用系统范围的环境变量 **http_proxy**(或设置它的 GUI 配置)。大多数操作系统都支持此功能。Windows 是例外,但是 IE 设置以等效的方式使用。
    • 很多软件都支持它。每台机器只设置一次。
    • 一些系统允许将此推送到网络(Windows 使用域策略)
  4. NAT 或 TPROXY 拦截。(又称透明代理
    • 客户端软件无需修改。
    • 安全会大幅降低(会产生几个完整的漏洞家族,代理身份验证消失,对等功能消失)
    • 系统资源和连接可靠性大幅降低
  5. 手动配置.
    • 没有什么比显式手动配置更能带来“它有效”的兴奋感了。然而,为一台机器上的每件软件都这样做非常麻烦。为整个网络这样做在高度多疑的系统之外是不现实的。在此仅作为一种选项提及。
  6. 为了完整起见:最好的底层安全系统通过完全防火墙禁止 Web 流量来支持这些层中的几层。这可以防止用户和机器绕过代理控制点。

🔗 手动浏览器配置

这涉及在每个浏览器中手动指定代理服务器和端口名称。

🔗 Firefox 和 Thunderbird 手动配置

Firefox 和 Thunderbird 的配置方式相同。查看“工具”菜单,“选项”,“常规”,然后是“连接设置”。那里的选项很直观。Firefox 和 Thunderbird 支持手动指定代理服务器、从指定源自动下载 wpad.dat 文件,以及 WPAD 自动检测。

在这种情况下,Thunderbird 使用这些设置来下载电子邮件中的 HTTP 图像。

在这两种情况下,如果您手动配置代理,请确保在“排除代理(No Proxy For)”框中为您的网络添加相关语句。

🔗 Microsoft Internet Explorer 手动配置

从“查看”菜单中选择“选项”。点击“连接”选项卡。勾选“通过代理服务器连接”选项,然后点击“代理设置”按钮。对于您的 Squid 服务器支持的每种协议(默认情况下,HTTP、FTP 和 gopher),在“端口”列中输入 Squid 服务器的主机名或 IP 地址,并将 Squid 服务器的 HTTP 端口号(默认情况下为 3128)填入。对于您的 Squid 不支持的任何协议,请将字段留空。

🔗 Netscape 手动配置

从“选项”菜单中选择“网络首选项”。在“代理”页面上,点击“手动代理配置”旁边的单选按钮,然后点击“查看”按钮。对于您的 Squid 服务器支持的每种协议(默认情况下,HTTP、FTP 和 gopher),在“端口”列中输入 Squid 服务器的主机名或 IP 地址,并将 Squid 服务器的 HTTP 端口号(默认情况下为 3128)填入。对于您的 Squid 不支持的任何协议,请将字段留空。

🔗 Lynx 和 Mosaic 手动配置

对于 Mosaic 和 Lynx,您可以在启动应用程序之前设置环境变量。例如(假设使用 csh 或 tcsh)

% setenv http_proxy http://mycache.example.com:3128/
% setenv gopher_proxy http://mycache.example.com:3128/
% setenv ftp_proxy http://mycache.example.com:3128/

对于 Lynx,您还可以编辑 `lynx.cfg` 文件来配置代理使用。这还有一个额外的好处,可以使系统上的所有 Lynx 用户在不更改每个用户的环境变量的情况下访问代理。例如

http_proxy:http://mycache.example.com:3128/
ftp_proxy:http://mycache.example.com:3128/
gopher_proxy:http://mycache.example.com:3128/

🔗 Opera 2.12 手动配置

作者:Hume Smith

从“首选项”菜单中选择“代理服务器…”选项。勾选您的 Squid 服务器支持的每种协议(默认情况下,HTTP、FTP 和 Gopher),然后输入 Squid 服务器的地址,格式为 hostname:port(例如 mycache.example.com:3128 或 192.0.2.2:3128)。点击“确定”以接受设置。

🔗 部分自动配置

这涉及预先配置浏览器以了解自动配置脚本的位置。

🔗 Netscape 自动配置

Netscape Navigator 的代理配置可以通过 JavaScript 实现自动化(适用于 Navigator 2.0 或更高版本)。从“选项”菜单中选择“网络首选项”。在“代理”页面上,点击“自动代理配置”旁边的单选按钮,然后在文本框中填入您的 JavaScript 代理配置文件 URL。框太小,但文本会向右滚动。

这是 Oskar Pearson 提供的一个示例自动配置文件(链接在底部可供保存)


//Replace each occurrence of company.com with your domain name
//and if you have some kind of intranet system, make sure
//that you put it's name in place of "internal" below.
//
//We also assume that your cache is called "cache.company.com", and
//that it runs on port 8080. Change it down at the bottom.
//
//(C) Oskar Pearson and the Internet Solution (http://www.is.co.za)

function FindProxyForURL(url, host)
{
    //If they have only specified a hostname, go directly.
    if (isPlainHostName(host))
            return "DIRECT";

    //These connect directly if the machine they are trying to
    //connect to starts with "intranet" - ie http://intranet
    //Connect  directly if it is intranet.*
    //If you have another machine that you want them to
    //access directly, replace "internal*" with that
    //machine's name
    if (shExpMatch( host, "intranet*")||
                    shExpMatch(host, "internal*"))
        return "DIRECT";

    //Connect directly to our domains (NB for Important News)
    if (dnsDomainIs( host,"company.com")||
    //If you have another domain that you wish to connect to
    //directly, put it in here
                    dnsDomainIs(host,"sistercompany.com"))
        return "DIRECT";

    //So the error message "no such host" will appear through the
    //normal Netscape box - less support queries :)
    if (!isResolvable(host))
            return "DIRECT";

    //We only cache http, ftp and gopher
    if (url.substring(0, 5) == "http:" ||
                    url.substring(0, 4) == "ftp:"||
                    url.substring(0, 7) == "gopher:")

    //Change the ":8080" to the port that your cache
    //runs on, and "cache.company.com" to the machine that
    //you run the cache on
            return "PROXY cache.company.com:8080; DIRECT";

    //We don't cache WAIS
    if (url.substring(0, 5) == "wais:")
            return "DIRECT";

    else
            return "DIRECT";
}

🔗 Microsoft Internet Explorer

Microsoft Internet Explorer 4.0 及更高版本支持与 Netscape 兼容的 JavaScript 自动代理配置。只需从“查看”菜单中选择“选项”。点击“高级”选项卡。在左下角,点击“自动配置”按钮。在弹出的对话框中填入您的 JavaScript 文件 URL。然后退出 MSIE 并重新启动以使更改生效。MSIE 每次启动时都会重新加载 JavaScript 文件。

🔗 完全自动配置

作者:*Mark Reynolds*

阅读下面的 8 个步骤后,如果您不理解其中任何术语或方法,您可能不应该这样做。实现 wpad 需要您**完全**理解

:warning: 请不要用 Web 服务器或 DNS 问题轰炸 Squid 列表。请咨询您的系统管理员,或对这些主题进行更多研究。

这不是对任何产品或版本的推荐。所有主要的浏览器现在都实现了 WPAD。我认为 WPAD 是一项出色的功能,可以每月节省数小时的生命。

可能还有许多技巧和窍门,希望将来能在本文中详细介绍。例如,`wpad.dat` 文件本身从代理服务器提供,也许使用循环 DNS 设置 WPAD 主机。

我只关注了域名方法,排除了 DHCP 方法。我认为 DNS 方法对大多数人来说可能更容易。我现在不完全理解 WPAD 和 IE5,而且可能永远也不会,但这种方法对我有效。它**可能**对您也有效。

但如果您宁愿就这样试试……

🔗 PAC 文件

创建一个标准的 Netscape 自动代理配置文件。上面提供的示例足以让您开始。无疑,所有其他负载均衡和备份脚本也将正常工作。

将生成的文件存储在方便的 Web 服务器的文档根目录中,命名为 `wpad.dat`(而不是您之前可能做过的 `proxy.pac`)。Andrei Ivanov 指出,如果您想将 wpad.dat 文件存储在其他地方,您应该可以使用 HTTP 重定向。您甚至可以重定向 `wpad.dat` 到 `proxy.pac`。

Redirect /wpad.dat http://example.com/proxy.pac

如果您不做其他任何事情,像 `http://www.example.com/wpad.dat` 这样的 URL 应该会在您的浏览器窗口中显示脚本文本。

在您的 Web 服务器 `mime.types` 文件中插入以下条目。如果您以前做过,可能还会在您的 PAC 文件类型中添加。

application/x-ns-proxy-autoconfig       dat

然后重新启动您的 Web 服务器,以便新的 MIME 类型生效。

🔗 浏览器配置

🔗 Internet Explorer 5

在“工具”,“Internet 选项”,“连接”,“设置”**或**“局域网设置”下,**仅**将“使用自动配置脚本”设置为您新的 `wpad.dat` 文件的 URL。

即 `http://www.example.com/wpad.dat`。

测试所有内容是否符合您的脚本和网络。在这一点奏效之前继续没有意义……

🔗 使用 DNS 进行自动 WPAD

创建/安装/实现一个 DNS 记录,使 `wpad.example.com` 解析到您运行正常工作自动配置脚本的主机。您现在应该可以在步骤 5 中的“自动配置脚本”位置使用 `http://wpad.example.com/wpad.dat`。

最后,回到上面第 5 步中详细介绍的设置屏幕,只选择“自动检测设置”选项,关闭其他所有选项。最好重新启动 IE5,就像您通常对任何 Microsoft 产品所做的那样……然后它应该都能正常工作。至少对我来说是这样。

最后一个可能的问题是“客户端(IE5)使用哪个域名进行 wpad…查找?”它使用控制面板设置中的主机名。它通过将主机名 `wpad` 添加到当前完全限定域名来开始搜索。例如,位于 `a.b.example.com` 的客户端将搜索 `wpad.a.b.example.com` 的 WPAD 服务器。如果找不到,它将删除最底层的域名并重试;例如,它将尝试 `wpad.b.example.com`。IE 5 将在找到 WPAD 服务器或达到最低级域名 `wpad` 时停止搜索。

🔗 使用 DHCP 进行自动 WPAD

您还可以使用 DHCP 为浏览器配置 WPAD。此技术允许您将任何 URL 设置为 PAC URL。对于 ISC DHCPD,请在 `dhcpd.conf` 文件中输入类似以下的行

option wpad code 252 = text;
option wpad "http://www.example.com/proxy.pac";

将主机名替换为您自己服务器的名称或地址。

Ilja Pavkovic 指出,DHCP 模式并非在所有 Internet Explorer 版本上都能可靠工作。查找 `wpad.dat` 的 DNS 名称方法更可靠。

🔗 冗余代理自动配置

作者:*Rodney van den Oever*

使用自动代理脚本有一个讨厌的副作用:如果您启动 Web 浏览器,它将尝试加载自动代理脚本。

如果您的脚本不可用,无论是由于托管脚本的 Web 服务器已关闭,还是您的工作站无法访问 Web 服务器(例如,因为您正在使用笔记本电脑离线工作,只想阅读以前保存的 HTML 文件),您将根据您使用的浏览器收到不同的错误。

Netscape 浏览器将在超时后返回错误(之后它会尝试查找站点 `www.proxy.com`,如果您的脚本名为 `proxy.pac`)。

另一方面,Microsoft Internet Explorer 甚至不会启动,没有窗口显示,大约 1 分钟后才会显示一个窗口,询问您是否继续进行/不进行代理配置。

关键是您的工作站始终需要能够找到代理脚本。我通过将脚本托管在两个 Web 服务器上(实际上是代理服务器本身上的 Apache Web 服务器)并向我的主名称服务器添加以下记录来实现了一些额外的冗余

proxy   IN      A       192.0.2.1 ; IP address of proxy1
        IN      A       192.0.2.2 ; IP address of proxy2

客户端只是引用 `http://proxy/proxy.pac`。此脚本看起来像这样

function FindProxyForURL(url,host)
{
// Hostname without domainname or host within our own domain?
// Try them directly:
// http://www.domain.com actually lives before the firewall, so
// make an exception:
if ((isPlainHostName(host)||dnsDomainIs( host,".domain.com")) &&
        !localHostOrDomainIs(host, "www.domain.com"))
        return "DIRECT";

// First try proxy1 then proxy2. One server mostly caches '.com'
// to make sure both servers are not
// caching the same data in the normal situation. The other
// server caches the other domains normally.
// If one of 'm is down the client will try the other server.
else if (shExpMatch(host, "*.com"))
        return "PROXY proxy1.domain.com:8080; PROXY proxy2.domain.com:8081; DIRECT";
return "PROXY proxy2.domain.com:8081; PROXY proxy1.domain.com:8080; DIRECT";
}

我确保每个客户端域都有适当的“proxy”条目。客户端通过 DHCP 自动配置为使用两个名称服务器。

🔗 在哪里可以找到有关 PAC 的更多信息?

有一个社区网站解释 PAC 的特性和功能,网址为 http://findproxyforurl.com/

🔗 如何告诉 Squid 为 FTP URL 使用特定用户名?

有几种方法可以通过 Squid 进行 FTP 登录。

`ftp_user` 指令将接受将在**所有** FTP 登录请求中默认使用的用户名或用户名:密码值。它将被任何其他可用的登录凭据覆盖。

最强的凭据(覆盖所有其他凭据)是添加到 URL 本身的凭据。

在 URL 的主机部分插入您的用户名,例如

ftp://joecool@ftp.example.com/

Squid(从 2.6 到 3.0)将使用默认密码。

或者,您可以在 URL 本身指定用户名和密码

ftp://joecool:secret@ftp.example.com/

但是,我们肯定不建议这样做,因为任何人都可以很容易地看到或获取您的密码。

Squid-3.1 开始,将尝试上述方法,然后将使用常规的 HTTP 基本身份验证来恢复新凭据。如果需要登录但未提供,将出现一个常规网站登录弹出框,要求输入凭据。

回到 FAQ 索引

导航: 网站搜索网站页面分类🔼 向上