我在 VPC 中构建了这条流量路由。
Route53->ACM(SSL)->Public ALB->EC2(Nginx proxy)->Private ALB->ECS(Internal App)
EC2 的安全组允许 tcp 80 和 443。ECS 的安全组允许来自 EC2 的安全组的 80。
当我访问注册在 Route53 中的域时,出现504 DNS look up failed
错误。访问公共 ALB 的 DNS 名称时503 Service Temporarily Unavailable
出错。
我确定 ACM 正在设置并且公共 LB 的 DNS 名称正在使用域注册到 Route53。
公共子网上的 ALB 设置由 Terraform 执行
resource "aws_lb_listener" "http" {
load_balancer_arn = aws_lb.this.arn
port = "80"
protocol = "HTTP"
default_action {
type = "redirect"
redirect {
port = "443"
protocol = "HTTPS"
status_code = "HTTP_301"
}
}
}
resource "aws_lb_listener_rule" "http_redirect" {
listener_arn = aws_lb_listener.proxy.arn
priority = 1
action {
type = "redirect"
redirect {
port = "443"
protocol = "HTTPS"
status_code = "HTTP_301"
}
}
condition {
path_pattern {
values = ["/*"]
}
}
}
resource "aws_lb_listener_rule" "http_forward" {
listener_arn = aws_lb_listener.http.arn
priority = 2
action {
type = "forward"
target_group_arn = aws_lb_target_group.proxy.arn
}
condition {
host_header {
values = ["proxy.portsite.com"]
}
}
}
resource "aws_lb_listener_rule" "https_forward" {
listener_arn = aws_lb_listener.https.arn
action {
type = "forward"
target_group_arn = aws_lb_target_group.proxy.arn
}
condition {
host_header {
values = ["proxy.portsite.com"]
}
}
}
两者都是路由的必要条件吗http_redirect
?http_forward
还是只有http_redirect
好的?而且,问题是由它引起的吗?
重定向规则用于强制 http 到 http S。
要将流量发送到后端,您需要使用forward操作。
您可以检查 HTTP“服务器”标头以了解谁在发送 503 错误(ALB、nginx、ECS ......)
ECS 的安全组允许来自 EC2 的安全组的 80 个。:ECS 安全组必须允许私有 ALB。私有 ALB 安全组必须允许 EC2 实例