我需要在Elastic Beanstalk应用程序上使用http运行状况检查,并启用代理协议。目前这是不可能的,健康检查失败并出现错误 - > *58 broken header while reading PROXY protocol
我认为我有两个选择
broken header
错误,或检测proxy_protocol
服务器块中的常规http请求,则将这些请求重定向到侦听http的端口。理想情况下,我不想做任何这样的事情。用于解决此问题的feature request已提交给AWS,但它没有ETA。
答案 0 :(得分:2)
The proxy protocol specification说:
接收器必须配置为仅接收此处描述的协议 规范并且不得试图猜测协议头是否存在 或不。这意味着该协议明确阻止了端口之间的共享 公共和私人访问。否则它将打开一个重大的安全漏洞 允许不受信任的各方欺骗他们的连接地址。
我认为这意味着选项2是一个非常糟糕的想法,甚至不符合代理协议的一致性实现。
另一方面,选项1似乎很合理。您可以设置一个安全组,以便在没有启用代理协议的情况下,只有合法的运行状况检查可以进入该端口。
另外还有两种选择:
只需将健康状况检查指向添加标题的内容(即ELB?),而不是直接指向您的Nginx实例。不确定Elastic Beanstalk是否可以使用它,它不是我使用的服务。
在将运行状况检查流量转发到您的Nginx之前,使用其他内容添加代理协议标头,这样可以避免重复Nginx配置。例如,与Nginx在同一台机器上运行的HAProxy可以做到这一点。同样,使用安全组来确保只有合法的流量才能通过。