2012-10-21 14 views
7

Mamy problemy z naszym serwerem internetowym (który jest skonfigurowany jako ssl -> apache -> pomost) losowo odrzucając wielostronicowe żądania wysyłania POST z kodem błędu 400 nieprawidłowych żądań. Dziennik błędów Apache (na poziomie informacyjnym) wykazuje następujące dwa błędy:Wielostronne żądanie POST "Prześlij żądanie" nie powiodło się "

[info] [client x1.y1.z1.w1] (70007)The timeout specified has expired: SSL input filter read failed. 
[error] proxy: pass request body failed to x.y.z.w:8087 from x1.y1.z1.w1 
[info] [client x1.y1.z1.w1] Connection closed to child 74 with standard shutdown 

lub

[info] [client x2.y2.z2.w2] (70014)End of file found: SSL input filter read failed. 
[error] proxy: pass request body failed to x.y.z.w:8087 from x2.y2.z2.w2 
[info] [client x2.y2.z2.w2] Connection closed to child 209 with standard shutdown 

oba przypadki wynikają ze strony klienta w 400 Bad Request. Czasami nasz serwer pomostowy nie widzi nawet żądania, co oznacza, że ​​zostaje odrzucony po stronie apache, czasami zaczyna przetwarzanie jest tylko do odrzucenia (to manifestuje się jako wyjątek MultipartException w naszym filtrze UploadFilter)

Mamy konfigurację mod_proxy do użycia schemat równoważenia obciążenia awaryjnego, ale dzienniki pokazują, że ponowne uruchomienie nie zostało jeszcze uruchomione, co powoduje, że jestem przekonany, że to nie jest przyczyną problemu.

Próbowałem ustawić SetEnv proxy-sendcl 1, ale to niczego nie zmieniło.

Żądania przesyłania wynoszą 1mb. Tylko te wielostronicowe żądania POST dla plików typu "fail" nie powiodą się, mamy wiele żądań GET przychodzących w tym samym czasie i zawsze działają zgodnie z oczekiwaniami.

Jeśli ktokolwiek może podzielić się radą lub sugestiami, byłbym bardzo wdzięczny! Dziękuję

Odpowiedz

1

Proszę sprawdzić ten jeden: https://issues.apache.org/bugzilla/show_bug.cgi?id=44592

Problem może być spowodowany przez keepalive HTTP (dyrektywa KeepAliveTimeout), który jest zabicie nawiązanego połączenia z powolnym klienta (TCP latencji, powolne tworzenie prośba ciała, itp) .

Spróbuj podnieść KeepAliveTimeout w konflikcie Apache, ale nie utrzymuj go zbyt wysoko, aby uniknąć zabicia twojego serwera (DOS).

1

Jeśli używasz serwera zaplecza z włączoną obsługą AJP, takiego jak Tomcat, możesz spróbować użyć mod_proxy_ajp zamiast mod_proxy_http. Miałem podobny problem na ciężkim przesyłania aplikacji i naprawiłem to przez zmianę

ProxyPass /myapp http://localhost:8080/myapp 
ProxyPassReverse /myapp http://localhost:8080/myapp 

przez

ProxyPass /myapp ajp://localhost:8009/myapp 
ProxyPassReverse /myapp ajp://localhost:8009/myapp 

Jest również konieczne, aby umożliwić złącze AJP na Tomcat strony, oczywiście.

Mam nadzieję, że pomoże!

+0

To działa dobrze. Dzięki. Ale nie jestem pewien, dlaczego serwer proxy HTTP nie działa na jednym konkretnym serwerze. Konfiguracja Httpd są takie same. –

0

Po zamocowaniu główny problem z upload, ja wciąż się dziwne logi jak:

[reqtimeout:info] [pid 18164:tid 140462752990976] [client 201.76.162.37:41473] AH01382: Request header read timeout 

udało mi się zmniejszyć drastycznie częstotliwość to coccurs poprzez zwiększenie limitów mod_reqtimeout, zmianę wartości RequestReadTimeout parametr. Możesz zmienić wartości domyślne lub ponownie określić ten parametr na swoim VirtualHost.

+0

W jaki sposób rozwiązać problem w pierwszej kolejności? – smoes

+1

To moja druga odpowiedź na to pytanie – BrunoJCM

Powiązane problemy