서버를 돌리면 무지성으로 해외에서 봇을 통해서 크롤링하는건지 무수한 요청을 하는 아이피가 종종 보인다.
그 때문에 백그라운드로 express서버를 돌려놓으면 어느새 서버가 꺼져있는 경우가 있다.
nginx에서 요청 제한을 설정해봤다.
1. limit_req_zone 설정
시간당 request 개수를 설정한다.
limit_req_zone $binary_remote_addr zone=ddos_req:10m rate=5r/s;
server {
# ...
location / {
limit_req zone=ddos_req;
# ...
}
}
$binary_remote_addr
=> 클라이언트 ip 주소 정보
zone=ddos_req:10m
=> 클라이언트의 request를 저장하는 메모리 영역 확보, 메모리 영역 이름 ddos_req, 10m는 10mb를의미한다.
rate=5r/s
=> 1s(초)당 5개의 request를 할당 지정. ex)30r/m 은 최대 1분에 30개 요청
limit_req zone=ddos_req
=> 설정한 limit_req_zone 적용, 메모리영역은 ddos_req로
최대 요청 개수를 벗어나는 요청에는 503 응답을 디폴트로 하게된다. 응답 코드는 설정이 가능
ex) limit_req_status 404;
초과된 request에 허용을 해줄수 있는 burst 옵션이 있다.
limit_req zone=ddos_req burst=5;
초과된 request 최대 5개까지 임시로 저장한 후 처리가 가능하다. 따라서 최대 1초에 10개
2. limit_conn_zone 설정
하나의 클라이언트 ip의 동시 요청 개수를 제한하는 설정
limit_conn_zone $binary_remote_addr zone=ddos_conn:10m;
server {
# ...
location /login {
limit_conn ddos_conn 10;
# ...
}
}
limit_conn ddos_conn 10
=> ip당 동시 최대 10개 request 까지만 처리한다
3. request timeout 설정
server {
client_body_timeout 5s;
client_header_timeout 5s;
# ...
}
body와 header의 최대시간을 5초로 설정한다.
기본값은 60초
'Server' 카테고리의 다른 글
[Linux] Ubuntu 사용자 계정 생성 및 접속 설정 (0) | 2024.02.18 |
---|---|
iptables 80포트 설정 (0) | 2022.09.13 |
Nginx 413 Request Entity Too Large 에러 (0) | 2021.09.14 |
Nginx https 적용하기 openssl 사용, http https로 리다이렉트 (0) | 2021.09.08 |