Squid 代理前端的 ELB 监听器协议

Squid 代理前端的 ELB 监听器协议

我们有两个 Squid 代理服务器以实现高可用性。我们希望在这些 Squid 代理服务器前面使用 Amazon ELB。
当我们使用负载均衡器协议作为 TCP 和端口 8080、实例协议 TCP 和端口 3128 时 - 在测试实例上使用 ELB 名称导出 Squid 代理后,我们就可以连接到互联网。

当我们使用负载均衡器协议作为 HTTP 和端口 80、实例协议 HTTP 和端口 3128 时 - 在测试实例上使用 ELB 名称导出 squid 代理后,我们无法连接到互联网。

Squid 代理配置是我们随软件包提供的原始配置文件。我们仅添加了虚拟主机名。

可以使用 HTTP 代替 TCP 吗?

答案1

我怀疑他们想获取X-Forwarded-For日志请求者的原始 IP。我知道我是。

在 ELB 中使用 TCP 时,ELB 不会转发这些标头,但如果您设置为 HTTP/3128,则会转发。但现在 squid 不起作用。

$ curl -v -x http://MYELB.us-east-1.elb.amazonaws.com:3128 -L http://httpbin.org/ip
* Hostname was NOT found in DNS cache
*   Trying 10.0.153.134...
* Connected to MYELB.us-east-1.elb.amazonaws.com (10.0.153.134) port 3128 (#0)
> GET http://httpbin.org/ip HTTP/1.1
> User-Agent: curl/7.35.0
> Host: httpbin.org
> Accept: */*
> Proxy-Connection: Keep-Alive
>
< HTTP/1.1 400 Bad Request
< Content-Language: en
< Content-Type: text/html;charset=utf-8
< Date: Mon, 06 Jun 2016 17:25:17 GMT
< Mime-Version: 1.0
* Server squid/3.5.12 is not blacklisted
< Server: squid/3.5.12
< Vary: Accept-Language
< Via: 1.1 ip-10-0-139-174 (squid/3.5.12)
< X-Cache: MISS from ip-10-0-139-174
< X-Cache-Lookup: NONE from ip-10-0-139-174:3128
< X-Squid-Error: ERR_INVALID_URL 0
< Content-Length: 3540
< Connection: keep-alive

如果你查看来自 squid 框的 TCPDUMP,你会看到以下内容:

GET /ip HTTP/1.1
host: httpbin.org:3128
Accept: */*
Proxy-Connection: Keep-Alive
User-Agent: curl/7.35.0
X-Forwarded-For: 172.17.0.5
X-Forwarded-Port: 3128
X-Forwarded-Proto: http
Connection: keep-alive

哪个鱿鱼会呕吐,因为它不是一个真正的 URL(服务器被从 GET 中剥离出来):

HTTP/1.1 400 Bad Request
Server: squid/3.5.12
Mime-Version: 1.0
Date: Mon, 06 Jun 2016 17:28:07 GMT
Content-Type: text/html;charset=utf-8
Content-Length: 3540
X-Squid-Error: ERR_INVALID_URL 0
Vary: Accept-Language
Content-Language: en
X-Cache: MISS from ip-10-0-139-174
X-Cache-Lookup: NONE from ip-10-0-139-174:3128
Via: 1.1 ip-10-0-139-174 (squid/3.5.12)
Connection: close

关于如何让 ELB 传递服务器名称,您有什么想法吗?还不清楚为什么主机头上有端口 3128。

答案2

我想您想将您的 ELB 更改为使用 HTTP,因为您想记录客户端 IP 地址。

您有两个选项可以实现此目的 -
1. 使用 TCP(而非 HTTP)的 ELB,并将其配置为使用代理协议转发客户端 IP。阅读更多相关信息这里
2. 将 squid 升级到 3.5 版(或更高版本),并使用内置代理协议。以下是发行说明

相关内容