2012-10-21 21 views
7

Stiamo riscontrando problemi con il nostro server Web (configurato ssl -> apache -> jetty) che respinge casualmente le richieste POST di caricamento multipart con un codice di errore 400 Richiesta non valida. Il log degli errori di Apache (a livello info) mostra i seguenti due errori:Apache multipart POST "corpo richiesta passata non riuscito"

[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 

o

[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 

entrambi i casi risultato dal lato client in un 400 Bad Request. A volte il nostro server jetty non vede nemmeno la richiesta, il che significa che viene respinto sul lato apaches, a volte inizia a elaborarlo solo per essere rifiutato (questo si manifesta come MultipartException nel nostro UploadFilter)

Abbiamo setup mod_proxy da usare uno schema di bilanciamento del carico di riserva, ma i registri mostrano che non è ancora stato attivato un fallback che mi fa ritenere che questa non sia la causa del problema.

Ho provato a impostare SetEnv proxy-sendcl 1 ma questo non ha modificato nulla.

Le richieste di upload sono su 1 MB. Solo queste richieste POST di file multipart hanno esito negativo, abbiamo più richieste GET che arrivano nello stesso momento e funzionano sempre come previsto.

Se qualcuno può condividere qualche consiglio o suggerimento sarei molto grato! Grazie

risposta

1

Si prega di controllare questo: https://issues.apache.org/bugzilla/show_bug.cgi?id=44592

Il problema potrebbe essere causato dal keepalive HTTP (direttiva KeepAliveTimeout) che sta uccidendo una connessione stabilita con un client lento (latenza tcp, la creazione di richiesta di corpo lento, ecc) .

Cerca di aumentare il KeepAliveTimeout nel tuo apache conf, ma non tenerlo troppo in alto per evitare di uccidere il tuo server (DOS).

1

Se si utilizza un server di backend abilitato per ajp, come Tomcat, è possibile provare a utilizzare mod_proxy_ajp anziché mod_proxy_http. Ho avuto un problema simile su un caricamento di app pesante e ho riparato cambiando

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

da

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

E 'anche necessario per attivare il connettore AJP sul lato Tomcat, naturalmente.

Spero che aiuti!

+0

Ciò funziona correttamente. Grazie. Ma non sono sicuro del perché il proxy http non funzioni su un server particolare. La configurazione di Httpd è la stessa. –

0

Dopo aver risolto il problema principale con l'upload, ero ancora ricevendo alcuni registri strane come:

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

sono stato in grado di ridurre drasticamente la frequenza è coccurs aumentando i limiti di mod_reqtimeout, cambiando i valori di RequestReadTimeout parametro. È possibile modificare i valori predefiniti o ridichiarare questo parametro sul proprio VirtualHost.

+0

Come hai risolto il problema in primo luogo? – smoes

+1

È la mia altra risposta a questa domanda – BrunoJCM

Problemi correlati