비즈니스 개발 과정에서 요구 사항이 있습니다: 파일 브라우저를 통해 제공되는 다운로드 서비스는 속도가 제한되어야 합니다. 예를 들어 사용자가 파일 브라우저를 통해 파일을 다운로드하는 경우 각 사용자의 다운로드 속도를 제한해야 합니다. 이 요구 사항을 확장하면 특정 사용자의 다운로드 속도도 제한될 수 있습니다.
현재 기술 스택(k8s + nginx 수신)과 결합하여 이 비즈니스 요구 사항을 달성하려면 해당 nginx 매개 변수를 구성하면 됩니다.
속도 제한은 이름에서 알 수 있듯이 속도 제한입니다.
여기의 비율은 다음과 같습니다.
단일 사용자가 단위 시간에 리소스에 액세스하는 빈도,
단일 IP가 단위 시간에 리소스에 액세스하는 빈도,
할 수도 있습니다. 또한 단위 시간은 지정된 연결의 전송 속도입니다.
보통 후자의 비즈니스 시나리오에는 다운로드 속도 제한이 존재합니다.
속도 제한의 본질은 공정성을 보장하는 것입니다.
제한된 대역폭 리소스의 경우 각 사용자에게 충분한 대역폭 값이 합리적으로 할당될 수 있도록 최선을 다하십시오. 또한 대역폭 리소스가 제한되어 있는 경우 속도 제한을 통해 더 많은 사용자에게 서비스를 제공할 수 있습니다.
또한 속도 제한은 DDOS(분산 서비스 거부) 공격의 영향을 크게 완화할 수도 있습니다.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!