Apache gagal memulai, Alamat sudah digunakan (tetapi tidak benar-benar)

58

Saya mencoba mengatur VM yang menjalankan Ubuntu 12.04. Saya memiliki dua host virtual yang dikonfigurasi menggunakan port 80, tetapi Apache tidak akan memulai.

Saya mendapatkan kesalahan ini:
(98) Address already in use: make_sock: could not bind to address 0.0.0.0:80

Output dari netstat -tulpnmenunjukkan bahwa tidak ada yang menggunakan port 80. Apa yang mungkin menyebabkan ini?

Gunner Barnes
sumber
apakah Anda memulainya sebagai root? Secara default hanya root yang dapat membuka port di bawah 1024.
onse
Ya, benar. Itu berjalan pada satu titik ketika saya baru saja mengonfigurasi satu host virtual, jadi saya telah menghapus host virtual lain untuk mencoba memperbaiki masalah ini, tetapi tidak berhasil juga.
Gunner Barnes
Apakah host Anda menjalankan sesuatu pada port 80 dan Anda berada dalam mode bridged untuk tamu? Saya tidak tahu bahwa itu akan melakukan itu, tetapi tampaknya mungkin
RobotHumans
Sudahkah Anda mencoba saran dari Mulai apache gagal (tidak dapat mengikat ke alamat 0.0.0.0:80) ? Dan tolong sertakan juga output dari grep -ri listen /etc/apachedan sudo netstat -ntlp | grep 80.
gertvdijk
2
grep -ri listen /etc/apache2output: etc / apache2 / httpd.conf: Dengarkan 80 /etc/apache2/httpd.conf: Dengarkan 443 /etc/apache2/ports.conf: Dengarkan 80 /etc/apache2/httpd.conf: Dengar 443 / etc / apache2 / httpd.conf: Dengarkan 443 sudo netstat -ntlp | grep 80keluaran apa-apa.
Gunner Barnes

Jawaban:

38

Pastikan Anda tidak mendeklarasikan Listen 80dua kali dalam file .conf.

Misalnya, Anda mungkin memilikinya baik di dalam maupun di ports.confpenginapan sites-enabled/www.conf.

Untuk mengetahuinya, gunakan: grep -ri listen /etc/apache2

Simpan Listen 80di satu tempat saja.

ravi
sumber
19

Menjawab cara saya memecahkan masalah ini. Semoga bermanfaat bagi seseorang di masa depan.

Mencoba netstat -ltnp | grep :80

Ini akan mengembalikan sesuatu seperti

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

Lalu lari

sudo kill -9 1047

Di mana 1047 adalah pid dari program yang berjalan pada port 80. Anda dapat mengganti pid yang Anda peroleh dari netstat

Platypus Anonim
sumber
wow! ... dan di sini saya 48 jam setelah mengirim tiket ke inmotionhosting dan menunggu balasan. terima kasih
Amjo
2
Apa artinya ini? Saya tidak mendapatkan PID atau nama. tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN -
Aaron Franke
@AaronFranke Bisakah Anda mencoba menjalankan perintah ini di Terminal setelah memaksimalkan jendela?
Anonim Platypus
2
@ AaronFranke menjalankannya dengan sudo. Anda mungkin tidak memiliki izin untuk melihatnya.
Advait S
13

Ketika saya memiliki masalah ini, ternyata karena Apache saya tidak dapat memulai saat boot karena saya memiliki situs SSL yang memerlukan kata sandi yang harus dimasukkan untuk sertifikat.

Cara yang baik untuk mengetahui apakah ini masalahnya bagi Anda adalah menjalankan a ps -ef | grep apache: jika ini mengembalikan proses yang terlihat seperti /bin/bash /usr/share/apache2/ask-for-passphrase mysite.com:443 RSAitu sedang menunggu kata sandi dimasukkan di terminal yang tidak akan pernah Anda lihat.

Pertama, saya membunuh proses yang digantung (mengirimkan kill -HUPID proses untuk proses / usr / sbin / apache2 harus cukup untuk membunuh yang lain juga, tetapi melakukan yang lain ps -ef | grep apacheuntuk memastikan).

Kemudian saya mengikuti instruksi dalam posting ini untuk membuat file kata sandi SSL yang tidak memerlukan kata sandi untuk dimasukkan. Kemudian service apache2 startberfungsi dengan baik, dan Apache mulai dengan benar setelah reboot.

Brendan Quinn
sumber
11

Saya mendapatkan kesalahan ini pada instalasi baru ketika memulai apache2 Ubuntu 12.10.

Ini bug di apache2. Itu akan digantung di latar belakang. Inilah langkah-langkah saya untuk menemukan bug yang ada dalam perangkat lunak.

Inilah kesalahan yang saya dapatkan:

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]

Alamat sudah digunakan? Apa yang bisa menggunakannya? Saksikan berikut ini:

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

Itu berarti apache2 mencegah apache2 memulai. Aneh. Ini akan mengkonfirmasi:

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

Ya, dalam hal ini apache2 sedang berjalan, saya mencoba memulai apache2 untuk kedua kalinya pada port yang sama.

Yang membingungkan saya adalah bahwa servicelaporan bahwa apache2 TIDAK berjalan:

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

Dan ketika Anda meminta apache2ctl untuk statusnya, itu hang.

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

Jadi Ubuntu tampaknya mengalami kesulitan mengelola apache2 saat bootup. Saatnya untuk menghentikan apache2:

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

Petunjuk besar! Anda mencoba untuk menghentikan apache2 dan kehilangan proses id! Jadi Ubuntu tidak dapat menghentikan apache2 karena ia tidak tahu di mana ia berada!

Anda mungkin berpikir reboot akan memperbaikinya, tetapi itu bukan karena apache2 dimulai saat boot dan hang. Proses boot normal untuk apache2 tidak berfungsi dengan benar.

Jadi Bagaimana cara memperbaikinya?

Saya dapat memperbaiki ini dengan menganalisis psoutput perintah. Perhatikan bahwa psperintah memberitahu kita bahwa proses itu dimulai oleh "/etc/rc2.d/S91apache2 start".

Itu adalah program menyinggung yang membutuhkan tendangan cepat.

/etc/rc2.d/S91apache2adalah tautan simbolis yang digunakan untuk memulai apache2 untuk Anda saat komputer dimulai. Untuk beberapa alasan tampaknya mulai apache2 dan kemudian hang. Jadi kita harus mengatakannya untuk tidak melakukannya.

Jadi lihatlah itu /etc/rc2.d/S91apache2.

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

Itu adalah tautan simbolis yang tidak kita inginkan ada di sana. Lakukan ini untuk mencegah apache2 memulai saat boot:

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

Nyalakan kembali komputer untuk memastikan apache2 tidak memulai dan menggantung. Oke bagus. Sekarang Anda BISA meletakkan apache2 kembali seperti dulu, tapi itu akan membuatnya gagal lagi.

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

Sebagai gantinya, jalankan apache2 seperti ini:

sudo service apache2 start

Dan apache2 kembali dan melayani halaman lagi. Tampaknya ada beberapa bug serius dengan apache2 / Ubuntu 12.10 yang menyebabkan apache2 untuk memulai dan menggantung. Ini adalah solusinya, saya kira perbaikannya adalah untuk mendapatkan versi apache2 dan Ubuntu yang lebih baru dan berharap yang terbaik.

Eric Leschinski
sumber
Senang membaca dan menggunakan tips Anda! Terima kasih telah menulis 'cara Anda membantahnya'!
Ram
10

Saya memiliki server Nginx yang mendengarkan pada server AWS EC2 saya, saya pikir itu sudah dikonfigurasi ketika saya sedang membangun EC2, maka saya mendapatkan alamat yang sudah dalam kesalahan penggunaan. Jadi saya menghentikan layanan dan memulai layanan Apache2:

sudo service nginx stop
sudo service apache2 start
Pengelak
sumber
Terima kasih banyak! Bagaimanapun juga ini berhasil untuk saya.
Vivek
4

Saya sudah menemukan jawabannya. Saya memiliki duplikat Dengarkan 80 perintah di httpd.conf dan ports.conf saya

Juga, dalam menyalin file konfigurasi untuk server yang sedang divirtualisasi, saya lalai memperhatikan bahwa direktori log kesalahan telah diubah. Melihat ke dalam log kesalahan itu, saya perhatikan bahwa direktori untuk mime.typesfile konfigurasi salah dalam httpd.conffile saya . Saya memperbarui parameter itu, dan server mulai baik-baik saja.

Gunner Barnes
sumber
3
Saya juga punya Listen 80perintah duplikat di saya httpd.confdanports.conf
Gunner Barnes
2

Ini berarti Anda port 80 sudah digunakan, baik mengubah port untuk apache2 (yang saya tidak sarankan) dengan mengedit:

/etc/apache2/ports.conf

Atau tutup aplikasi yang berjalan di port 80:

netstat -antp | grep 80

Untuk menemukan apa yang sedang berjalan pada port 80.

Dylan Dodds
sumber
netstat -antp | grep 80tidak menghasilkan apa-apa juga.
Gunner Barnes
dapatkah Anda menyalin dan menempelkan output netstat -antp | grep 80?
Dylan Dodds
Secara harfiah tidak ada output.
Gunner Barnes
hmm itu aneh, coba ubah port ke 81 jika tidak bukan port yang diblokir ada kesalahan lain Anda dapat memeriksa kesalahan apache2 di /var/log/apache2/error.log
Dylan Dodds
2

Sekedar petunjuk bagi siapa saja, yang mungkin menjalankan VirtualBox dengan jaringan NAT. Saya menemukan, memiliki aturan NAT antara tamu dan tuan rumah saya telah mengatur dirinya sendiri, mengikat port

mschr
sumber
2

Bukan hanya duplikat menyebutkan

Listen 80

tetapi juga menyebutkan ini di samping Dengarkan 80

Include ports.conf
Scott Stensland
sumber