我正在使用 Squid 和 SquidClamAV 构建一个新的代理服务器。
我在下载大文件时遇到问题。我在 squidclamav.conf 中将最大大小设置为 52428800 字节 - 这应该可以防止扫描大于 50MB 的文件。
通过代理下载 2GB 以内的任何文件都可以正常工作,但大于该大小的文件会产生以下错误:ICAP 协议错误 - 系统返回:(32)管道损坏
在 c-icap 服务器日志中我得到了这个:2011 年 12 月 2 日星期五 10:19:36,一般,服务中存在 Bug。请向服务作者报告!!!!
下载小于 2GB 的文件时,浏览器会立即出现下载窗口。正如预期的那样。
当开始下载超过 2GB 的文件时,需要等待一段时间才会出现错误。在 /var/tmp 之后,我看到它实际上开始下载最大 50MB 的文件(squidclamav.conf 中设置的最大大小!)然后停止并出现错误。
我不明白为什么当文件大于 squidclamav 中的最大大小时会发生这种情况。
服务器是 CentOS 6 32bit 机器。C-icap 是从源代码 (v0.1.7) 编译的,squid 来自 CentOS,clamd+squidclamav 来自 repoforge.org。下面我添加了相关的配置文件。
/etc/squid/squid.conf:
...
icap_enable on
icap_send_client_ip on
icap_send_client_username on
icap_client_username_header X-Authenticated-User
icap_service service_req reqmod_precache \
bypass=1 icap://127.0.0.1:1344/squidclamav
adaptation_access service_req allow all
icap_service service_resp respmod_precache \
bypass=1 icap://127.0.0.1:1344/squidclamav
adaptation_access service_resp allow all
/etc/squidclamav.conf:
maxsize 52428800
redirect http://localproxy/detecteio.php
clamd_local /var/run/clamav/clamd.sock
timeout 1
logredir 0
dnslookup 1
/etc/c-icap.conf:
PidFile /var/run/c-icap/c-icap.pid
CommandsSocket /var/run/c-icap/c-icap.ctl
Timeout 300
MaxKeepAliveRequests 100
KeepAliveTimeout 600
StartServers 3
MaxServers 10
MinSpareThreads 10
MaxSpareThreads 20
ThreadsPerChild 10
MaxRequestsPerChild 0
Port 1344
ServerAdmin root@localhost
ServerName localproxy.domain.local
TmpDir /var/tmp
MaxMemObject 131072
DebugLevel 1
ModulesDir /usr/local/lib/c_icap
ServicesDir /usr/local/lib/c_icap
TemplateDir /usr/local/share/c_icap/templates/
TemplateDefaultLanguage en
LoadMagicFile /usr/local/etc/c-icap.magic
RemoteProxyUsers off
RemoteProxyUserHeader X-Authenticated-User
RemoteProxyUserHeaderEncoded on
ServerLog /var/log/c-icap_server.log
AccessLog /var/log/c-icap_access.log
Service squidclamav squidclamav.so
Service echo srv_echo.so
/etc/clamd.conf:
LogFile /var/log/clamav/clamd.log
LogFileMaxSize 0
LogTime yes
LogSyslog yes
PidFile /var/run/clamav/clamd.pid
TemporaryDirectory /var/tmp
DatabaseDirectory /var/clamav
LocalSocket /var/run/clamav/clamd.sock
FixStaleSocket yes
TCPSocket 3310
TCPAddr 127.0.0.1
MaxConnectionQueueLength 30
MaxThreads 50
ReadTimeout 300
User clamav
AllowSupplementaryGroups yes
ScanPE yes
ScanELF yes
DetectBrokenExecutables yes
ScanOLE2 yes
ScanMail yes
ScanArchive yes
ArchiveBlockEncrypted no
答案1
一般来说,32 位系统在处理大于 2GB 的文件时会遇到困难,但是,下载限制为 50MB 则表明 ClamAV 存在问题。
一些建议;
1)确保 Squid 已使用“--with-large-files”进行编译
2)使用 curl 或 wget 在本地测试下载(排除浏览器/网络问题)
3)尝试增加“/etc/squidclamav.conf”中的“maxsize”指令,看看是否可以下载更大的文件。
4)禁用文件扫描并重新测试。
答案2
根据提供的配置,这个问题似乎不是由于 squid 引起的,因为配置的限制是 50MB,这是防止扫描大于此大小的文件的限制,但它与下载文件的大小无关。请确认您用于下载的 Web 浏览器的名称和版本,因为某些 Internet Explorer 版本只允许下载小于特定大小的文件。例如,如果您尝试在 IE6 中下载大于 2 GB 的文件或在 Internet Explorer 7 中下载大于 4GB 的文件,则可能会出现这种情况,在这种情况下,您可以切换到 Firefox 或任何其他 Web 浏览器。注意:此下载限制已在 IE8 中取消。因此,您在 IE8 中不会遇到此行为。您可以参考此链接了解更多信息http://support.microsoft.com/kb/298618 我希望这些信息对你有帮助
答案3
使用64位Centos 6重建了代理服务器,使用了相同的配置,但问题已经消失。