以前、multipart/form-dataを使ったファイルアップロードについて紹介しました。ファイルアップロードするプログラムをkuberntesのクラスタで動作させていた際に413 Request Entity Too Largeというエラーが発生した際の対処方法について紹介したいと思います。
稼働環境
発生時の環境は、Docker for Desktopのkubernetesを使って環境構築していました。
Ingressは、ingress-nginxを利用しています。
Nginxをプロキシとして稼働している場合
nginxをプロキシして動作させている場合の対処方法について、紹介します。下記は、nginxの設定ファイル例です。
server {
listen 80;
server_name example.com;
root /var/www/html/example;
index index.php index.html;
client_max_body_size 10m;
・・・
}
上記例は、client_max_body_sizeを各サーバー設定の中に書き込みましょう。
10mというのは10メガバイト、という意味です。もっと容量を大きくしたい場合は各自変更するか、0を設定することで上限なしとすることができます。
Ingress-nginxの場合
ingress-nginxの場合は、Annotationsを使って制御を行います。
nginxのclient_max_body_sizeに対応するものnginx.ingress.kubernetes.io/proxy-body-sizeに当たります。ingressのマニュフェスト例は、下記のようになります。
apiVersion: "networking.k8s.io/v1"
kind: Ingress
metadata:
name: sample-local
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$1
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/proxy-body-size: "0"
spec:
rules:
- http:
paths:
- path: /(.*)
pathType: Prefix
backend:
service:
name: sample-web
port:
number: 80
この設定をすると413エラーがなくなります。他のパブリッククラウドのIngressでも似たような項目があるので、413エラーで引っかかった場合には、Ingressの仕様について確認すると良いかもしれません。