2009-03-25 25 views
40

Il mio server stava andando bene fino a ieri. Era in esecuzione Redmine, ed era il piccolo server più felice fino al il mio "amico" ha importato una tabella SQL che il mio piccolino non poteva prendere. Sfortunatamente, dopo un'ora di tentativi di convincere il ragazzo lil a rispondere, abbiamo dovuto spegnerlo.Perché ricevo un errore Apache Proxy 503?

Ora dopo il riavvio, si verifica un errore 503 durante il tentativo di visitare il dominio collegato a Redmine. È collegato a un demone Mongrel e usiamo Apache Proxy per dirigere tutte le connessioni alla porta su cui è in esecuzione Redmine.

Utilizzando Lynx sul server (http://localhost:8000) è possibile vedere l'applicazione Ruby funzionante. Ma questo bit non funziona nel mio file di configurazione di Apache:

<VirtualHost *:80> 
    ServerName sub.example.com 
    ProxyPass/http://localhost:8000 
    ProxyPassReverse/http://localhost:8000 
    ProxyPreserveHost on 
    LogLevel debug 
</VirtualHost> 

ecco l'output log degli errori per Apache:

 
[debug] mod_proxy_http.c(54): proxy: HTTP: canonicalising URL //localhost:8000 
[debug] proxy_util.c(1335): [client 216.27.137.51] proxy: http: found worker http://localhost:8000 for http://localhost:8000/ 
[debug] mod_proxy.c(756): Running scheme http handler (attempt 0) 
[debug] mod_proxy_http.c(1687): proxy: HTTP: serving URL http://localhost:8000/ 
[debug] proxy_util.c(1755): proxy: HTTP: has acquired connection for (localhost) 
[debug] proxy_util.c(1815): proxy: connecting http://localhost:8000/ to localhost:8000 
[debug] proxy_util.c(1908): proxy: connected/to localhost:8000 
[debug] proxy_util.c(2002): proxy: HTTP: fam 2 socket created to connect to localhost 

[error] (13)Permission denied: proxy: HTTP: attempt to connect to 127.0.0.1:8000 (localhost) failed 
[error] ap_proxy_connect_backend disabling worker for (localhost) 

[debug] proxy_util.c(1773): proxy: HTTP: has released connection for (localhost) 
+0

Ehi, per favore, ritorna sotto il post. Come il suo errore simile http://stackoverflow.com/questions/9461086/tomcat-application-not-responding-with-no-logs/23710275#23710275 –

risposta

-1

Per far funzionare tutto questo, avevo bisogno di girare SELinux, e quindi aggiungere le barre finali alle linee "localhost: 8000".

Ecco il codice per disattivare SELinux:

echo 0 >/selinux/enforce 
+7

Questo è un buco di sicurezza – Antonio

+0

Inoltre non spiega il motivo per cui l'app ha funzionato per un po ', quindi non è riuscita al riavvio. * l'OP era in esecuzione con SELinux disabilitato, quindi è stato abilitato automaticamente al riavvio, ma la situazione data nella risposta di exshovelrydr è molto più probabile –

+1

Non dovresti disattivare selinux, basta disabilitare il criterio./usr/sbin/setsebool httpd_can_network_connect true –

2

Sei sicuro che stanno riavviando nell'ordine corretto? Ho avuto strani problemi con l'avvio di Apache, quindi inizia il processo di avvio di Mongule e, sebbene Mongrel sia in esecuzione, Apache genera ancora l'errore del proxy.

Ho risolto questo in passato con vari incantesimi e riavvii di Apache e alla fine gli dei sono felici. Sembra che a volte i processi di Mongrel non si chiudano correttamente, quindi devi ucciderli manualmente. Ecco uno link con qualche [possibile] aiuto.

Ho finito per aggiungere un'opzione "kill" al mio script ibrido /etc/init.d/ perché è successo così tanto. Arresta Mongrel, uccide tutte le sessioni di Mongrel, inizia Mongrel e riavvia Apache.

<snip> 
    kill) 
     echo "Stopping, killing, starting, and restarting Apache..." 
     mongrel_cluster_ctl stop -c $CONF_DIR --clean 
     killall -u mongrel 
     mongrel_cluster_ctl start -c $CONF_DIR --clean 
     /etc/init.d/httpd restart 
     RETVAL=$? 
    ;; 
</snip> 

Probabilmente non è una soluzione molto buona, ma il male è andato via.

+0

sfortunatamente non funziona :( – blackrobot

+0

la risposta di exshovelrydr spiega perché iniziare ordine, e come cambiare la configurazione di Apache in modo che l'ordine di avvio * non * importi –

1

provare a eseguire Monit per monitorare i bastardi dietro Apache, e in questo modo si può riavviare meticci per voi se muoiono o ottenere troppo affamato per la memoria. Se per qualsiasi ragione Apache si confonde ancora, potresti semplicemente dover riavviare con grazia Apache e questo dovrebbe risolversi da solo, ma per il 99% dei casi la sorveglianza di monit sui tuoi bastardi dovrebbe evitare che ciò accada di nuovo. L'altra opzione è guardare in Phusion Passenger.

+0

lol a downvote su una risposta di 6 anni senza spiegazione – nitecoder

30

Run seguente comando

# /usr/sbin/setsebool httpd_can_network_connect 1 

O

# /usr/sbin/setsebool httpd_can_network_connect true 

e dopo che httpd restart

# service httpd restart 
+5

setseboo l -P ... rende le modifiche persistenti. –

+2

Questo non mi aiuta. Apache + mongrel Questo disabilita SELinux e non riesco a vedere alcuna relazione con la domanda. –

77

Apache risponderà con 503 di per almeno 60 secondi ogni volta che rileva che la il server di back-end è inattivo. Questo è il comportamento predefinito.Come nel tuo esempio, se riavvii il tuo server di backend (Rails in questo esempio) e qualcuno tenta di accedervi tramite il proxy Apache prima che Rails sia pronto, allora Apache restituirà 503 per i successivi 60 secondi, indipendentemente dal fatto che il tuo back-end sia "attivo" . Si prega di consultare la documentazione Apache su ProxyPass dove si afferma:

retry 60

connessione lavoratore piscina tentativi di timeout in secondi. Se il pool di connessioni utilizzato dal server di back-end si trova nello stato di errore, Apache non inoltra alcuna richiesta a quel server fino alla scadenza del timeout. Ciò consente di arrestare il server back-end per la manutenzione e riportarlo online in un secondo momento. Un valore di 0 significa sempre riprovare i lavoratori in uno stato di errore senza timeout.

Quindi, se si imposta il pass Proxy per includere retry = 0 non si vedrà il 503, quando si riavvia il servizio di back-end. Questo è utile anche quando si usa Apache come proxy inverso durante lo sviluppo! Per esempio:

ProxyPass/http://localhost:8000 retry = 0

+6

Per riferimento, un collegamento a [Documenti ProxyPass per Apache 2.2] (http://httpd.apache.org/docs/2.2/mod/mod_proxy.html#proxypass). – Pistos

+0

È lo stesso per nginx? – HFX

0

In primo luogo verificare se la porta 8080 è in ascolto o meno dalla seguente comando

netstat -tlpn 

Se non oltre riavviare il server Jenkins da il seguente comando

sudo /etc/init.d/jenkins start 

It sh potrebbe funzionare ora Spero che sia d'aiuto.

0

Pugno, è necessario installare selinux: (SELinux acronimo di Security-Enhanced Linux.)

apt-get install selinux 

Dopo di che, è possibile attivare la politica di sicurezza di SELinux seguente comando:

sed -i 's/SELINUX=.*/SELINUX=permissive/' /etc/selinux/config 

Avviso :

#  enforcing - SELinux security policy is enforced. 
#  permissive - SELinux prints warnings instead of enforcing. 
#  disabled - No SELinux policy is loaded. 

Finale, riavviare apache!

+2

La risposta cambia l'impostazione SELINUX due volte? Disattivare selinux è già la risposta accettata: non sono sicuro di cosa si sta aggiungendo qui. Inoltre, si prega di commentare/spiegare cosa fa la tua risposta - questo migliora il valore a lungo termine di SO. –

+0

Scusa, l'inglese non è la mia lingua madre, quindi sono leggermente bloccato nell'interpretazione del testo :) –

+0

- Ho riscontrato questo errore e l'ho risolto con l'istruzione precedente. SELinux è l'acronimo di Security-Enhanced Linux. È un modo per migliorare la sicurezza del server. Quando SELinux è abilitato, Apache utilizzerà la politica di SELinux al posto della politica di Apache. –

Problemi correlati