C# ForwardedHeader 설정만으로는 Elastic Load Balancer(여기서는 Application Load Balancer에 한하여)에서 Client IP 추적이 안된다.
//Startup.cs - Configure
app.UseForwardedHeaders(new ForwardedHeadersOptions()
{
ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
});
//Controller 따위에서
var clientIp = this.Request.HttpContext.Connection.RemoteIpAddress.ToString();
Load Balancer를 사용한다면, ForwardedFor 된 IP는 Client IP가 아니고, Load Balancer의 Private IP (172.따위로 시작하는)를 가져와 버리게 된다.
AWS공식 문서를 참조한다.
HTTP/HTTPS 리스너가 있는 Application Load Balancer 및 Classic Load Balancer의 경우
X-Forwarded-For
HTTP 헤더에 클라이언트 IP 주소가 캡처됩니다. 이 IP 주소를 기록하도록 웹 서버 액세스 로그를 구성할 수 있습니다.
ELB는 대신 HTTP헤더에 Client IP를 기록해 준다고 한다.
다음과 같이 Header에서 갖고 올 수 있도록 한다.
string clientIp;
if(context.HttpContext.Request.Headers.ContainsKey("X-Forwarded-For"))
{
clientIp = this.Request.HttpContext.Request.Headers["X-Forwarded-For"];
}