如何阻止负载均衡器转发到特定路径?

如何阻止负载均衡器转发到特定路径?

我已经设置了 ALB 负载均衡器。我想阻止将请求转发到特定路径,例如不要转到 mydomain.com/admin/

当前监听器的设置如下:

 1     Arn                     IF Path is /service/   forward to tg1

 last  HTTP80:default action   IF Requests otherwise not routed  forward to tg1

所以我只想允许流量流向路径:/service/(mydomain.com/service/)而不是/admin/

我如何才能阻止流向负载均衡器的特定路径的流量?

任何帮助,将不胜感激。

答案1

创建一个空目标组。随便命名,例如blackhole。如果您有多个 VPC,请选择正确的 VPC。新目标组的其余参数可以保留为默认值。不要将任何实例分配给目标组。

为 ALB 上的每个侦听器创建一条规则IF path is /admin* THEN Forward to blackhole。将其放在列表的尽可能高的位置。

来自 AWS 控制台的图示,创建此处描述的规则

由于目标组中的 0 个目标始终 100% 处于不健康状态,因此 ALB 始终无法将请求传递到后端,因此当任何与此路径匹配的请求到达时都会抛出错误。通配符*匹配 0 个或更多字符,因此此路径下的所有内容都会被此规则有效拒绝。

$ curl -v xxxx.us-west-2.elb.amazonaws.com/admin
* About to connect() to xxxx.us-west-2.elb.amazonaws.com port 80 (#0)
*   Trying x.x.x.x... connected
> GET /admin HTTP/1.1
> User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3
> Host: xxxx.us-west-2.elb.amazonaws.com
> Accept: */*
>
< HTTP/1.1 503 Service Temporarily Unavailable
< Server: awselb/2.0
< Date: Thu, 10 Aug 2017 16:38:15 GMT
< Content-Type: text/html
< Content-Length: 178
< Connection: keep-alive
<
<html>
<head><title>503 Service Temporarily Unavailable</title></head>
<body bgcolor="white">
<center><h1>503 Service Temporarily Unavailable</h1></center>
</body>
</html>
* Connection #0 to host xxxx.us-west-2.elb.amazonaws.com left intact
* Closing connection #0

当然,错误并不完全真实,因为它是503 Service Temporarily Unavailable而不是403 Forbidden,但这确实达到了阻止 ALB 上的特定路径模式的目的。

答案2

您可以简单地选择返回您选择的固定响应,而不是像@Michael-sqlbot 建议的那样将请求发送到空目标组。

更多背景信息请参见 AWS公告

在此处输入图片描述

相关内容