>운영 및 유지보수 >엔진스 >nginx 수신 속도 제한을 구성하는 방법

nginx 수신 속도 제한을 구성하는 방법

PHPz
PHPz앞으로
2023-05-12 16:52:062072검색

비즈니스 시나리오부터 시작

비즈니스 개발 과정에서 요구 사항이 있습니다: 파일 브라우저를 통해 제공되는 다운로드 서비스는 속도가 제한되어야 합니다. 예를 들어 사용자가 파일 브라우저를 통해 파일을 다운로드하는 경우 각 사용자의 다운로드 속도를 제한해야 합니다. 이 요구 사항을 확장하면 특정 사용자의 다운로드 속도도 제한될 수 있습니다.

현재 기술 스택(k8s + nginx 수신)과 결합하여 이 비즈니스 요구 사항을 달성하려면 해당 nginx 매개 변수를 구성하면 됩니다.

속도 제한이란 무엇인가요?

속도 제한은 이름에서 알 수 있듯이 속도 제한입니다.

여기의 비율은 다음과 같습니다.

  • 단일 사용자가 단위 시간에 리소스에 액세스하는 빈도,

  • 단일 IP가 단위 시간에 리소스에 액세스하는 빈도,

  • 할 수도 있습니다. 또한 단위 시간은 지정된 연결의 전송 속도입니다.

보통 후자의 비즈니스 시나리오에는 다운로드 속도 제한이 존재합니다.

왜 속도 제한이 있나요?

속도 제한의 본질은 공정성을 보장하는 것입니다.

제한된 대역폭 리소스의 경우 각 사용자에게 충분한 대역폭 값이 합리적으로 할당될 수 있도록 최선을 다하십시오. 또한 대역폭 리소스가 제한되어 있는 경우 속도 제한을 통해 더 많은 사용자에게 서비스를 제공할 수 있습니다.

또한 속도 제한은 DDOS(분산 서비스 거부) 공격의 영향을 크게 완화할 수도 있습니다.

nginx 수신의 yaml 파일 구성은 무엇입니까?

Nginx 수신의 속도 제한 구성은 기본적으로 수신의 nginx.ingress.kubernetes.io 주석에서 찾을 수 있습니다.

아래에서는 속도 제한과 관련된 주석을 하나씩 해석하겠습니다.

  • nginx.ingress.kubernetes.io/limit-connections: 다음에서 만들 수 있는 동시 연결 수 동시에 단일 IP 주소. 동시 연결 수를 초과하면 503 오류가 반환됩니다. nginx.ingress.kubernetes.io/limit-connections:单个IP地址可以同时并发连接的个数。如果超过连接并发数,则返回503错误。

  • nginx.ingress.kubernetes.io/limit-rps:限制单个IP每秒钟的请求数(limit request per second)。超出限制,返回503错误。需要注意的是,并不是立刻超出该配置设定的值就马上出现503错误,nginx允许在一定时间范围内的突发请求数的存在(突发请求数 = limit-rps * limit-burst-multiplier)。那么什么时候会出现503呢?这就要从nginx的限流模型展开了。nginx的限流模型就是一个队列(参考线程池的队列模型模型),限流的max连接数=队列处理的能力+队列长度,即max-connections-per-second=limit-rps+limit-rps*limit-burst-multiplier。

  • nginx.ingress.kubernetes.io/limit-rpm:同limit-rps,不过limit-rpm的优先级高于limit-rps,也就是说当同时设置了limit-rpm和limit-rps,以limit-rpm为准。不过当limit-connections也设置了,那么limit-connections的优先级最高。

  • nginx.ingress.kubernetes.io/limit-burst-multiplier:突发请求大小的系数,主要用来定义连接的队列长度,默认是5

  • nginx.ingress.kubernetes.io/limit-rate-after:超过多少流量后执行限速(limit-rate),单位是KB

  • nginx.ingress.kubernetes.io/limit-rate:单个连接每秒的限速值,单位是KB。

  • nginx.ingress.kubernetes.io/limit-whitelist:设定IP白名单,在该白名单内的IP不被限速,支持CIDR,多个IP可用逗号隔开。

注意

  • 当limit-connections, limit-rps, limit-rpm同时设定时,优先级是limit-connections>limit-rpm>limit-rps

  • limit-rate-after和limit-rate生效的前提是 nginx.ingress.kubernetes.io/proxy-buffering: "on"

  • nginx.ingress.kubernetes.io/limit-rps: 단일 IP에 대한 초당 요청 수를 제한합니다(초당 요청 제한). 제한을 초과하면 503 오류가 반환됩니다. nginx에서는 특정 시간 범위 내에서 버스트 요청 수(버스트 요청 수 = 제한-rps * 제한-버스트)가 존재하도록 허용합니다. -승수). 그렇다면 503은 언제 나타날까요? 이는 nginx의 현재 제한 모델로 시작됩니다. nginx의 현재 제한 모델은 대기열입니다(스레드 풀의 대기열 모델 참조). 현재 제한의 최대 연결 수 = 대기열 처리 능력 + 대기열 길이, 즉 초당 최대 연결 수 = 제한 - rps + 제한-rps* 제한-버스트-승수.

nginx.ingress.kubernetes.io/limit-rpm:limit-rps와 동일하지만,limit-rpm은limit-rps보다 우선순위가 높습니다. 즉,limit-rpm이 rpm과limit-rps를 동시에 설정하고,limit-rpm에 따라 설정됩니다. 그러나 제한 연결도 설정된 경우 제한 연결의 우선순위가 가장 높습니다.

nginx.ingress.kubernetes.io/limit-burst-multiplier: 버스트 요청 크기 계수. 주로 연결의 대기열 길이를 정의하는 데 사용되며 기본값은 5🎜🎜🎜🎜입니다. nginx.ingress.kubernetes.io/limit-rate-after: 트래픽이 한도를 초과한 후 속도 제한(limit-rate)이 실행되며 단위는 KB🎜🎜🎜🎜 nginx.ingress.kubernetes.io/limit-rate: 초당 단일 연결의 속도 제한 값(KB)입니다. 🎜🎜🎜🎜nginx.ingress.kubernetes.io/limit-whitelist: 화이트리스트의 IP는 속도 제한이 없습니다. 여러 IP를 쉼표로 구분할 수 있습니다. . 🎜🎜🎜🎜참고🎜🎜🎜🎜limit-connections,limit-rps,limit-rpm을 동시에 설정하는 경우 우선순위는limit-connections>limit-rpm>limit-rps입니다. 🎜🎜🎜 🎜제한 비율 이후 및 제한 비율이 적용되기 위한 전제 조건은 nginx.ingress.kubernetes.io/proxy-buffering: "on"🎜🎜🎜🎜위에 언급된 IP입니다. SLB와 구별해야 합니다. 아니면 실제 사용자 IP를 얻으세요🎜🎜🎜🎜4. 비즈니스 요구에 대한 솔루션🎜🎜이러한 지식 사항을 명확히 한 후 비즈니스 자체에 간단히 추가할 수 있습니다. 비즈니스 수신의 구성 파일 다음 구성을 추가하기만 하면 됩니다. 🎜
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    ...
    nginx.ingress.kubernetes.io/proxy-buffering: on
    nginx.ingress.kubernetes.io/limit-rate: 10 # 单位是KB
  name: xxx
  namespace: yyy
spec:
  ingressClassName: nginx
  rules:
    ...

위 내용은 nginx 수신 속도 제한을 구성하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제