Mengapa saya mendapatkan "Izin ditolak: make_sock: tidak dapat mengikat ke alamat" saat memulai Apache2?

25

Saya bisa menghentikannya menggunakan

/etc/init.d/apache2 stop

Tetapi ketika saya ingin memulainya lagi menggunakan:

/etc/init.d/apache2 start

Saya mendapatkan kesalahan ini:

Starting web server apache2                                                  /usr/sbin/apache2ctl: 87: ulimit: error setting limit (Operation not permitted)
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
(13)Permission denied: make_sock: could not bind to address [::]:80
(13)Permission denied: 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]
Tukang
sumber

Jawaban:

50

Beberapa kata tentang kesalahan yang Anda dapatkan semoga akan menyelamatkan Anda dari situasi serupa di masa mendatang.

Di Linux port dari 0 hingga 1024 dicadangkan untuk penggunaan sistem. Ini berarti bahwa untuk menggunakannya, Anda harus memiliki wewenang untuk berubah - mengakses pengaturan sistem dasar. Pengguna root memiliki hak seperti itu dan benar-benar dapat menggunakan port dari rentang 0 - 1024.

Dalam masalah Anda seperti yang Anda lihat, respons sistem melalui Apache2 menunjukkan akar masalah ([...] tidak dapat mengikat ke alamat bla bla 80 ):

(13)Permission denied: make_sock: could not bind to address [::]:80
(13)Permission denied: make_sock: could not bind to address 0.0.0.0:80

Ketika daemon Apache2 http dimulai, ia mencoba untuk mengikat port 80 karena itu adalah port default untuk digunakan dalam HTTP see , yang merupakan port di dalam sistem yang ditugaskan port dan karenanya hanya dapat diakses oleh root.

Anda menjalankan perintah mulai sebagai pengguna biasa tanpa hak akses root dan menyebabkan kegagalan untuk melakukannya.

Dengan kata sederhana:

Kamu:

Hai Apache2. Saya Kongthap dan saya meminta Anda untuk memulai ( /etc/init.d/apache2 start)

Apache2:

BAIK. Saya memulai (Memulai server web apache2)

Sistem, tolong beri saya port 80 untuk menggunakan dan mendengarkan koneksi.

Sistem:

BAIK. Satu saat untuk memeriksa ...

Ahh ... Maaf Apache2 tapi saya tidak bisa membiarkan Anda berjalan di port 80, itu untuk penggunaan pribadi.

Dan Anda tidak memiliki hak yang benar untuk mengikatnya. ( Operation not permitted)

Apache2:

Ohh, Kongthap saya gagal memulai, Sistem tidak membiarkan saya melakukannya ( (13)Permission denied:[...])

Kesimpulan

Ada dua solusi utama untuk masalah ini:

  1. Jalankan daemon HTTP Apache2 dengan hak akses root menggunakan sudo:

    sudo service apache2 start
    

    atau:

    sudo /etc/init.d/apache2 start
    
  2. Mengubah port default dari 80sesuatu yang lebih besar dari 1024, katakanlah 2000, 2500, 9000, dll Sebuah port khas untuk menjalankan ketika dalam situasi seperti ini8080

    sudo vi /etc/apache2/ports.conf
    

    cari atau jika tidak ada tambahkan:

    Listen 8080
    

    atau port lain pilihan Anda seperti port > 1024dan port yang dipilih tidak digunakan oleh proses lain.

Stef K
sumber
4
Penjelasan yang sangat bagus !!!
Artisan
Penjelasan hebat, dipahami dengan baik!
Mwirabua Tim
Penjelasan yang bagus. Mengapa menggunakan servicemetode yang disukai?
Holloway
Mereka adalah arahan pemula , periksa pertanyaan ini dan menjawab askubuntu.com/q/19320/12218 dan untuk tampilan yang lebih rinci, periksa buku masak pemula upstart.ubuntu.com/cookbook . Ingatlah ini merujuk pada penanganan layanan (daemon) (kapan dan bagaimana memulai-hentikan) pertanyaan ini dan jawaban saya juga menangani masalah izin.
Stef K
Kata-kata yang tidak perlu. Jawaban tidak mengatasi masalah.
Reggie
7

Berikut ini adalah perintah untuk memulai / menghentikan / memulai kembali server apache:

  • Untuk memulai:

    sudo /etc/init.d/apache2 start
    
  • Untuk berhenti:

    sudo /etc/init.d/apache2 stop
    
  • Untuk memulai kembali:

    sudo /etc/init.d/apache2 restart
    
Saurav Kumar
sumber
Setelah me-restart komputer, sepertinya baik-baik saja dengan semua perintah yang Anda sarankan, tetapi saya mendapat pesan ini saat me-restart ... Restart server web apache2 apache2: Tidak dapat dipercaya menentukan nama domain server yang sepenuhnya memenuhi syarat, menggunakan 127.0.1.1 untuk ServerName
Artisan
1
@Kongthap: itu bukan kesalahan. Saya yakin web penuh dengan penjelasan untuk pesan itu.
Andrea Corbellini
Ya, @AndreaCorbellini benar. Ini bukan kesalahan, katanya karena ip Anda tidak memiliki Nama Domain yang Sepenuhnya Memenuhi Syarat misalnya mail.google.com.
Saurav Kumar
4

Periksa konteks port selinux dengan mengeluarkan perintah

semanage port -l | grep http

Jika ada di daftar http_port_t maka tidak apa-apa, tambahkan port Anda dengan

semanage port -a -t http_port_t -p tcp 80

atau sesuatu yang ingin Anda tetapkan.

zahid iqbal
sumber
1

Ini adalah kesalahan selinux, atau setidaknya itu dalam kasus saya. Ubah boolean, nonaktifkan selinux, atau setel untuk permisif dengan setenforce 0.

Perubahan boolean akan mengharuskan Anda untuk menjalankan getenforce -a | grep http, dan mencari "izinkan http menghubungkan jaringan". Salin dan ganti "on" di mana daftar mengatakan "- off"

benar
sumber
Ubuntu menggunakan AppArmor bukan SELinux, jadi jawaban Anda tidak relevan dengan ubuntu.
sgx1
Sebagai pengguna centos yang mendapatkan masalah ini dan ini adalah pertanyaan stackoverflow pertama yang muncul, saya menghargai bantuan ini memperbaiki masalah saya
Cacoon