Nginx/1.0.12 działający jako proxy na Debianie 6.0.1 zaczyna wyświetlać następujący błąd po uruchomieniu przez krótki czas:proxy nginx: connect() do ip: 80 nie powiodło się (99: Nie można przypisać żądanego adresu)
connect() to upstreamip:80 failed (99: Cannot assign requested address) while connecting to upstream, client: xxx.xxx.xxx.xxx, server: localhost, request: "GET/HTTP/1.1", upstream: "http://upstreamip:80/", host: "requesteddomain.com"
Nie wszystkie żądania powodują ten błąd, więc podejrzewam, że ma to związek z obciążeniem serwera i pewnym limitem, który został osiągnięty.
Próbowałem podnieść ulimit -n do 50k i worker_rlimit_nofile również do 50k, ale to nie wydaje się pomóc. lsof -n pokazuje w sumie 1200 linii dla nginx. Czy istnieje limit systemowy dla połączeń wychodzących, który może uniemożliwić Nginxowi otwarcie większej liczby połączeń z serwerem nadrzędnym?
Nie jestem pewien, czy to by pomogło, ponieważ problem nie był atakiem DOS skutkującym dużą ilością TIME_WAIT, ale tylko ogromną liczbą regularnego ruchu, który miał przejść i nie został zabity z szybszym TIME_WAIT timeout . – mariow
@mariow, na moim serwerze istnieje ogromna ilość żądań wychodzących (robota), więc szybkie ponowne użycie TIME_WAIT jest essenstialem. – diyism
net.ipv4.tcp_tw_recycle jest uszkodzony i został usunięty z systemu Linux 4.12: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=4396e46187ca5070219b81773c4e65088dac50cc ponowne użycie jest również niebezpieczne: https://vincent.bernat.im/en/blog/2014-tcp-time-wait-state-linux Lepiej nie używać tych opcji. – pva