analizzando gli header inviati dal mio server, non c'è nessun header che definisce la connection se deve essere close o keep alive..
secondo voi cambia qualcosa ad usare quest'header? o l'uno vale l'altro?
grazie
Benvenuto nella nostra community, registra un account gratuito ADESSO!
Oltre 7000 persone hanno già registrato il loro account.
Chiedi aiuto, conversa con aziende ed esperti del settore webhosting italiano.
Iscriviti subito! In meno di 2 minuti!
analizzando gli header inviati dal mio server, non c'è nessun header che definisce la connection se deve essere close o keep alive..
secondo voi cambia qualcosa ad usare quest'header? o l'uno vale l'altro?
grazie
hola
beh direi che cambia un mondo!
Quando non specificato la connessione è di tipo CLOSE ovvero dopo che la richiesta viene eseguita il webserver deve chiudere la connessione. Quella di tipo Keep Alive invece permette al browser, o in generale al client, di effettuare più richieste HTTP nella stessa connessione.
La differenza? Considera che il webserver deve spawnare un fork/thread (o recuperarne uno dalla cache dei fork/thread) per gestire la tua connessione e quindi risparmi TANTO lavoro perché dato che la connessione e sempre la stessa non fa nulla in più. Inoltre considera che cosi elimini l'overhead di dato dal kernel e dalle librerie base del so che vanno a gestire il tutto che, se pur minimo, c'è sempre e su un alto numero di connessioni si fa sentire.
ovviamente ci sono i risvolti della medaglia: un numero troppo elevato di connessioni keep alive permette a chi vuol far danno di killare la macchina! Anche se c'è un timeout (ovvero una durata massima per la connessione keep alive) in quel frangente una singola richiesta viene mantenuta e quindi bisogna fare meno lavoro per saturare le richieste di una macchina ... infatti invece di startare sempre a rotazione, per dire, 100 connessioni ... 10 (mettendo che 10 sia il limite di connessioni keep alive) saranno sempre sature per 15/20 secondi e quindi l'attacker ha bisogno di una potenza di calcolo un pò più ridotta per saturare le connessione ... la conseguenza è che si saturano più facilmente le macchine!
E' fondamentale trovare un giusto compromesso che non uccida la macchina sotto attacco o sotto carichi elevati e nel frattempo non blocchi il client che tenta di risparmiare operazioni![]()
Io sono
Salve,scusate se riutilizzo questo thread ma mi pare il più consono al mio problema.
Io ho un piccolo pannello in php/mysql creato da me che mi gestisce news con relativo lato amministrativo. Un piccolo cms.
Il problema è il seguente: nell'header non specifico se la connessione è di tipo keep-alive oppure close (vedo che pochissimi lo impostano).
Ad ogni modo caricando questo piccolo cms su un dedicato con apache2 e php5 l'header è keep-alive.
In un altro dedicato con nginx 1.0.4+ php-fpm mi da close.
Ho cercato molto in giro,ma non ho trovato nessun problema di questo tipo.
Avete già avuto problemi di questo tipo?
Io avrei la necessità,per problemi di latenza,di utilizzarlo con il keep-alive,ma non so come muovermi.
Cosa sbaglio? Devo controllare qualche impostazione particolare su nginx o php-fpm?
Vi ringrazio anticipatamente.
Devi intervenire su nginx, la gestione delle connessioni è fatta lato server.
Non sono troppo sicuro ma se cambi l'header Connection da PHP il webserver molto probabilmente lo sovrascriverà con il suo.
Per fare quello che chiedi devi intervenire su nginx.
http://www.web4web.it - Low Cost Hosting
Tutti i pacchetti sono multidominio.
Database e domini illimitati a partire da €10
http://www.guest.it - Servizi professionali su misura.
Bene,grazie mille per le informazioni. Veniamo alla parte pratica.
Avevo già provato a mettere nel .config di nginx:
keepalive_timeout 70 70;
keepalive_requests 10;
riavvio nginx,ma non cambia nulla,tranne che per i file .gif,jpg,js ecc ecc i quali vengono inviati in keep-alive con il timeout impostato,ma i file .php nulla.
Quello che vedo con live http header sia con il keepalive_timeout sia senza, è la seguente cosa:
Mentre caricando le immagini (con un refresh) della pagina, la seconda parte del codice diventa:Codice:GET /index.php HTTP/1.1 Host: xxx User-Agent: xxx Accept: text/html,application/xhtml+xml,application/xml; Accept-Language: it-it,it; Accept-Encoding: gzip, deflate Accept-Charset: ISO-8859-1,utf-8; Referer: http://xxx/index.php Cookie: xxx DNT: 1 Connection: keep-alive HTTP/1.1 200 OK Server: nginx Date: Fri, 01 Jul 2011 20:01:48 GMT Content-Type: text/html; charset=iso-8859-1 Connection: close Content-Encoding: gzip Vary: Accept-Encoding
PS: in quest'ultimo pezzo,qualora non imposti il timeout rimane comunque keep-alive.Codice:HTTP/1.1 200 OK Server: nginx Date: Fri, 01 Jul 2011 20:01:55 GMT Content-Type: image/gif Content-Length: 843 Last-Modified: Mon, 09 Jun 2008 18:54:55 GMT Connection: keep-alive Keep-Alive: timeout=70 Accept-Ranges: bytes
Non so proprio come darne fuori.
Non ti so aiutare sulla configurazione di nginx, rischierei di dire un sacco di scemenze.
Altri utenti sul forum lo sanno usare certamente meglio di me.
http://www.web4web.it - Low Cost Hosting
Tutti i pacchetti sono multidominio.
Database e domini illimitati a partire da €10
http://www.guest.it - Servizi professionali su misura.
C'è un motivo per il quale hai settato keepalive_requests a 10? Prova a commentarlo e vedere cosa succede.
Inoltre prova a compilare nginx con il modulo stub_status così hai tutti i dati sulle connessioni effettivamente aperte.
Per quanto riguarda le keepalive_requests a 10 era solamente un numero come un altro in fase di testing.
Anche commentandolo/togliendolo il risultato è identico.
PS: la riga "keepalive_timeout 80 80;" va messa dentro il server { desiderato oppure si deve lasciare come generale fuori da tutto, ma ovviamente dentro http { ?
Attivando il modulo stub_status ottengo dopo pochi secondi:
Dalla documentazione mi pare di capire che le Waiting siano le connessioni keep-alive?Codice:Active connections: 39 server accepts handled requests 370 370 440 Reading: 14 Writing: 2 Waiting: 23
Fornisce solo questo tipo di statistica oppure anche altre informazioni?
Quello che vorrei capire io è:
nell'header ci sono due sezioni:
1) GET /index.php HTTP/1.1
2) HTTP/1.1 200 OK
A livello pratico a me interessa solo la prima,solo la seconda oppure entrambi per avere a tutti gli effetti una connessione keep-alive?
Secondo la doc è uguale, io l'ho sempre usato a livello di http.
Come tutte le direttive in nginx scendendo di livello si overrida la configurazione al livello superiore.
Sì le waiting sono le connessioni restate aperte per via del keep-alive.
Le info son solo quelle
Da quello che so in HTTP/1.1 viene dato per scontato che la connessione debba essere di tipo keep-alive, quindi il browser con la GET invia questo parametro, però anche il server deve rispondere con keep-alive, perché se risponde con close il browser non usa più la vecchia connessione, ma ne apre un'altra.
Mi sembra molto strano come problema, io con nginx 1.0.4 tengo il keep-alive abbastanza alto su più server e funziona perfettamente su tutte le richieste.
Al massimo prova con una build del branch legacy stable per escludere che sia qualche strano bug introdotto con le ultime.
Ah un'altra cosa, il problema te lo dà anche con un semplice phpinfo per esempio?
Versione nginx: 1.0.4
Con un phpinfo() semplice stessa cosa. Prima parte keep-alive e la seconda in basso close.
Non so più come darne fuori davvero. Più che altro siamo sicuri al 100% che sia solamente una questione di nginx e non di php-fpm? Dico questo non per mettere in dubbio le vostre conoscenze,ma posso garantirvi che le ho provate davvero tutte.
Non so se possa essere d'aiuto,ma su php info ho la seguente voce:
Ciò nonostante l'Header rimane in close la seconda parte.Codice:_SERVER["HTTP_CONNECTION"] keep-alive
Scusami,che cosa sarebbe "_SERVER{"HTTP_CONNECTION_REQUIRED"}"
Non ho trovato nessuna info da nessuna parte.
Dove lo imposto e a cosa serve^
secondo me è il gzip...
Ho disabilitato gzip dal conf di nginx,riavviato,ma non cambia nulla,la seconda parte rimane come sempre close.
http://www.web4web.it - Low Cost Hosting
Tutti i pacchetti sono multidominio.
Database e domini illimitati a partire da €10
http://www.guest.it - Servizi professionali su misura.
Ci sono attualmente 2 utenti che stanno visualizzando questa discussione. (0 utenti e 2 ospiti)
Segnalibri