Apache2'yi başlatırken neden "İzin verilmedi: make_sock: adrese bağlanamadı" alıyorum?


25

Kullanarak durdurabilirim

/etc/init.d/apache2 stop

Ama tekrar kullanarak başlatmak istiyorum:

/etc/init.d/apache2 start

Bu hatayı alıyorum:

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]

Yanıtlar:


50

Aldığınız hatalarla ilgili bazı kelimeler sizi umarım gelecekte benzer durumlardan kurtaracaktır.

Linux'ta 0 - 1024 portları sistem kullanımı için ayrılmıştır. Bunun anlamı, birini kullanabilmek için, değişiklik yapma yetkisine sahip olmanız gerektiğidir - temel sistem ayarlarına erişin. Kök kullanıcının bu ayrıcalıkları vardır ve aslında 0 - 1024 aralığındaki bir bağlantı noktasını kullanabilir.

Gördüğünüz gibi probleminizde Apache2 cevabı ile gelen sistem problemin kökenini belirtir ([...] falan filan 80'i adreslemek için bağlanamadı ):

(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

Apache2 http arka plan programı başladığında, 80 numaralı bağlantı noktasını, bkz . Sistem atanan bağlantı noktaları içindeki bir bağlantı noktası olan ve yalnızca kök tarafından erişilebilen HTTP görmek için varsayılan bağlantı noktası olan 80 bağlantı noktasını bağlamaya çalışır .

Start komutunu root haklarına sahip olmayan tipik bir kullanıcı olarak uyguladınız ve başarısızlıkla sonuçladınız.

Basit bir deyişle:

Sen:

Merhaba Apache2. Ben Kongthap'im ve başlamanızı söylüyorum ( /etc/init.d/apache2 start).

Apache2:

TAMAM. Başlıyorum (Web sunucusu apache2'yi başlatıyorum)

Sistem, lütfen bağlantıları kullanmam ve dinlemem için bana 80 numaralı bağlantı noktasını ver.

Sistem:

TAMAM. Kontrol etmek için bir dakika ...

Ahh ... Üzgünüm Apache2 ama 80 limanda koşmana izin veremem, kişisel kullanım içindir.

Ve onu bağlamak için doğru ayrıcalıklarınız yok. ( Operation not permitted)

Apache2:

Ohh, Kongthap başlayamadım, Sistem yapmama izin vermedi ( (13)Permission denied:[...])

Sonuç

Bu sorunun başlıca iki çözümü vardır:

  1. Kullanılarak kök ayrıcalıklarıyla apache2 HTTP Daemon çalıştırın sudo:

    sudo service apache2 start
    

    veya:

    sudo /etc/init.d/apache2 start
    
  2. Varsayılan bağlantı noktasını değiştirmek 80daha bir şey Büyüktür 1024, diyelim ki 2000, 2500, 9000böyle bir durumda iken, vb Tipik liman çalıştırmak için8080

    sudo vi /etc/apache2/ports.conf
    

    arayın veya eklenmemişse ekleyin:

    Listen 8080
    

    ya da bağlantı noktası olarak seçtiğiniz herhangi bir başka liman > 1024ve seçilen bağlantı olduğunu değil başka bir işlem tarafından kullanılan.


4
Gerçekten mükemmel bir açıklama !!!
Esnaf,

Harika bir açıklama, iyi anlaşıldı!
Mwirabua Tim

Harika bir açıklama. serviceTercih edilen yöntemi neden kullanıyorsunuz ?
Holloway

Onlar bu soru kontrol Sonradan görme direktifler şunlardır askubuntu.com/q/19320/12218 sonradan görme yemek kitabı kontrol edin ve daha ayrıntılı görünüm için upstart.ubuntu.com/cookbook . Bunların, bu soruyu hizmetlerin (cehennem) ele almasının (ne zaman ve nasıl baştan durdurulacağına) değindiğini ve cevabımın izin problemleriyle de ilgilendiğini unutmayın.
Stef K

Gereksiz kelimelik. Cevap soruna cevap vermiyor.
reggie

7

Apache sunucusunu başlatma / durdurma / yeniden başlatma komutları şunlardır:

  • Başlamak:

    sudo /etc/init.d/apache2 start
    
  • Durdurmak için:

    sudo /etc/init.d/apache2 stop
    
  • Yeniden başlatmak:

    sudo /etc/init.d/apache2 restart
    

Bilgisayarı yeniden başlattıktan sonra, önerdiğiniz tüm komutlarda sorun yok ama yeniden başlatma sırasında bu mesajı aldım ... Web sunucusu yeniden başlatılıyor apache2 apache2: Sunucunun tam etki alanı adı güvenilir bir şekilde tespit edilemedi, sunucu adı için 127.0.1.1
Artisan

1
@Kongthap: bu bir hata değil. Web'in bu mesaj için bir açıklama ile dolu olduğuna eminim.
Andrea Corbellini

Evet, @AndreaCorbellini doğru. Bir hata değildir, çünkü ip'inizde Tam Nitelikli Etki Alanı Adı yoktur, örneğin mail.google.com.
Saurav Kumar,

4

Komutu vererek selinux port içeriğini kontrol edin

semanage port -l | grep http

Http_port_t listesinde varsa, sorun yok, aksi halde bağlantı noktanızı ekleyin.

semanage port -a -t http_port_t -p tcp 80

veya atamak istediğiniz bir şey.


1

Bu bir selinux hatası veya en azından benim durumumdaydı. Booleanı değiştirin, selinux'u devre dışı bırakın veya izin verilebilir duruma getirin setenforce 0.

Boole değişikliği çalıştırmanızı getenforce -a | grep httpve "http bağlantı ağına izin ver " ifadesini aramanızı gerektirir . Kopyalayın ve listenin "- off" yazdığı "açık" ifadesini değiştirin


Ubuntu, AppArmor SELinux kullanmıyor, bu yüzden cevabınız ubuntu ile alakasız.
sgx1

Bu sorunu yaşayan ve ortaya çıkan ilk stackoverflow sorusu olan bir centos kullanıcısı olarak, bu sorunu çözdüğüm yardımları için teşekkür ederim
Cacoon
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.