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.