amazon-ec2 - 通过 EC2 负载均衡器的请求挂起

标签 amazon-ec2 proxy load-balancing

我使用 Tinyproxy 在 EC2 实例上设置了一个简单的代理(默认配置监听/允许所有传入连接)。这效果很好。如果我为了调试而在浏览器中填写代理设置的 IP 地址和端口,我就可以毫无问题地浏览代理。一切正常。但是,如果我在实例前面创建 EC2 负载均衡器(确保正确转发 http 端口),当我浏览负载均衡器 IP 时,它就会挂起。这对我来说似乎是一个谜。实例正在运行,负载均衡器报告“正在服务”,并且绕过负载均衡器可以工作,但遍历它只是挂起。我错过了什么,我应该在哪里查找错误?

更新

我现在查看了 Tinyproxy 的日志:当尝试通过实例代理直接访问 google.com 时,我看到如下日志:

CONNECT   Apr 30 20:41:33 [1862]: Request (file descriptor 6): GET http://google.com/ HTTP/1.1
INFO      Apr 30 20:41:33 [1862]: No upstream proxy for google.com
CONNECT   Apr 30 20:41:33 [1862]: Established connection to host "google.com" using file descriptor 7.
INFO      Apr 30 20:41:33 [1862]: Closed connection between local client (fd:6) and remote client (fd:7)
CONNECT   Apr 30 20:41:33 [1901]: Connect (file descriptor 6): x1-6-84-1b-ADDJF-20-07-92.fsdfe [430.12327.65117.615]
CONNECT   Apr 30 20:41:33 [1901]: Request (file descriptor 6): GET http://www.google.ie/?gws_rd=cr&ei=_V9hU8DeFMTpPJjygIgC HTTP/1.1
INFO      Apr 30 20:41:33 [1901]: No upstream proxy for www.google.ie
CONNECT   Apr 30 20:41:33 [1901]: Established connection to host "www.google.ie" using file descriptor 7.

但是,如果我尝试通过负载均衡器访问 google,然后转发到实例,那么我会看到如下日志:

CONNECT   Apr 30 20:42:54 [1860]: Request (file descriptor 6): GET / HTTP/1.1
CONNECT   Apr 30 20:42:54 [1869]: Connect (file descriptor 6): ip-432-2383245-53.eu-west-1.compute.internal [10.238.155.237]
CONNECT   Apr 30 20:42:54 [2037]: Connect (file descriptor 6): ip-432-2383245-53.eu-west-1.compute.internal [10.238.155.237]
INFO      Apr 30 20:42:54 [1860]: process_request: trans Host GET http://google.com:8888/ for 6
INFO      Apr 30 20:42:54 [1860]: No upstream proxy for google.com
CONNECT   Apr 30 20:43:12 [1861]: Connect (file descriptor 6): ip-432-2383245-53.eu-west-1.compute.internal [1230.23845.515.2537]
CONNECT   Apr 30 20:43:12 [2035]: Connect (file descriptor 6): ip-432-2383245-53.eu-west-1.compute.internal [143.238.12345.117]
ERROR     Apr 30 20:43:12 [2035]: read_request_line: Client (file descriptor: 6) closed socket before read.
ERROR     Apr 30 20:43:12 [1861]: read_request_line: Client (file descriptor: 6) closed socket before read.
ERROR     Apr 30 20:43:12 [2035]: Error reading readble client_fd 6
ERROR     Apr 30 20:43:12 [1861]: Error reading readble client_fd 6
WARNING   Apr 30 20:43:12 [2035]: Could not retrieve request entity
WARNING   Apr 30 20:43:12 [1861]: Could not retrieve request entity

据我观察,ELB 正在尝试通过端口 8888 发送请求

最佳答案

您可以获取ELB访问日志。这些访问日志可以帮助您确定不同时间间隔的请求所花费的时间。例如:

  1. request_processing_time:从负载均衡器收到请求并将请求发送到已注册实例起所经过的总时间(以秒为单位)。
  2. backend_processing_time:从负载均衡器向已注册实例发送请求到该实例开始发送响应 header 所用的总时间(以秒为单位)。
  3. response_processing_time:从负载均衡器从注册实例收到响应 header 到开始向客户端发送响应所用的总时间(以秒为单位)。该处理时间包括在负载均衡器处的排队时间以及从负载均衡器到后端的连接获取时间。

...以及更多信息。您需要先配置访问日志。请阅读以下文章以进一步了解如何使用 ELB 访问日志:

  1. Access Logs for Elastic Load Balancers
  2. Access Logs

这些日志可能/可能无法解决您的问题,但无疑是一个很好的起点。此外,您可以随时咨询AWS技术支持以进行更深入的分析。

关于amazon-ec2 - 通过 EC2 负载均衡器的请求挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23387728/

相关文章:

django - EC2 上的 PostgreSQL 数据库 : Connection refused

ubuntu - 更改了整个文件夹权限的 EC2 Ubuntu

nginx 反向代理到一组基于 http 引用的 URL 中带有附加路径的页面?

kubernetes - 将流量从DigitalOcean负载均衡器转发到Kubernetes服务不起作用

Apache、mod_jk 和 JBoss 负载平衡问题

docker - 如何使用 docker swarm 保持粘性 session ( session 持久性)?

shell - 如何编写脚本来创建 EC2 实例

linux - 无法在 ec2 ubuntu 实例错误 : Some packages could not be installed 上安装 puppetserver

c++ - 语法繁重的多个 lambda 包装器的替代方案——如何避免样板代码?

macos - 无法禁用代理以在 OS X 上安装 Homebrew