Squid negative_ttl 不起作用

Squid negative_ttl 不起作用

设置

$ squid -v
Squid Cache: Version 3.5.20
Service Name: squid
configure options:  '--build=x86_64-koji-linux-gnu' '--host=x86_64-koji-linux-gnu' '--program-prefix=' '--prefix=/usr' '--exec-prefix=/usr' '--bindir=/usr/bin' '--sbindir=/usr/sbin' '--sysconfdir=/etc' '--datadir=/usr/share' '--includedir=/usr/include' '--libdir=/usr/lib64' '--libexecdir=/usr/libexec' '--sharedstatedir=/var/lib' '--mandir=/usr/share/man' '--infodir=/usr/share/info' '--disable-strict-error-checking' '--exec_prefix=/usr' '--libexecdir=/usr/lib64/squid' '--localstatedir=/var' '--datadir=/usr/share/squid' '--sysconfdir=/etc/squid' '--with-logdir=$(localstatedir)/log/squid' '--with-pidfile=$(localstatedir)/run/squid.pid' '--disable-dependency-tracking' '--enable-eui' '--enable-follow-x-forwarded-for' '--enable-auth' '--enable-auth-basic=DB,LDAP,MSNT-multi-domain,NCSA,NIS,PAM,POP3,RADIUS,SASL,SMB,SMB_LM,getpwnam' '--enable-auth-ntlm=smb_lm,fake' '--enable-auth-digest=file,LDAP,eDirectory' '--enable-auth-negotiate=kerberos' '--enable-external-acl-helpers=file_userip,LDAP_group,time_quota,session,unix_group,wbinfo_group,kerberos_ldap_group' '--enable-cache-digests' '--enable-cachemgr-hostname=localhost' '--enable-delay-pools' '--enable-epoll' '--enable-ident-lookups' '--enable-linux-netfilter' '--enable-removal-policies=heap,lru' '--enable-snmp' '--enable-ssl-crtd' '--enable-storeio=aufs,diskd,rock,ufs' '--enable-wccpv2' '--enable-esi' '--enable-ecap' '--with-aio' '--with-default-user=squid' '--with-dl' '--with-openssl' '--with-pthreads' '--disable-arch-native' 'build_alias=x86_64-koji-linux-gnu' 'host_alias=x86_64-koji-linux-gnu' 'CFLAGS=-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches   -m64 -mtune=generic -fpie' 'LDFLAGS=-Wl,-z,relro  -pie -Wl,-z,relro -Wl,-z,now' 'CXXFLAGS=-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches   -m64 -mtune=generic -fpie' 'PKG_CONFIG_PATH=:/usr/lib64/pkgconfig:/usr/share/pkgconfig'
$ cat /etc/squid.conf
cache_dir aufs /var/cache/squid/data 1024 16 256
http_access allow all
http_port 3128
negative_ttl 10 minutes
refresh_pattern . 1449 0% 11520
visible_hostname example

积极的响应

第一次请求后,肯定响应将被缓存

$ http_proxy=http://localhost:3128 curl -I http://www.china.org.cn/
HTTP/1.1 200 OK
Content-Type: text/html
Date: Mon, 10 Jun 2019 00:37:28 GMT
Powered-By-ChinaCache: HIT from CNC-HQ-b-3g8
ETag: "928a-5cfda467"
Expires: Mon, 10 Jun 2019 00:40:00 GMT
Content-Length: 37514
Server: Sun-ONE-Web-Server/6.1
Accept-Ranges: bytes
CACHE: TCP_HIT
Powered-By-ChinaCache: HIT from USA-LA-5-D06
CC_CACHE: TCP_HIT
Accept-Ranges: bytes
Age: 39
X-Cache: HIT from example
X-Cache-Lookup: HIT from example:3128
Via: 1.1 example (squid/3.5.20)
Connection: keep-alive
1560127376.780      0 127.0.0.1 TCP_MEM_HIT/200 511 HEAD http://www.china.org.cn/ - HIER_NONE/- text/html```

负面回应

在第一次请求之后,负面响应不会被缓存:

$ http_proxy=http://localhost:3128 curl -I http://www.china.org.cn/boaty-mcboatface
HTTP/1.1 404 Not Found
Content-Type: text/html
Content-Length: 292
Powered-By-ChinaCache: MISS from CNC-HQ-b-3g8
Date: Mon, 10 Jun 2019 00:34:32 GMT
Server: Sun-ONE-Web-Server/6.1
Powered-By-ChinaCache: MISS from USA-LA-5-D06
X-Cache: MISS from example
X-Cache-Lookup: MISS from example:3128
Via: 1.1 example (squid/3.5.20)
Connection: keep-alive
1560127438.188   2395 127.0.0.1 TCP_MISS/404 360 HEAD http://www.china.org.cn/boaty-mcboatface - HIER_DIRECT/106.48.13.98 text/html

响应时间为几百毫秒,与缓存未命中一致:

为什么 Squid 不缓存这个负面响应,我该怎么做才能缓存它?

答案1

来自手动的(重点是我的)

选项名称: negative_ttl
要求:--enable-http-violations
默认值: negative_ttl 0 seconds
建议配置:

设置失败请求的默认生存时间 (TTL)。某些类型的失败(例如“连接被拒绝”和“404 未找到”)可以在短时间内被负面缓存。
现代 Web 服务器应该提供 Expires: 标头,但是如果他们不这可以提供最小 TTL。
默认不缓存具有未知到期详细信息的错误。

请注意,这与 DNS 查找的负缓存不同。

警告:此操作违反 HTTP 标准。启用此功能可能会让您承担由此引起的问题的责任。

首先,你的 Squid 似乎没有内置--enable-http-violations 编译时选项,因为该指令违反了标准,所以这是必须的。

相关内容