2013-07-08 11 views
6

Używamy nginx z serwerem aplikacji jako zaplecza.Nginx: Ogranicz liczbę równoczesnych połączeń dla IP do backendu

Musimy ograniczyć liczbę jednoczesnych połączeń dla jednego adresu IP do backendu. W tym celu zastosowaliśmy dyrektywę nginx limit_conn. Ale nie działa dobrze we wszystkich przypadkach. Jeśli użytkownik wygeneruje wiele połączeń z jednego adresu IP i szybko je zamknie, to nginx przekaże to żądanie do zaplecza, ale ponieważ połączenie klienta jest już zamknięte, to połączenie nie jest wliczane w numer limit_conn.

Czy jest możliwe ograniczenie liczby jednoczesnych połączeń dla jednego adresu IP do serwera zaplecza za pomocą nginx?

Odpowiedz

3

Możesz ustawić

proxy_ignore_client_abort off; 

Określa, jeżeli połączenie z serwerem proxy być zamknięte jeśli klient zamyka połączenie, nie czekając na odpowiedź.

z documentation

Kolejna propozycja jest użycie limit_req ograniczyć szybkość żądania.

+0

Zespół deweloperów Nginx sugeruje również użycie 'proxy_ignore_client_abort off'. Działa do tej pory. – Anton

0

Obawiam się, że ten obiekt nie jest jeszcze dostępny dla nginx po wyjęciu z pudełka. Według Nginx FAQ

wielu użytkowników zażądał Nginx zaimplementować funkcję w równoważenia obciążenia aby ograniczyć liczbę żądań na backend (zazwyczaj do jednego). Choć planowane jest wsparcie dla tego, warto wspomnieć, że popyt dla tej funkcji jest zakorzeniona w niewłaściwych zachowań ze strony aplikacji jest zastępowanym

Widziałem jakieś 3rd moduł Stronom do tego nginx-limit-upstream ale jestem Nigdy nie próbowałem.

Powiązane problemy