리눅스/nginx

트래픽 관리

Aif 2023. 9. 11. 18:37

처음엔 트래픽이란 말을 정확히 몰랐다. 검색해보니 그냥 전송되는 데이터를 말하는 듯하다.

 

트래픽 관리 > 전송되는 데이터 양 관리

 

책에서는 데이터 관리하는 방법들을 소개하고 있다.

 

1. 사용자에 따라 서비스 분산 - 서비스를 업데이트하고 한번에 모든 사용자에 새로운 버전을 서비스할 경우 오류가 발생하면 모든 사용자가 오류를 경험하게된다

이때 트래픽을 분산해 이전 버전도 함께 서비스하여 오류를 발생을 줄일 수 있다.

split_clients " {관리할 데이터 구분자} " $경로

예시 )

split_clients "${remote_addr}AAA" $variant {
   20% "backendv2";
   *     "backendv1";
}

location {
   proxy_pass http://$variant
}

 

2. GeoIP 모듈과 데이터베이스 활용

- 해외 IP 차단

geoip_country / geoip_city - 관련 지시자 사용가능

책에는 load_module "/usr/lib64/nginx/modules/ngx_http_geoip_module.so"; 를 추가하라는데 안해도 되긴된다.. >>
include /etc/nginx/modules-enabled/*.conf; 로 인클루드 중이었음

예시 )

/etc/nginx/nginx.conf 에 http 나 사용할 프로토콜에 추가 http가 좋을듯

geoip_country /usr/share/GeoIP/GeoIP.dat;
map $geoip_country_code $allowed_country {
       default no;
       KR yes;
}

/etc/nginx/sites-enabled/default 에 서버블록에 추가

server{
...
...
   if($country_access = no) {
return 403;
   }
...
...
}

 

3. 실제 사용자 IP 찾기

geoip_proxy 지시자로 프록시 서버 IP 대역을 정의하고
geoip_proxy_recursive on; 해서 X-Forwarded_For 헤더값을 순차적으로 탐색해 최종 사용자 IP를 확인할 수 있다.

4. 연결 제한

limit_conn_zone $binary_remote_addr zone zone=limitbyaddr:10m >> 저장할 값과 저장할 공간을 크기와 함깨 선언함
limit_conn  저장할 공간(limitbyaddr) 제한 수(40) >> 저장할 공간에 제한 크기를 매개 변수로 줌
limit_conn_status 429; 공간이 제한 되면 보내는 값, 기본 디폴트는 503임

IP주소를 통한 연결 제한은 NAT를 통해 접속한 공인 IP를 제한할 경우 해당 NAT를 통한 모든 네트워크가 제한 될 수도 있다.

5. 요청 빈도 제한

limit_req_zone $binary_remote_addr zone zone=limitbyaddr:10m rate=3r/s; >> rate를 통해 요청 비율을 제한함 (초당 3개로 할 경우 3r/s)
limit_req_status 429;  >> 제한 될 경우 429에러 기본은 503
limit_req zone=limitbyaddr;  >> 어떤 공간을 참조할지 매개변수로 준다

burst 옵션 >> 위의 경우 한번에 5개의 요청을 하면 3개는 수행하고 2개는 에러응답을 날린다.

burst=1의 옵션을 주게되면 2개의 에러 중 하나의 요청을 burst에 저장하고 1개는 에러응답을 날리고 burst에 저장된 요청은 1초후 정상 응답을 날린다.

일종의 버퍼느낌

delay와 nodelay 딜레이 옵션은 1초에 12개의 응답이 들어올 경우 한번에 처리하는 대신 딜레이만큼 대기시간이 걸리게 된다

delay = 9 일 경우 12개의 응답이 오면 9개의 응답을 처리하고 나머지 요청 3개는 3초뒤에 수행한다. 대기하는 동안 동일 사용자의 요청은 에러를 반환함

nodelay는 delay의 최대값이 들어감 위의 경우 delay=12 와 동일

https://bactoria.github.io/2020/01/19/Nginx%EC%9D%98-limit_req-%EB%AA%A8%EB%93%88-%EC%82%AC%EC%9A%A9%EA%B8%B0/ 참고
https://minholee93.tistory.com/entry/Nginx-Rate-Limiting/참고
6. 전송 대역폭 제한

사용자에게 보낼 트래픽 전송 속도를 조절하는 방법

location 경로{ 
  limit_rate_after 10m;
  limit_rate 1m; 
}
으로 설정하면 해당 경로를 사용하는 URI에 대해 누적 전송량이 10M을 넘길경우 초당 1M으로 제한한다.

'리눅스 > nginx' 카테고리의 다른 글

캐시  (0) 2023.09.12
upstream 블럭 / stream 블럭  (0) 2023.09.12
고성능 부하분산  (0) 2023.09.07
설정 파일과 정적 콘텐츠 서비스  (0) 2023.09.07
nginx  (0) 2023.09.06