앞서 포스팅에서 했던 방법으로 EB를 통해 호스팅한 서버에서 S3로 이미지를 보내는 와중에
클라이언트(앱)에서 413 에러를 response 받았다.
서버 로그를 찍어보니... nginx 로그에서 에러가 찍혀있었다.
[error] 32211#32211: *9131 client intended to send too large body: 6115831 bytes
음... 딱봐도 뭔가 큰걸 보내서 터졌다는 말인듯하다. 한 6MB 정도 되어보이는데(아이폰은 이미지 용량이 크기도 하네...), 가공 없이 보내니까 터졌다. nginx를 뒤적거려보니 파일 전송 limit가 걸려있어서 설정을 바꿔줘야 한다고 했다.
근데 여기서... 늘 ec2에 접속해서 배포할 때마다 설정을 건들여주기엔... 그러면 CD를 하는 의미가 없다
좀 더 뒤적거려보니 elastic beanstalk에서 nginx 설정을 해줄 수 있는 방법이 있었다.
root에서 .platform/nginx/conf.d/elasticbeanstalk 안에 proxy.conf를 만들어준다. 여기에 설정값을 적으면 서버에 띄워질 때 자동으로 nginx 설정을 update 한다고 한다.
client_max_body_size 10M;
하라는대로 body에 보낼 수 있는 size를 10mb로 늘려줬다.
이젠 잘 되겠지하며 다시 사진을 찍어서 보냈더니?? 에러는 안나는데 또 S3에 사진은 안올라간다...
또 다시 로그를 찍어본다...
[warn] 7437#7437: *9 a client request body is buffered to a temporary file /var/lib/nginx/tmp/client_body/0000000001
(음 그래도 error에서 warn으로 내려왔네...)
이번엔 버퍼가 작아서 다른곳에 임시로 저장했다고 한다. 에러 메시지를 검색해보니
client_body_buffer_size 10M;
이렇게 추가로 적어주면 된다고 한다.
아주 잘 업로드 된다.(근데 client단에서 압축하긴 해야할듯... S3가 너무 비싸다)