AWS ALB 允许用户使用自定义错误页面来处理错误请求,但是如果希望 ALB 在遇到错误请求时能静默处理,可以通过在 Target Group 的 Health Check 配置中设置一个“文字响应和状态码”来实现。
具体步骤为:在 Target Group Health Check 配置页面中,将 Target 尝试连接时所使用的协议设置为“HTTP”,然后在“Advanced health check settings”中将“Success codes”设为所需要的状态码,如200或204。这样,当 Target 处于非 200/204 的状态时,ALB 会将请求路由到其他可用的 Target,而不会返回任何响应。
代码示例:
在 EC2 实例上运行一个简单的 HTTP 服务器,返回 500 状态码以模拟错误请求。
import http.server
import socketserver
PORT = 80
class MyHandler(http.server.SimpleHTTPRequestHandler):
def do_GET(self):
self.send_response(500)
self.end_headers()
self.wfile.write(b'Oops, something went wrong!')
with socketserver.TCPServer(("", PORT), MyHandler) as httpd:
print(f"Serving on port {PORT}")
httpd.serve_forever()
在 AWS 控制台中创建 ALB 和 Target Group,并将后端实例的 IP 地址添加到 Target Group。
在 Target Group Health Check 配置页面中,将协议设为“HTTP”,“Success codes”设置为“200”或“204”。
此时,向 ALB 发送 GET 请求会返回一个空的响应,没有任何状态码或错误信息。