새소식

반응형
Spring/SpringCloudGateway

[SpringCloudGateway] HttpHeaders Filter

  • -
반응형

HttpHeadersFilters

 

Spring Cloud Gateway에서 Backend로 요청을 보내기 전에 HTTP 헤더를 조작하거나 필터링하는 역할
NettyRoutingFilter와 같은 Routing 단계 이전에 실행된다

Forwarded Headers Filter

Gateway에서 Forwarded 헤더를 생성하여 Backend로 전달

Forwarded 헤더에 포함된 정보

  • for: 요청을 보낸 클라이언트의 IP 주소
  • Host: 원본 요청의 Host 값
  • Scheme: HTTP/HTTPS와 같은 프로토콜
  • Port: 요청이 수신된 포트
Forwarded: for=192.168.1.10;host=myapp.com;proto=https

 

RemoveHopByHop Headers Filter

**RFC 2616 (IETF 표준)**에 정의된 Hop-by-Hop 헤더들은 Gateway를 통과할 때 제거된다.

 

Hop-by-Hop Header란
이들은 하나의 네트워크 홉(Proxy, Gateway 등)에서만 유효한 헤더들이며, 다음 홉으로 전달되지 않아야 한다.

 

기본적으로 제거되는 헤더 목록

  • Connection
    • 현재 TCP 연결에 대한 상태 관리 정보를 포함
    • keep-alive, close, 또는 특정 헤더 이름들이 올 수 있다
  • Keep-Alive
    • 지속 연결(Keep-Alive)에서 연결의 수명을 제어합니다.
    • 초 단위 시간(timeout)이나 최대 요청 개수(max)를 설정
  • Proxy-Authenticate
  • Proxy-Authorization
  • TE
  • Trailer
  • Transfer-Encoding
  • Upgrade

Customize 설정 방법

spring:
  cloud:
    gateway:
      filter:
        remove-hop-by-hop:
          headers:
            - Connection
            - Keep-Alive

 

XForwarded Headers Filter

Gateway는 요청이 프록시를 거쳐 왔다는 정보를 표시하기 위해 X-Forwarded-* 헤더들을 추가한다.

  • X-Forwarded-For: 원본 Client IP 주소
  • X-Forwarded-Host: 원본 요청의 Host 값
  • X-Forwarded-Port: 원본 요청의 포트
  • X-Forwarded-Proto: HTTP/HTTPS 프로토콜
  • X-Forwarded-Prefix: Gateway를 경유하면서 추가된 경로
X-Forwarded-For: 203.0.113.195
X-Forwarded-Host: example.com
X-Forwarded-Port: 443
X-Forwarded-Proto: https
X-Forwarded-Prefix: /api

 

해당 헤더들을 노출하는 설정은 기본값은 true

spring:
  cloud:
    gateway:
      x-forwarded:
        for-enabled: true    # X-Forwarded-For 
        host-enabled: true   # X-Forwarded-Host 
        port-enabled: true   # X-Forwarded-Port 
        proto-enabled: true  # X-Forwarded-Proto 
        prefix-enabled: true # X-Forwarded-Prefix

 

appending 옵션
X-Forwarded-* 헤더가 중복으로 생성될 때, 기존 값을 덧붙일지 덮어쓸지 설정할 수 있다.
기본값은 true로, 여러 프록시를 지나갈 때 헤더가 계속 Append

spring:
  cloud:
    gateway:
      x-forwarded:
        for-append: true    
        host-append: true
        port-append: true
        proto-append: true
        prefix-append: false # 덧붙이지 않고 덮어씀
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.