我详细介绍了StackOverflow 上的这个问题一些随机请求无法从客户端发送到我的 Node.js 应用服务器,导致网关超时。总之,相同的请求随机地甚至无法到达足以在我的第一行 express 中间件中触发 console.log() 的地步。
不过,我需要缩小问题范围,找出流量丢失的位置,有人建议我尝试在应用服务器上使用数据包嗅探器。这是我的设置:
- 2x 负载均衡器 (m1.larges)
- 2x node.js 服务器(还有 m1.large)
以下是有趣/不寻常之处:node.js 服务器最初是使用 Apache 堆栈的 PHP 服务器,并继续为我的域 (streamified.me) 提供 PHP 文件。但是,我在应用服务器上使用了一点 httpd.conf 魔法,以便对 api.streamified.me 的请求通过端口 8888 路由到 node.js 服务器:
RewriteCond %{HTTP_HOST} ^api.streamified.me
RewriteRule ^(.*) http://localhost:8888$1 [P]
因此,请求到达负载均衡器 => 到达应用服务器 => 如果该请求用于 API,则路由到端口 8888 => 由 node.js 处理
因此,在同一个 httpd.conf 文件中,我打开了 RewriteLogLevel 5,然后在本地主机上创建了一个简单的 PHP+CURL 脚本,使用随机 URL 访问我的 api.streamified.me(这应该会导致 node.js 触发一个简单的“未找到”响应),直到导致网关超时。在这里,您可以看到它已经发生了——重写日志显示该请求确实被应用服务器接收并转发到端口 8888……但 node.js 从未收到它(或者,至少,中间件第一行的第一行代码从未收到它……)