Nginx에서 파일 업로드 사이즈 용량 처리

Posted by , March 31, 2023
Nginx
Series ofNginx

thumbnail

파일 업로드를 했는데...

흑우집합소를 개발하고, 로컬에서 잘 되던 파일 업로드 기능이 이상하게 배포만 하면 에러가 났다. -_-;;
Nest.Js의 서버측에서는 파일 사이즈를 분명 설정하고 잘 맞춰뒀는데 왜 그런 에러가 발생하는지 이유가 궁금했다...

img01

에러는 복잡했는데 Status코드가 413이 돌아왔다.

이 에러 코드는 클라이언트에서 보낸 요청의 크기가 서버에서 설정한 최대 한도를 초과해서 발생하는 문제다.
근데 서버는 분명 설정을 해뒀으니 누가 문제일까?

역시 범인은 Nginx였다.

처리방법은?

몹시 간단하다.
Nginx의 설정 값 중 client_max_body_size 값을 지정해주면 된다. (마크다운 문법 에러 때문에 _ 조심)

client_max_body_size 설정하기

nginx의 설치된 경로에 별도로 바꾸지 않았다면, nginx.conf파일을 열고 아래와 같이 값을 입력해준다.

user www-data;
worker_processes auto;
pid /run/nginx.pid;

http {

	##
	# Basic Settings
	##

	sendfile on;
	tcp_nopush on;
	types_hash_max_size 2048;
	client_max_body_size 100m; # 이 부분처럼 설정해주고 용량을 적당하게 지정하자.

    ....
}

이렇게 처리하면 잘 될 것이다.
만약 위에 client_max_body_size 옵션 만으로도 에러가 지속되면 버퍼쪽도 올려줘야 한다.

proxy_buffer_size와 proxy_buffers 설정하기

참고로 Nginx는 기본 버퍼가 16KB다.
그래서 이 부분을 더 늘려서 사용하면 된다.

이것도 위에 나온 경로에 아까 설정한 client_max_body_size 값 바로 아래에 정해준다.

user www-data;
worker_processes auto;
pid /run/nginx.pid;

http {

	##
	# Basic Settings
	##

	sendfile on;
	tcp_nopush on;
	types_hash_max_size 2048;
	client_max_body_size 100m;
    proxy_buffer_size   64k; # 버퍼 설정 64KB
    proxy_buffers   4 64k; # 버퍼 설정 64KB

    ....
}

정리

마크다운 버그인지 저기 속성들이 _(언더바)가 들어가는데 2개 이상 쓰면 저렇게 글이 뭉개진다.
그래서 저 옵션은 꼭 잘 확인하자.

이렇게 처리한다면 더 이상 413이니 이상한 에러는 안날 것이다.
물론 백엔드 코드가 잘못되어 있다면 에러는 발생하겠지만...

PS : 하다보니 Nginx가 범인이 아니라 무지한 내가 범인인듯....