Traefik Buffering 미들웨어
본문
Buffering
buffering 미들웨어는 서비스로 전달될 수 있는 요청의 크기를 제한해요.
버퍼링을 사용하면 Traefik이 전체 요청을 메모리로 읽어 들이고 (큰 요청은 디스크로 버퍼링할 수도 있어요), 지정된 크기 제한을 초과하는 요청은 거부해요.
이렇게 하면 서비스가 대량의 데이터(예: multipart/form-data)를 처리하지 않아도 되고, 서비스로 데이터를 보내는 데 걸리는 시간도 최소화할 수 있어요.
정보
미들웨어가 부착되면 Traefik은 요청 본문을 전달하기 전에 버퍼링해요. 그 결과 Traefik은 원래 chunked 본문을 스트리밍하는 대신 고정된 Content-Length로 요청을 업스트림에 보낼 수 있어요.
설정 예시
구조화 (YAML)
# 최대 요청 본문을 2MB로 설정
http:
middlewares:
limit:
buffering:
maxRequestBodyBytes: 2000000
구조화 (TOML)
# 최대 요청 본문을 2MB로 설정
[http.middlewares]
[http.middlewares.limit.buffering]
maxRequestBodyBytes = 2000000
Labels
# 최대 요청 본문을 2MB로 설정
labels:
- "traefik.http.middlewares.limit.buffering.maxRequestBodyBytes=2000000"
Tags
// 최대 요청 본문을 2MB로 설정
{
// ...
"Tags": [
"traefik.http.middlewares.limit.buffering.maxRequestBodyBytes=2000000"
]
}
Kubernetes
# 최대 요청 본문을 2MB로 설정
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: limit
spec:
buffering:
maxRequestBodyBytes: 2000000
설정 옵션
| 필드 | 설명 | 기본값 | 필수 |
| maxRequestBodyBytes | 요청의 최대 허용 본문 크기(바이트)예요. 요청이 허용 크기를 초과하면 Service로 전달되지 않고, 클라이언트는 413 (Request Entity Too Large) 응답을 받아요. 0은 무제한을 의미해요. | 0 | 아니요 |
| memRequestBodyBytes | 요청이 메모리 대신 디스크에 버퍼링되는 임계값(바이트)이에요. | 1048576 | 아니요 |
| maxResponseBodyBytes | Service로부터의 최대 허용 응답 크기(바이트)예요. 응답이 허용 크기를 초과하면 클라이언트로 전달되지 않아요. 대신 클라이언트는 500 (Internal Server Error) 응답을 받아요. 0은 무제한을 의미해요. | 0 | 아니요 |
| memResponseBodyBytes | 응답이 메모리 대신 디스크에 버퍼링되는 임계값(바이트)이에요. | 1048576 | 아니요 |
| retryExpression | retryExpression을 사용해 요청을 재요청해요. 자세한 내용은 여기. | "" | 아니요 |
retryExpression
재시도 표현식은 아래 함수들을 연산자 AND(&&)와 OR(||)로 논리적으로 조합해 정의돼요. 최소 하나의 함수가 필요해요:
-
Attempts() 시도 횟수 (첫 번째 시도도 포함돼요).
-
ResponseCode() Service의 응답 코드.
-
IsNetworkError() 응답 코드가 네트워크 오류와 관련된 것인지 여부.