2012-10-01 13 views
8

Ricevo costantemente 504 errori di gateway quando il mio script php deve essere eseguito per più di 60 secondi.504 Temp media gateway Timeout out

Sono su media server su un server dedicato. Ho contattato media temple e sono stati utili ma nessuno dei loro suggerimenti sembra funzionare per me mi è stato detto di modificare questo file.

/etc/httpd/conf.d/fcgid.conf

che ho al di sotto

LoadModule fcgid_module modules/mod_fcgid.so 

<IfModule mod_fcgid.c> 

<IfModule !mod_fastcgi.c> 
    AddHandler fcgid-script fcg fcgi fpl 
</IfModule> 

    FcgidIPCDir /var/run/mod_fcgid/sock 
    FcgidProcessTableFile /var/run/mod_fcgid/fcgid_shm 
    FcgidIdleTimeout 300 
    FcgidMaxRequestLen 1073741824 
    FcgidProcessLifeTime 10000 
    FcgidMaxProcesses 64 
    FcgidMaxProcessesPerClass 15 
    FcgidMinProcessesPerClass 0 
    FcgidConnectTimeout 600 
    FcgidIOTimeout 600 
    FcgidInitialEnv RAILS_ENV production 
    FcgidIdleScanInterval 600 

</IfModule> 

così ho cercato di massimo tutto quanto più posso, per testare questo io sono semplicemente eseguendo la funzione qui sotto.

function test504(){ 
     @set_time_limit(0); 
     sleep(60); 
     echo "true"; 
    } 

sonno funziona su qualsiasi valore inferiore a 60 secondi il ritorno vero, ma sul 60 ottengo 504 errore di gateway.

my phpinfo(); uscite

max_execution_time 600 
max_input_time 180 

ho visto un paio di post su questo crescente fastcgi_connect_timeout, ma non hanno idea di dove trovare questo su Media Temple.

Chiunque può aiutare grazie

AGGIORNAMENTO ANCORA FIX CANT QUESTO

dopo aver chiacchierato con il supporto mi è stato detto che ho bisogno di modificare nginx.conf? ed è stato indirizzato a questo post http://blog.secaserver.com/2011/10/nginx-gateway-time-out/

non posso accettare nessuno dei valori sul mio hosting. client_header_timeout client_body_timeout send_timeout fastcgi_read_timeout

mio file nginx.conf assomiglia a questo

#error_log /var/log/nginx/error.log info; 

#pid  /var/run/nginx.pid; 


events { 
    worker_connections 1024; 
} 


http { 
    include  mime.types; 
    default_type application/octet-stream; 

    #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 
    #     '$status $body_bytes_sent "$http_referer" ' 
    #     '"$http_user_agent" "$http_x_forwarded_for"'; 

    #access_log /var/log/nginx/access.log main; 

    sendfile  on; 
    #tcp_nopush  on; 
    #keepalive_timeout 0; 
    keepalive_timeout 120; 
    #tcp_nodelay  on; 

    #gzip on; 
    #gzip_disable "MSIE [1-6]\.(?!.*SV1)"; 

    server_tokens off; 

    include /etc/nginx/conf.d/*.conf; 
} 

Questo mi sta facendo impazzire tutti i suggerimenti ???

UPDATE sono riuscito a ottenere questo risolto alla fine dopo un sacco di mal di testa aggiunto un post sul blog su come ho risolto questo qui. http://devsforrest.com/116/boost-settings-on-media-temple-for-maximum-settings

Spero che questo aiuti qualcuno

+1

Penso che questa sia una nuova impostazione perché non ho mai avuto un problema con i loro server più vecchi, ma avevo un nuovo server che ho acceso e mi sono imbattuto in questo. Il tuo post ha davvero aiutato molto. La mia app è in esecuzione in modalità Modulo Apache e questo ha risolto il problema. Davvero utile! – David

+1

Ehi @ user1503606 - il tuo ultimo aggiornamento funziona! Pubblicalo come risposta e ottieni credito per aver trovato la soluzione. – squarecandy

+0

Ti suggerisco di rifattorizzare la tua applicazione per rimuovere la necessità di eseguire uno script per più di 200 ms. Forse dovrai spostare una logica pesante sullo sfondo. Utilizzare una delle seguenti tecnologie per aiutarvi con questo: AJAX, code di messaggi, memcache, file di flag. –

risposta

3

Anch'io ho avuto lo stesso problema e ho risolto modificando nginx.conf file. Nella maggior parte dei casi, ciò può essere risolto aggiungendo/aumentando la direttiva send_timeout in nginx.conf.

Trovare il file nginx.conf (di solito si trova a /usr/local/nginx/nginx.conf oa volte /etc/nginx/sites-available/default), aprirlo usando nano o qualsiasi altro editor di testo e aggiungere le seguenti righe tra il http {} così sembra:

http { 
include  mime.types; 
default_type application/octet-stream; 

#log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 
#     '$status $body_bytes_sent "$http_referer" ' 
#     '"$http_user_agent" "$http_x_forwarded_for"'; 

#access_log /var/log/nginx/access.log main; 

sendfile  on; 
#tcp_nopush  on; 
#keepalive_timeout 0; 
keepalive_timeout 120; 
#tcp_nodelay  on; 

#gzip on; 
#gzip_disable "MSIE [1-6]\.(?!.*SV1)"; 

server_tokens off; 

send_timeout 10m; 

include /etc/nginx/conf.d/*.conf; 
} 

Nel mio caso, ho dovuto aumentare alcune altre direttive, come:

client_header_timeout 10m; 
client_body_timeout 10m; 
send_timeout 10m; 
fastcgi_read_timeout 10m; 

troppo.

Dopo aver modificato il file, basta ricaricare nginx con:

kill -HUP `ps -ef | grep nginx | grep master | awk {'print $2'}` 

o

sudo service nginx restart 

Questo dovrebbe risolvere il problema.

(ho trovato le direttive qui: http://blog.secaserver.com/2011/10/nginx-gateway-time-out/)

PS: ho visto il commento dal PO, con un link al loro blog, ma ho pensato di aggiungere le informazioni pertinenti qui potrebbe aiutare.