client ip address preservation in aws ecs
在 AWS ECS 中,要保留客户端 IP 地址,您可以使用代理协议。代理协议是一种协议,它允许负载均衡器将客户端的原始 IP 地址和端口号传递给后端容器。下面是一个示例配置:
1. 在您的负载均衡器中启用代理协议。
2. 在您的 ECS 任务定义中,启用代理协议,并配置容器将客户端的原始 IP 地址和端口号传递给应用程序。下面是一个示例任务定义:
```
json
{
"containerDefinitions": [
{
"name": "my-app",
"image": "my-app-image",
"portMappings": [
{
"containerPort": 80,
"hostPort": 0,
"protocol": "tcp"
}
],
"environment": [
{
"name": "PROXY_PROTOCOL",
"value": "true"
}
],
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-group": "my-log-group",
"awslogs-region": "us-west-2",
"awslogs-stream-prefix": "my-app"
}
}
}
],
"requiresCompatibilities": [
"EC2"
],
"networkMode": "awsvpc",
"taskRoleArn": "arn:aws:iam::123456789012:role/my-task-role",
"executionRoleArn": "arn:aws:iam::123456789012:role/my-execution-role",
"cpu": "256",
"memory": "512",
"family": "my-task-family"
}
```
在这个任务定义中,`PROXY_PROTOCOL` 环境变量被设置为 `true`,这意味着容器将使用代理协议。`portMappings` 参数指定容器将监听的端口。`logConfiguration` 参数指定容器的日志配置。
3. 在您的应用程序中,配置应用程序以接收代理协议格式的数据,并从中提取客户端的原始 IP 地址和端口号。具体实现方式取决于您使用的编程语言和框架。例如,在 Node.js 中,您可以使用 `proxy-addr` 模块来提取客户端的原始 IP 地址。