Description
HTTP 413 Error 란?
- 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