본문 바로가기
미들웨어/Nginx

NGINX 요청의 크기를 조절해보자. (client_max_body_size)

by leedonggeun 2023. 10. 1.

NGINX

0. 이런 에러메시지를 만나보셨나요?

그렇다면 아래 글을 확인하여 이 에러를 헤쳐나가 봅시다.

Failed to load resource: the server responded with a status of 413 (Request Entity Too Large)

 

1. 에러가 발생한 이유

NGINX에서 업로드하는 파일의 용량을 기본적(default)으로 1MB로 제한하기 때문입니다.
왜 제한하냐고요? 당연히 공격을 피하기 위해서입니다.

만약, 파일 용량에 제한을 두지 않는다면 공격자들은 해당 서버로 용량이 큰 파일을 지속적으로 업로드하려고 시도할 것입니다.

 

2. 그럼 어떻게 파일 용량을 조절할까?

기본적으로는 nginx.conf의 http 블록에서 설정할 수 있습니다.
바로 client_max_body_size라는 디렉티브로, 아래는 모든 요청에 대해 10MB까지 허용하도록 설정한 것입니다.

이후 설정을 확인(nginx -t) 후 재시작하여 설정을 적용하여 파일을 업로드해 보면 정상적으로 업로드가 될 것입니다.

http {
  ...
  ...
  
  client_max_body_size	10M;

}


[root@server ~]# nginx -t
[root@server ~]# nginx -s reload

 

3. 조금 더 심화해 볼까요?

만약, 우리가 서비스하는 애플리케이션이 웹메일 서비스라고 가정해 봅시다.
일반적으로 서비스를 사용할 땐, HTTP 요청이기 때문에 HTTP 요청의 크기가 10M을 넘어가는 일은 잘 없습니다.

하지만 우리는 메일을 보낼 때 용량이 큰 파일을 [대용량 첨부파일]이라는 이름으로 첨부하곤 합니다.
약 1GB 혹은 5GB까지도요.

이를 위해 이번엔 기본 요청은 10M, 대용량 첨부파일을 업로드할 때만 5GB로 설정하고자 합니다.

http {
    # 기본적으로 10M로 설정
    client_max_body_size	10M;

    server {
        listen	80;
        server_name	test.dglee.co.kr;
        
        location /api/v1/bigfile/upload {
            client_max_body_size	5G;
        }
        
        ...
        ...
    }
    
    ...
    ...
}

이제 우리는 모든 요청은 10M까지, /api/b1/bigfile/upload라는 요청에 대해서는 5GB까지를 허용할 수 있습니다.

 

참고

https://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size

 

Module ngx_http_core_module

Module ngx_http_core_module Directives Syntax: absolute_redirect on | off; Default: absolute_redirect on; Context: http, server, location This directive appeared in version 1.11.8. If disabled, redirects issued by nginx will be relative. See also server_na

nginx.org

 

댓글