2013-02-26 9 views
13

descrizione Problema log di Apacheundestanding “408 Request Timeout” Apache con PHP

mi articoli simili a questo nel file di log di Apache trovato formato di registro personalizzato e 408 qui sta per stato. Il formato di log è:

LogFormat "%h %t %D %V \"%r\" %>s %b \"%{User-agent}i\"" detailed 

e normalmente la linea nel file di registro si presenta come

184.73.232.108 [26/Feb/2013:08:38:16 -0500] 30677 www.site.com "GET /api/search... HTTP/1.1" 200 205 "Zend_Http_Client" 

Questo è il motivo per cui 408 linee di errore guardano strano per me. Nessuna richiesta viene registrata e non ho idea di cosa debba essere ottimizzato.

Domande

Come affrontare il problema? Quali ulteriori informazioni o registri dovrei raccogliere? Cosa potrebbe causare il problema? È qualcosa di sbagliato sul server? O questo è assolutamente un problema di connettività di rete?

Mi sto rivolgendo a questo perché il nostro cliente si è lamentato di avere 408 errori sul suo cellulare. Ho trovato molti record nel file di registro, ma devo ammettere che non so cosa fare con questo.


La mia ricerca

Ci sono diverse domande su questo argomento già qui. Ma le persone sono molto più specifiche. Come se avessero problemi con alcuni software client e script specifici. Qui ho appena ricevuto l'errore durante l'apertura di alcune pagine su iPhone.

Ad esempio in HTTP, 408 Request timeout, è consigliabile eseguire la richiesta GET prima del POST. Se ho un client personalizzato posso farlo. Ma non posso controllare il comportamento del browser dell'utente.

Indovina # 1

Durante la ricerca Internet e pensare al problema che ho trovato https://serverfault.com/questions/383290/too-many-408-error-codes-in-access-log

Il suggerimento è quello di aggiornare il parametro di configurazione Timeout al suo valore di default.

# 
# Timeout: The number of seconds before receives and sends time out. 
# 
Timeout 300 

Ho provato prima il valore 30 perché pensavo che 30 secondi fossero sufficienti. Ma anche con un valore predefinito di 300 secondi, continuo ad ottenere gli errori nel registro. Ho fatto tail -f mentre stavo scrivendo questo testo e ho ottenuto più di 10 righe in pochi minuti.

Per me questo non sembra una soluzione completa.

+0

Ho appena trovato la domanda http://serverfault.com/questions/383290/too-many-408-error-codes-in-access-log –

+0

Il nostro timeout è stato impostato su 5 invece che sul valore predefinito 30. I 'l'ho cambiato di nuovo al valore di default 30. Metterò l'aggiornamento a breve se sto ancora ottenendo questi errori nel file di registro. –

+1

Quindi dare una risposta, spiegando perché l'altra domanda su serverfault è la stessa, e accettarla più tardi. – mliebelt

risposta

10

Dopo alcuni studi sull'argomento sono giunto alla seguente risposta. È fornito dal nostro sviluppatore principale e penso che dia una buona spiegazione dell'argomento.

Questi errori sono perfettamente normali.Non sono un segno di un problema più grande, ma le normali connessioni che tengono aperto Apache più a lungo di quanto consentito.

Ad esempio, le query del cliente che le eseguivano ripetutamente mantenevano Apache aperto. Apache rispose chiudendolo giustamente.

Se così non fosse, una manciata di persone potrebbe prendere il controllo del nostro server e non consentire a nessun altro di connettersi.

Molto spesso questi errori provengono da sistemi in cerca di exploit e possono essere ricreati aprendo una sessione telnet e lasciandola aperta.

Allo stesso tempo, coda del registro di accesso e entro X time (KeepAliveTimeout) vedrai il tuo IP popup con gli stessi codici di errore.

Indietro nei giorni di Apache 1.3, questo errore era comune, ma poi il 2.2 è uscito e lo hanno rimosso finché un numero sufficiente di noi ha chiesto di essere restituito poiché ci dà idee su quante persone si stanno aprendo solo la porta, e non richiedere una risorsa reale, ecc.

Penso che non si debba fare altro qui tranne per assicurarsi di impostare il Timeout su un valore ragionevole come ho descritto nella domanda originale.

+0

Non penso che il 'KeepAliveTimeout' sia rilevante qui - quell'impostazione è usata per controllare le funzionalità che lasciano aperte le connessioni dopo che una risposta è stata inviata. L'impostazione della chiave qui (come hai trovato) è 'Timeout' (tempo complessivo di richiesta/risposta), ma potresti scoprire che' mod_reqtimeout' è abilitato e configurato per timeout di richieste vuote prima (tramite 'RequestReadTimeout'). – simpleigh

+0

In realtà il KeepAliveTimeout è rilevante. Se KeepAlive è attivo e la richiesta HTTP non è completata nel tempo KeepAliveTimeout, causerà un errore 408. Se KeepAlive è disattivato, la direttiva Timeout ha la precedenza. Ho provato questo con dispositivi embedded lenti con server Apache. –