Apache non si avvia, indirizzo già in uso (ma non proprio)


58

Sto provando a configurare una VM con Ubuntu 12.04. Ho due host virtuali configurati usando la porta 80, ma Apache non si avvia.

Ottengo questo errore:
(98) Address already in use: make_sock: could not bind to address 0.0.0.0:80

L'output di netstat -tulpnmostra che nulla sta usando la porta 80. Che cosa potrebbe causare questo?


lo stai avviando come root? Per impostazione predefinita, solo root può aprire le porte inferiori a 1024.
Onse

Sì, lo sono. Stava funzionando a un certo punto quando avevo configurato un solo host virtuale, quindi da allora ho rimosso l'altro host virtuale per provare a risolvere il problema, ma neanche per fortuna.
Gunner Barnes,

Il tuo host ha qualcosa in esecuzione sulla porta 80 e sei in modalità bridge per l'ospite? Non so che lo farebbe, ma sembra probabile
RobotHumans

Hai provato i suggerimenti da Avvio di apache non riuscito (impossibile associare l'indirizzo 0.0.0.0:80) ? E si prega di includere anche l'output di grep -ri listen /etc/apachee sudo netstat -ntlp | grep 80.
gertvdijk,

2
grep -ri listen /etc/apache2output: etc / apache2 / httpd.conf: ascolta 80 /etc/apache2/httpd.conf: ascolta 443 /etc/apache2/ports.conf: ascolta 80 /etc/apache2/httpd.conf: ascolta 443 / etc / apache2 / httpd.conf: l'ascolto 443 sudo netstat -ntlp | grep 80non emette nulla.
Gunner Barnes

Risposte:


38

Assicurati di non dichiarare Listen 80due volte nei file .conf.

Ad esempio, potresti averlo sia in ports.confche in inn sites-enabled/www.conf.

Per scoprirlo, usa: grep -ri listen /etc/apache2

Conservare Listen 80in un solo posto.


19

Rispondere al modo in cui ho risolto questo problema. Potrebbe essere utile a qualcuno in futuro.

Provare netstat -ltnp | grep :80

Ciò restituirebbe qualcosa del genere

tcp6 0 0 ::: 80 ::: * ASCOLTA 1047 / apache2

Quindi corri

sudo kill -9 1047

Dove 1047 è il pid del programma in esecuzione sulla porta 80. È possibile sostituire il pid ottenuto netstat


wow! ... ed eccomi qui 48 ore dopo aver inviato un biglietto a inmotionhosting e in attesa di una risposta. grazie
Amjo,

2
Cosa significa questo? Non ricevo un PID o un nome. tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN -
Aaron Franke,

@AaronFranke Puoi provare a eseguire questo comando in Terminale dopo aver ingrandito la finestra?
Platypus anonimo il

2
@AaronFranke eseguilo con sudo. Potresti non avere i permessi per visualizzare.
Advait S

13

Quando ho avuto questo problema, si è scoperto che il mio Apache non poteva avviarsi all'avvio perché avevo un sito SSL che richiedeva l'inserimento di una password per il certificato.

Un buon modo per capire se questo è il tuo caso è quello di eseguire un ps -ef | grep apache: se questo restituisce processi che sembrano simili /bin/bash /usr/share/apache2/ask-for-passphrase mysite.com:443 RSA, è in attesa di inserire una password in un terminale che non vedrai mai.

Innanzitutto, ho interrotto il processo bloccato (l'invio di un kill -HUPID processo per / usr / sbin / apache2 dovrebbe essere sufficiente per uccidere anche gli altri, ma ne faccio un altro ps -ef | grep apacheper sicurezza).

Quindi ho seguito le istruzioni in questo post per creare un file di password SSL che non richiedeva l'inserimento di una password. Quindi ha service apache2 startfunzionato bene e Apache è stato avviato correttamente dopo un riavvio.


11

Ho riscontrato questo errore su una nuova installazione all'avvio di apache2 Ubuntu 12.10.

È un bug in apache2. Viene appeso in background. Ecco la mia guida dettagliata su dove potrebbero trovarsi i bug nel software.

Ecco l'errore che ho ricevuto:

el@titan:~$ sudo service apache2 start
 * Starting web server apache2               
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
Action 'start' failed.
The Apache error log may have more information.
                                                                         [fail]

Indirizzo già in uso? Cosa potrebbe usarlo? Controlla:

el@titan:~$ grep -ri listen /etc/apache2
/etc/apache2/apache2.conf:#   supposed to determine listening ports for incoming connections, and which
/etc/apache2/apache2.conf:# Include list of ports to listen on and which to use for name based vhosts
/etc/apache2/ports.conf:Listen 80
/etc/apache2/ports.conf:    Listen 443
/etc/apache2/ports.conf:    Listen 443

Ciò significa che apache2 impedisce l'avvio di apache2. Bizzarro. Ciò confermerà:

el@titan:~$ ps -ef | grep apache2
root      1146   954  0 15:51 ?        00:00:00 /bin/sh /etc/rc2.d/S91apache2 start
root      1172  1146  0 15:51 ?        00:00:00 /bin/sh /usr/sbin/apache2ctl start
root      1181  1172  0 15:51 ?        00:00:00 /usr/sbin/apache2 -k start
root      1193  1181  0 15:51 ?        00:00:00 /bin/bash /usr/share/apache2/ask-for-passphrase 127.0.1.1:443 RSA
el        5439  5326  0 16:23 pts/2    00:00:00 grep --color=auto apache2

Sì, in questo caso apache2 è in esecuzione, stavo cercando di avviare apache2 una seconda volta sulla stessa porta.

Ciò che mi confonde è che servicesegnala che apache2 NON è in esecuzione:

el@titan:~$ sudo service apache2 status
Apache2 is NOT running.

E quando si interroga apache2ctl per il suo stato, si blocca.

root@titan:~# /usr/sbin/apache2ctl status
**hangs until Ctrl-C is pressed.

Quindi Ubuntu sembra avere problemi a gestire apache2 all'avvio. Tempo di smettere di apache2:

root@titan:~# /usr/sbin/apache2ctl stop
httpd (no pid file) not running

Un grande indizio! Si tenta di interrompere apache2 e ha perso l'ID del processo! Quindi Ubuntu non può fermare apache2 perché non sa dove sia!

Penseresti che un riavvio lo riparerebbe, ma non perché Apache2 si avvia all'avvio e si blocca. Il normale processo di avvio per apache2 non funziona correttamente.

Quindi, come ripararlo?

Sono stato in grado di risolvere questo problema analizzando l' psoutput del comando. Si noti che il pscomando ci dice che quel processo è stato avviato da "/etc/rc2.d/S91apache2 start".

Questo è il programma offensivo che ha bisogno di un calcio rapido.

/etc/rc2.d/S91apache2è il collegamento simbolico utilizzato per avviare apache2 all'avvio del computer. Per qualche motivo sembra avviare apache2 e quindi si blocca. Quindi dovremo dirgli di non farlo.

Quindi dai un'occhiata a quello /etc/rc2.d/S91apache2.

el@titan:/etc/rc2.d$ ls -l
lrwxrwxrwx   1 root root    17 Nov  7 21:45 S91apache2 -> ../init.d/apache2*

È un collegamento simbolico che non vogliamo che sia lì. Fare questo per impedire l'avvio di apache2 all'avvio:

root@titan:~# sudo update-rc.d -f apache2 remove
 Removing any system startup links for /etc/init.d/apache2 ...
   /etc/rc0.d/K09apache2
   /etc/rc1.d/K09apache2
   /etc/rc2.d/S91apache2
   /etc/rc3.d/S91apache2
   /etc/rc4.d/S91apache2
   /etc/rc5.d/S91apache2
   /etc/rc6.d/K09apache2

Riavvia il computer per assicurarti che apache2 non si avvii e non si blocchi. Ok bene. Ora POTREBBE riportare apache2 com'era prima, ma ciò farebbe fallire di nuovo.

root@titan:~$ sudo update-rc.d apache2 defaults     //(don't do this)
 Adding system startup for /etc/init.d/apache2 ...
   /etc/rc0.d/K20apache2 -> ../init.d/apache2
   /etc/rc1.d/K20apache2 -> ../init.d/apache2
   /etc/rc6.d/K20apache2 -> ../init.d/apache2
   /etc/rc2.d/S20apache2 -> ../init.d/apache2
   /etc/rc3.d/S20apache2 -> ../init.d/apache2
   /etc/rc4.d/S20apache2 -> ../init.d/apache2
   /etc/rc5.d/S20apache2 -> ../init.d/apache2

Invece, avvia apache2 in questo modo:

sudo service apache2 start

E l'apache2 esegue il backup e serve nuovamente le pagine. Sembra che ci siano alcuni bug gravi con apache2 / Ubuntu 12.10 che causano l'avvio e il blocco di apache2. Questa è una soluzione alternativa, suppongo che la soluzione sia ottenere le versioni più recenti di apache2 e Ubuntu e sperare per il meglio.


Buona lettura e utilizzo dei tuoi consigli! Grazie per aver scritto "il modo in cui è stato eseguito il debug"!
Ram

10

Avevo un server Nginx in ascolto sul mio server AWS EC2, penso che sia stato configurato quando stavo costruendo l'EC2, quindi ho ricevuto l'indirizzo già in uso errore. Quindi ho interrotto il servizio e avviato il servizio Apache2:

sudo service nginx stop
sudo service apache2 start

Grazie mille! Dopo tutto ciò ha funzionato per me.
Vivek,

4

L'ho capito. Avevo duplicato Ascolta 80 comandi sia nel mio httpd.conf che ports.conf

Inoltre, copiando il file di configurazione per quel server che viene virtualizzato, ho trascurato di notare che la directory del registro degli errori era stata modificata. Guardando quel registro degli errori, ho notato che la directory per il mime.typesfile di configurazione non era corretta nel mio httpd.conffile. Ho aggiornato quel parametro e il server si è avviato correttamente.


3
Avevo anche doppi Listen 80comandi sia nel mio httpd.confche nelports.conf
Gunner Barnes il

2

Questo significa che la tua porta 80 è già in uso, o cambia la porta per apache2 (che non ti consiglio) modificando:

/etc/apache2/ports.conf

O chiudere l'applicazione in esecuzione sulla porta 80:

netstat -antp | grep 80

Per trovare ciò che è in esecuzione sulla porta 80.


netstat -antp | grep 80non genera nulla.
Gunner Barnes,

puoi copiare e incollare il tuo output di netstat -antp | grep 80?
Dylan Dodds

Non c'è letteralmente uscita.
Gunner Barnes,

hmm che è strano, prova a cambiare la porta in 81 se no non è la porta bloccata c'è un altro errore puoi controllare gli errori apache2 in /var/log/apache2/error.log
Dylan Dodds

2

Solo un suggerimento per chiunque, che forse sta eseguendo VirtualBox con reti NAT. Ho trovato, avendo una regola NAT tra il mio ospite e l'host si era impostato, vincolando la porta


2

Non solo menzioni duplicate di

Listen 80

ma menzionalo anche in aggiunta a Listen 80

Include ports.conf
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.