Squid双端口监听时仅指定端口启用认证的配置问题
Squid双端口监听时仅指定端口启用认证的配置问题
嗨,我看了你遇到的问题——明明想让Squid在3128端口开放无认证访问、3129端口强制认证,结果连3128都返回407要求验证,这确实挺闹心的。让我帮你揪出问题根源,再给你调整后的正确配置。
问题根源分析
你的核心问题出在ACL匹配规则用错了,同时规则顺序也需要微调:
- 你用了
myportname来定义端口ACL,但这个参数是用来匹配http_port设置时的自定义端口别名(需要配合name=属性),而不是直接匹配端口号。你没给端口设置别名,导致input_3128和input_3129这两个ACL根本匹配不到任何请求,等于无效规则。 - Squid的
http_access规则是从上到下按顺序匹配的,一旦命中就停止后续判断,你的规则顺序也可能导致无认证端口的请求被错误拦截。
修正后的完整配置
下面是调整后的可直接使用的配置,我会逐行说明逻辑:
# 定义双端口监听,3128作为无认证端口,3129作为需认证端口 http_port 3128 http_port 3129 # 1. 修正ACL:用myport(直接匹配端口号)替代myportname acl port_3128 myport 3128 acl port_3129 myport 3129 # 2. 定义已认证用户的ACL(你的auth_param已经正常工作,这里保持不变) acl authenticated proxy_auth REQUIRED # 3. 关键:按优先级排序http_access规则 http_access allow port_3128 # 优先允许3128端口的所有请求(无需认证) http_access allow authenticated port_3129 # 允许3129端口中已认证的请求 http_access deny port_3129 # 拒绝3129端口中未认证的请求(自动返回407) http_access deny all # 拒绝所有未匹配的请求
验证方法
配置修改后,先重启Squid服务:
# 不同系统重启命令可能不同,比如Debian/Ubuntu: systemctl restart squid
然后测试3128端口(无需认证):
curl -v --proxy http://myproxy.example.com:3128 http://debian.org/
这次应该能正常返回200状态码和页面内容。
再测试3129端口(需认证):
# 未带认证信息会返回407 curl -v --proxy http://myproxy.example.com:3129 http://debian.org/ # 带正确认证信息就能正常访问 curl -v --proxy http://your_username:your_password@myproxy.example.com:3129 http://debian.org/
备注:内容来源于stack exchange,提问作者exore
相关产品推荐
相关产品推荐

