Home [K8S] Ingress Nginx 413 http error (payload too large) 이슈 해결
Post
Cancel

[K8S] Ingress Nginx 413 http error (payload too large) 이슈 해결

Description

HTTP 413 Error 란?

image

  • Payload Too Large 상태를 의미하는 것으로, 요청 Entity 가 서버에서 정의된 제한 크기보다 크다는 것을 의미

Error

  • Kubernetes 환경에서 nginx ingress controller 를 사용하여 Ingress 를 사용하는 경우 Request의 Payload 가 큰 경우 아래와 같은 413 에러가 발생
1
2
3
4
5
6
7
8
9
10
DEBUG: 
<HTTPSocketPoolResponse status=413 
headers={'date': 'Wed, 09 Nov 2022 05:26:35 GMT', 
'content-type': 'text/html', 
'content-length': '176', 
'connection': 'keep-alive', 
'x-content-type-options': 'nosniff;', 
'x-frame-options': 'sameorigin', 
'x-xss-protection': '1; mode=block'
}>

Cause

  • 413 http error (payload too large) 에러는 말 그래도 Nginx 에서 해당 Payload 값이 너무 커서 못받아준 것임.
  • 따라서 Nginx 에서 받을 수 있는 body size를 늘려주는 작업이 필요함
  • 해당 값을 설정해주지 않을 경우 Default 값은 1MB 임.
  • 따라서 상황에 맞게 해당 Ingress 의 Proxy-body-size 를 설정해줄 필요가 있다.

Solution

  • 아래와 같이 Ingress 에 Nginx Annotation 을 추가해주면 된다.
  • client-body-buffer-size : 클라이언트 요청 본문 읽기를 위한 버퍼 크기 설정.
  • proxy-body-size : 위의 값을 Global 하게 적용하기 위해서는 해당 설정 값을 nginx controller configmap에 설정해주면 됨.
1
2
3
4
5
6
7
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-test
  annotations:
		nginx.ingress.kubernetes.io/proxy-body-size: 20m
		nginx.ingress.kubernetes.io/client-body-buffer-size: 10m
This post is licensed under CC BY 4.0 by the author.