🔗 配置 Web 浏览器使用 Squid
当今大多数 Web 浏览器都支持代理,并且可以轻松配置以使用 Squid 服务器作为代理。一些浏览器支持高级功能,例如不应通过代理获取的域或 URL 模式列表,或者 JavaScript 自动代理配置。
有三种方法可以配置浏览器使用 Squid。第一种方法涉及在每个浏览器中手动配置代理。或者,可以将 proxy.pac 文件手动输入到每个浏览器中,以便它下载代理设置(部分自动配置),最后,如果网络配置支持,所有现代浏览器也可以并且实际上已默认配置为完全自动配置自己。
🔗 推荐的网络配置
为了最好地使用代理,我们推荐一种多层方法。以下是我们推荐的层,按偏好顺序排列。
我们知道,由于管理员熟悉 NAT、对好处的混淆以及前两层的历史问题,许多网络仅实现此设计的第 3 层和第 4 层。
-
Web 代理自动检测 (WPAD)(又称 透明配置)
- 浏览器设置为自动检测它们所连接的任何网络的代理。这对于移动用户特别有用。
- 此层的主要问题是没有正式的 RFC 标准可遵循,因此浏览器会实现和两个单独的 DNS 和 DHCP 系统进行设置。
- 需要实现 PAC。
-
代理自动配置 (PAC)(又称透明代理)
- 作为每台机器配置的备份。
- 一些系统支持将 PAC 文件明确设置在机器范围的环境中。
- 机器范围配置
- 使用系统范围的环境变量 **http_proxy**(或设置它的 GUI 配置)。大多数操作系统都支持此功能。Windows 是例外,但是 IE 设置以等效的方式使用。
- 很多软件都支持它。每台机器只设置一次。
- 一些系统允许将此推送到网络(Windows 使用域策略)
-
NAT 或 TPROXY 拦截。(又称透明代理)
- 客户端软件无需修改。
- 安全会大幅降低(会产生几个完整的漏洞家族,代理身份验证消失,对等功能消失)
- 系统资源和连接可靠性大幅降低
-
手动配置.
- 没有什么比显式手动配置更能带来“它有效”的兴奋感了。然而,为一台机器上的每件软件都这样做非常麻烦。为整个网络这样做在高度多疑的系统之外是不现实的。在此仅作为一种选项提及。
- 为了完整起见:最好的底层安全系统通过完全防火墙禁止 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 需要您**完全**理解
- Web 服务器的安装和修改。
- Squid 代理服务器(或其他)的安装等。
- 域名系统维护等。
请不要用 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 索引
导航: 网站搜索、网站页面、分类、🔼 向上