You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Squid双端口监听时仅指定端口启用认证的配置问题

Squid双端口监听时仅指定端口启用认证的配置问题

嗨,我看了你遇到的问题——明明想让Squid在3128端口开放无认证访问、3129端口强制认证,结果连3128都返回407要求验证,这确实挺闹心的。让我帮你揪出问题根源,再给你调整后的正确配置。

问题根源分析

你的核心问题出在ACL匹配规则用错了,同时规则顺序也需要微调:

  1. 你用了myportname来定义端口ACL,但这个参数是用来匹配http_port设置时的自定义端口别名(需要配合name=属性),而不是直接匹配端口号。你没给端口设置别名,导致input_3128和input_3129这两个ACL根本匹配不到任何请求,等于无效规则。
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 13:43:04