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
'미들웨어 > Nginx' 카테고리의 다른 글
NGINX의 HTTP 메서드를 제한해보자 (0) | 2023.05.14 |
---|---|
HTTP 응답에서 NGINX의 버전 정보를 숨겨보자 (0) | 2023.05.13 |
NGINX의 설정에 대해 쉽게 알아보자. (0) | 2023.05.10 |
웹서버 중 NGINX를 설치해보자! (0) | 2023.05.10 |
댓글