Mat*_*agg 10 curl load-balancing google-compute-engine
如果我将带有文件上传的POST请求卷曲到我的谷歌计算负载均衡器(LB),我会收到502错误.如果我对LB后面的工作节点执行相同的卷曲,则可以正常工作.如果我使用像PHP Guzzle这样的库,它可以正常工作.如果我在LB上做了一个基本的GET请求,我得到了正确的响应,但是工作日志不会确认收到请求,就好像LB缓存了它一样.到底是怎么回事?仅供参考,google LB newb.谢谢
编辑:
我正在使用GCE HTTP LB. Curl命令如下所示:
curl http://1.2.3.4 -F "key=value" -F "data=@path/to/file"
此curl命令在使用GCE VM IP时有效,但在使用GCE HTTP LB IP时不起作用.
小智 5
这一行代码为我修复了它:
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Expect:']);
Run Code Online (Sandbox Code Playgroud)
您显然需要将空Expect:标头添加到您发送的任何其他标头中,但该标头修复了用于Google HTTP负载平衡器的cURL.
Google文档设置HTTP(S)负载平衡在" 注释和限制"部分的底部附近有一个注释,表示HTTP/1.1 100 Continue不支持响应.
似乎默认情况下,cURL将始终Expect: 100-continue在发送POST请求时设置标头.因此,显然cURL默认情况下无法通过GCE HTTP负载均衡器发送POST.
在最终用户方面,您只看到来自Google的502回复,这更令人困惑,因为对不在负载均衡器后面的服务器进行完全相同的POST工作完全正常.
但是,存在Expect: 100-continue会导致Google Load Balancer吓坏并破坏请求.
在服务器端,无法解析POST数据(虽然Content-Length报告正确,但它甚至没有到达服务器).在我的情况下,这导致服务器返回500内部服务器错误,GCE LB将其作为502 Bad Gateway错误发送并发送回用户.
添加一个空Expect:标题后,我的POST数据正确地进入我的负载均衡虚拟机,它们正在解析并返回有效响应,而我的客户端正在获得200而不是502.
感谢这个问题有助于解决这个问题.
默认情况下不启用从负载均衡器到您的实例的流量。不幸的是,这没有很好的记录,实际上,当您创建负载均衡器时,这应该会自动发生。
尝试将此防火墙规则添加到负载均衡器和虚拟机所在的网络:
130.211.0.0/22 tcp:1-5000 Apply to all targets
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1310 次 |
| 最近记录: |