remote_addrとX-Forwarded-Forについて

エキサイトのしばたにえんです。 remote_addrとX-Forwarded-Forの違いについてよくわからなかったので調べました。

remote_addr

アクセス元のIP。直前のIPを持ちます。

Client
↓
LoadBalancer(remote_addr は Client)
↓
ApplicationServer(remote_addr は LoadBalancer)
Javaでremote_addrを取得する
@RequestMapping
public class IpController {
    @GetMapping("ip")
    public String getIp(HttpServletRequest httpServletRequest) {
        return httpServletRequest.getRemoteAddr();
    }

X-Forwarded-For

ロードバランサーやプロキシを経由する度にアクセス元の情報が追加されていきます。,付きで追加されるので注意

Client(X-Forwarded-For は "")
↓
LoadBalancer(X-Forwarded-For は "Client")
↓
ApplicationServer(X-Forwarded-For は "Client, LoadBalancer")
JavaでX-Forwarded-Forを取得する
@RequestMapping
public class IpController {
    @GetMapping("ip")
    public String getIp(HttpServletRequest httpServletRequest) {
        return httpServletRequest.getHeader("X-Forwarded-For");
    }