🔗 Windows 上的 Squid
🔗 Squid 能在 Windows 上运行吗?
Squid 可以使用 Cygwin 模拟环境在 Windows 上编译并作为系统服务运行,或者可以使用 MinGW + MSYS 开发环境在 Windows 原生模式下编译。所有现代 Windows 版本都受支持。
2.5 项目移植的原始开发代号是 SquidNT,但在 2.6.STABLE4 发布后,该项目已完成。因此,在谈论 Windows 上的 Squid 时,人们应该始终提及 Squid,而不是旧的 SquidNT 名称。
🔗 已知限制
🔗 不可用功能
- DISKD: 仍需要移植
- 透明代理: 缺少 Windows 非商业拦截驱动程序
- WCCP: 这些功能尚未移植。没有透明代理支持,也就没有必要或用途。
- SMP 支持: UDS 套接字的 Windows 等效功能尚未实现。
- 某些代码段可能会执行阻塞调用。
- 某些外部辅助程序可能无法工作。
- 使用 MinGW 构建时,文件描述符数量硬限制为 2048。
🔗 预编译的二进制包
适用于多种环境的 Squid 可用软件包。
🔗 Squid-4
维护者: Rafael Akchurin, Diladele B.V.
Bug 报告: (仅限安装程序) https://github.com/diladele/squid-windows/issues
Windows 的 MSI 安装程序包可在
🔗 Squid-3.3
Bug 报告: 请参阅 https://cygwin.com/problems.html
Windows 上 Cygwin 环境的二进制包可在
🔗 安装 Squid
🔗 使用 Cygwin 安装
Cygwin 环境的使用与其他 Unix/Linux 环境非常相似,并且必须安装库的 -devel 版本。
默认情况下,Squid 将安装在 /usr/local/squid。如果您希望安装在其他位置,请在编译时参阅 configure 的 --prefix 选项。
现在,添加一个新的 Cygwin 用户(请参阅 Cygwin 用户指南)并将其映射到 SYSTEM,或者创建一个新的 NT 用户,以及一个匹配的 Cygwin 用户,它们将成为 squid 的运行用户。
如果您使用 CYGWIN=ntsec,请阅读有关权限的 Squid FAQ。
现在,配置 cygrunsrv 以选定的用户名作为服务运行 Squid。您可能需要在此处检查权限。
🔗 服务
Windows 服务支持的命令行选项
- -n 开关用于指定 Windows 服务名称。允许多个 Squid 服务实例。如果未使用该开关,则默认为 Squid。所有服务控制操作都使用此开关来识别目标实例。
-
-i 开关用于安装 Windows 服务。可以同时使用 -f 开关为 Squid 服务指定不同的 squid.conf 文件,该文件将存储在 Windows 注册表中。要安装服务,语法如下:
squid -i [-f file] [-n service-name] -
-r 开关将卸载 Windows 服务。使用适当的 -n 开关来确定要删除的服务实例。要卸载服务,语法如下:
squid -r [-n service-name] -
-k 开关不是新的,但需要使用 -n 来定位服务实例。语法如下:
squid -k command [-f file] [-n service-name]
🔗 命令行
要使用 Squid 的原始命令行,必须 **一次性** 使用新的 -O 开关,语法如下:
squid -O cmdline [-n service-name]
如果要指定多个服务命令行选项,请使用引号。只有在使用非默认服务名称时才需要 -n 开关。
请勿在 Windows 2000/XP/2003 服务应用程序中使用“启动参数”。它们特定于 Windows 服务功能,Squid 无法解释和使用它们。
在以下示例中,“squidsvc” Squid 服务的命令行设置为“-D -u 3130”。
squid -O "-u 3130" -n squidsvc
🔗 Windows 上的缓存管理器 CGI
在 Windows 上,缓存管理器可以与 Microsoft IIS 或 Apache 一起使用。可能需要一些特定的配置。
-
IIS 6 (Windows 2003)
- 在 IIS 6.0 中,出于安全原因,默认情况下会拒绝所有 CGI 扩展,因此需要进行以下配置:- 创建 cgi-bin 目录 - 使用读写和 CGI 执行 IIS 权限定义 cgi-bin IIS 虚拟目录,不需要 ASP 脚本。这将自动定义一个 cgi-bin IIS Web 应用程序 - 将 cachemgr.cgi 复制到 cgi-bin 目录,并检查文件权限:IIS 系统帐户和 SYSTEM 必须能够读取和执行该文件 - 在 IIS 管理器中,转到 Web 服务扩展,并添加一个名为“Squid Cachemgr”的新 Web 服务扩展,添加 cachemgr.cgi 文件,并将扩展状态设置为“允许”。
-
Apache: 在 Windows 上,cachemgr.cgi 需要创建临时文件,因此必须指示 Apache 将 TMP 和 TEMP Windows 环境变量传递给 CGI 应用程序。
ScriptAlias /squid/cgi-bin/ "c:/squid/libexec/" <Location /squid/cgi-bin/cachemgr.cgi> PassEnv TMP TEMP Order allow,deny Allow from workstation.example.com </Location>
🔗 配置指南
- Windows 更新
- Active Directory 身份验证
- Kerberos 身份验证
- NTLM 身份验证 这些以及更多通用手册可在 ConfigExamples 部分找到。
🔗 注册表 DNS 查找
在 Windows 平台,如果在 squid.conf 中的 dns_nameservers 选项或 /etc/resolv.conf 文件中没有指定任何值,DNS 名称服务器列表将从 Windows 注册表中获取,静态和动态 DHCP 配置都受支持。
🔗 兼容性说明
- 建议在 Squid 路径中使用“/”字符而不是“\”。
- 带空格的路径(如“C:\Programs Files\Squid”)不受 Squid 支持。
-
当使用 ACL 如“acl aclname acltype “file””时,该文件必须是 DOS 文本格式 (CR+LF),并且必须指定完整的 Windows 路径,例如:
acl blocklist dstdomain "c:/squid/etc/blocked1.txt" - “/dev/null”的 Windows 等效项是“NUL”。
-
Squid 不知道如何运行基于脚本的外部辅助程序,例如 .bat, .cmd, .vbs, .pl 等。因此,在 squid.conf 中必须始终指定解释器路径,例如:
url_rewrite_program c:/perl/bin/perl.exe c:/squid/libexec/redir.pl url_rewrite_program c:/winnt/system32/cmd.exe /C c:/squid/libexec/redir.cmd - 当 Squid 以命令行模式运行时,启动用户帐户必须在该系统上具有管理员特权。
- Windows 2000/XP/2003 服务应用程序中的“启动参数”不能使用。
- 在 Windows Vista 及更高版本上,运行服务安装前必须禁用用户帐户控制 (UAC)。
🔗 编译
configure 选项
- --enable-win32-service
- --enable-default-hostsfile
不受支持的 configure 选项
- --with-large-files: Cygwin 和 MinGW 上都没有合适的构建环境,但 –enable-large-files 可以正常工作。
🔗 使用 Cygwin 编译
要编译 Squid,您需要完全安装 Cygwin。
Cygwin 环境的使用与其他 Unix/Linux 环境非常相似,并且必须安装库的 -devel 版本。
🔗 使用 MinGW 编译
需要从 https://osdn.net/projects/mingw/ 获取最新软件包,并使用 GCC 8 或更高版本的编译器。
此部分需要重写。自 Squid-3.4 以来,此环境未成功构建。
要使用 MinGW 环境编译 Squid,必须安装 MSYS、MinGW 和 msysDTK 软件包。还需要单独下载一些额外的库和工具。
- OpenSSL: Shining Light Productions Win32 OpenSSL
- libcrypt: MinGW packages repository
- db-1.85: TinyCOBOL download area
3.2+ 版本需要更新的 4.6 或更高版本的 libdb。
在编译支持 SSL 的 Squid 之前,需要执行一些操作(以下示例中 OpenSSL 安装在 C:\OpenSSL,MinGW 安装在 C:\MinGW)。
- 将 C:\OpenSSL\lib\MinGW 的内容复制到 C:\MinGW\lib。
- 将 C:\OpenSSL\include\openssl 的内容复制到 C:\MinGW\include\openssl。
- 将 C:\MinGW\lib\ssleay32.a 重命名为 C:\MinGW\lib\libssleay32.a。
像往常一样解压源文件,然后运行:
./configure \
--enable-build-info="Windows (MinGW32)" \
--prefix=c:/squid \
--enable-default-hostsfile=none
make check && make install
Squid 将安装在 c:\squid。如果您希望安装在其他位置,请更改 configure 的 --prefix 选项。
现在,要将 Squid 作为 Windows 系统服务运行,请运行 squid -n,这将创建一个名为“Squid”的自动启动服务。从命令提示符运行 net start squid 或使用服务管理应用程序来启动它。
始终检查提供的发行说明以获取任何版本特定的详细信息。
🔗 使用 msys2 编译
待完成
🔗 移植工作
Squid 系列 3+ 在所有 Windows 编译器系统上都存在主要的构建问题。下面是为 Windows 制作有用 Squid 的已知状态摘要。按上次页面更新时的完成度大致排序。
Windows 的 TODO 列表还有额外的愿望清单项目需要解决。
- 将 Windows AIOPS 逻辑与 Unix AIO 逻辑分开。两者目前被混合在一起,而它们应该在单独的条件构建的库模块中。
- Windows OIO 支持。作为 Unix AIO 和 AIOPS 磁盘 I/O 功能的替代方案。
- 构建安装程序
问题
- 缺少 Windows Vista 及更高版本中可用的共享套接字支持。对 SMP 工作进程是必需的。
- 主 Squid 二进制文件仍然缺少 SMP 支持,只能在 -N 命令行选项下运行。
🔗 Cygwin
Cygwin 有工作的 Squid-4 构建和软件包,由 Diladele 提供支持。
🔗 MinGW-w64
目前是 Squid 开发团队的业余时间关注点。最新的交叉编译结果请见 https://build.squid-cache.org/job/trunk-mingw-cross/。由于这是业余时间的工作,进展缓慢。
交叉编译
# Debian Packages Required:
#
# g++
# provides GCC base compiler. GCC 8 or later required.
#
# mingw-w64
# provides GCC cross-compiler. GCC 8 or later required.
#
# mingw-w64-tools
# provides pkg-config and other build-time tools used by autoconf
#
./configure \
--host=x86_64-w64-mingw32 \
BUILDCXX="g++" \
BUILDCXXFLAGS="-DFOO" \
--enable-build-info="Windows (MinGW-w64 cross-build)"
原生构建
自 Squid-3.3 以来,在此环境中未进行任何工作。
需要从 http://sourceforge.net/projects/mingw-w64/ 获取最新软件包,并使用 GCC 8 或更高版本的编译器。
sh ./configure \
--enable-build-info="Windows (MinGW-w64)"
🔗 MinGW32
自 Squid-3.5 以来,在此环境中几乎未进行任何工作。
Joe Pelaez Jorge 也似乎做了一些工作(https://code.launchpad.net/~joelpelaez/squid/win32)。
🔗 Visual Studio
自 Squid-2.7 以来,在此环境中几乎未进行任何工作。
需要生成全新的 .sln, .sdf 和 .vcxproj 构建文件。理想情况下,这些文件将反映 Windows 风格的便捷库的组合,以生成多个二进制文件。这方面的实验取得了一些不错的成果。
类别: 知识库
导航: 站点搜索、站点页面、类别、🔼 向上