squid中出现403 forbidden错误的排查方法

发布时间:2020-09-16编辑:脚本学堂
squid中提示如下错误:HTTP/1.0 403 Forbidden X-Squid-Error: ERR_ACCESS_DENIED 0

squid中提示如下错误:
HTTP/1.0 403 Forbidden
X-Squid-Error: ERR_ACCESS_DENIED 0

排查方法:
1.初步判断该错误码,应该是在访问squid时进行acl 校验时被断开的。
2.因此,需要打开acl校验的相关代码的debug信息,在squid代码中src/http.c
3.在http.c文件开始处可以找到如下注释
DEBUG: section 33 Client-side Routine

4.于是需要打开squid.conf中的 debug_options 选项,配置如下:
debug_options 33,9
执行
squid -k reconfigure

5.再次查看日至cache.log,看到类似如下信息
2012/03/11 15:10:27| The request GET HTTP://www.lb.com/test.gz is DENIED, because it matched 'localnet'
2012/03/11 15:10:27| Access Denied: HTTP://www.lb.com/test.gz
2012/03/11 15:10:27| AclMatchedName = localnet
2012/03/11 15:10:27| Proxy Auth Message = <null>
2012/03/11 15:10:27| clientSendHeaders: FD 14 'HTTP://www.lb.com/test.gz'
2012/03/11 15:10:27| clientBuildReplyHeader: Error, don't keep-alive

6.问题定位了,再打开squid.conf,查找,localnet的acl,如下
 

复制代码 代码如下:
acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network

对应localnet的http_access设置如下:
 

复制代码 代码如下:
http_access allow localnet
# And finally deny all other access to this proxy
http_access deny all

而我是用curl访问的squid:
 

复制代码 代码如下:
curl -x 127.0.0.1:8080 -svo /dev/null www.lb.com/test.gz

127.0.0.1不在localnet中,所以会被
http_access deny all
这行给deny掉。
因此,要在上面加上http_access allow localhost,然后再执行 squid -k reconfigure 。
最后,再次curl通过127.0.0.1 即可成功访问到squid。