SSL negotiation failures causing 408 error to be returned

Maxim Dounin mdounin at mdounin.ru
Mon Apr 16 10:59:30 UTC 2012


Hello!

On Sun, Apr 15, 2012 at 11:34:48PM -0400, bpiraeus wrote:

> While debugging for a client, we found that we're seeing significant
> numbers of 408s being generated for SSL connections. It seems to be
> MOSTLY Chrome on a Windows 7 base with some MSIE 9.0 (also on Win 7) as
> user agents go, and at this point I'm completely stumped. We've tried
> disabling session cache, upping timeout values, enabling/disabling
> keepalives, nothing seems to stem the steady flow of these. Below is a
> sample debug log (I've redacted specific pieces for business reasons).
> What I see a lot of is 6 simultaneous connections being setup, 2 being
> used, and then 4 timing out 60s later. Invariably, if I enable full
> debug, I see 'client timed out (60: Operation timed out) while SSL
> handshaking' which makes no sense. If I turn on logging for session IDs,
> I can clearly see the clients being sent 408s are being assigned session
> IDs which says to me they're completing the SSL negotiation and then
> just.. sitting idle.

This is because Chrome opens many connections to a server from 
very start, trying to reduce latence in case of these connections 
will be useful.  If they aren't - they are just kept idle and 
either closed by Chrome (in this case you'll likely see 400 in 
logs) or timed out (in this case you'll see 408).

[...]

> 2012/04/14 14:52:41 [debug] 99433#0: *3313 http process request line
> 2012/04/14 14:52:41 [info] 99433#0: *3313 client timed out (60:
> Operation timed out) while SSL handshaking, client: <CLIENT IP>,
> server:

The "while SSL handshaking" part of the message is a bit 
misleading.  Probably something like this will make things a bit 
better:

--- a/src/http/ngx_http_request.c
+++ b/src/http/ngx_http_request.c
@@ -612,6 +612,8 @@ ngx_http_ssl_handshake_handler(ngx_conne
 
         c->ssl->no_wait_shutdown = 1;
 
+        c->log->action = "reading client request line";
+
         c->read->handler = ngx_http_process_request_line;
         /* STUB: epoll edge */ c->write->handler = ngx_http_empty_handler;
 


Maxim Dounin



More information about the nginx mailing list