Чому мені під час запуску Apache2 я отримую "Відмовлено у дозволі: make_sock: не вдалося прив’язати до адреси"?


25

Я можу припинити це за допомогою

/etc/init.d/apache2 stop

Але коли я хочу запустити його знову, використовуючи:

/etc/init.d/apache2 start

Я отримую цю помилку:

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]

Відповіді:


50

Деякі слова про помилки, які ви отримаєте, які, сподіваємось, позбавлять вас від подібних ситуацій у майбутньому.

У портах Linux від 0 до 1024 зарезервовано для використання в системі. Це означає, що для того, щоб використовувати його, ви повинні мати повноваження на зміну - отримати доступ до основних системних налаштувань. Користувач root має такі привілеї і може фактично використовувати порт з діапазону 0 - 1024.

Як ви бачите, у вашій проблемі система через відповідь Apache2 вказує на корінь проблеми ([...] не вдалося прив’язатись до адреси бла-бла 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

Коли запускається демон Apache2 http, він намагається прив’язати порт 80, оскільки це порт за замовчуванням для використання в HTTP див. , Який є портом у присвоєних портами системи, і як такий, до нього можна отримати доступ лише корінь.

Ви виконали команду start як типовий користувач без привілеїв root і призвели до відмови цього зробити.

Простими словами:

Ти:

Привіт Apache2. Я Конґтап, і я кажу вам почати ( /etc/init.d/apache2 start)

Apache2:

ДОБРЕ. Я починаю (Запуск веб-сервера apache2)

Система, будь ласка, дайте мені порт 80 для використання та прослуховування з'єднань.

Система:

ДОБРЕ. Мить, щоб перевірити ...

Ах ... Вибачте Apache2, але я не можу дозволити вам працювати на 80 порту, це для особистого використання.

І у вас немає правильних привілеїв, щоб зв’язати це. ( Operation not permitted)

Apache2:

Ой, Kongthap Я не зміг запустити, Система не дозволила мені це зробити ( (13)Permission denied:[...])

Висновок

В основному є два рішення цієї проблеми:

  1. Запустіть демон HTTP Apache2 з правами root, використовуючи sudo:

    sudo service apache2 start
    

    або:

    sudo /etc/init.d/apache2 start
    
  2. Зміна порту за замовчуванням від 80до чого - то більшого , ніж 1024, скажімо 2000, 2500, 9000і т.д. Типовий порт для запуску , коли в такій ситуації8080

    sudo vi /etc/apache2/ports.conf
    

    шукайте або якщо ні, додайте:

    Listen 8080
    

    або будь-який інший порт на ваш вибір, наприклад, порт > 1024та вибраний порт, не використовується іншим процесом.


4
Дійсно відмінне пояснення !!!
Artisan

Чудове пояснення, добре зрозуміли!
Mwirabua Tim

Чудове пояснення. Чому використовується serviceкращий метод?
Холлоуей

Вони є директивами Upstart, перевірте це питання та відповіді як askubuntu.com/q/19320/12218, а для більш детального перегляду ознайомтеся з початковою кулінарною книгою upstart.ubuntu.com/cookbook . Майте на увазі, що це посилання на послуги (демона) (коли і як почати-зупиняти) це питання, і моя відповідь також вирішує проблеми з дозволом.
Стеф К

Зайве слово. Відповідь не вирішує проблему.
реггі

7

Нижче наведено команди для запуску / зупинки / перезавантаження сервера apache:

  • Починати:

    sudo /etc/init.d/apache2 start
    
  • Зупинитися:

    sudo /etc/init.d/apache2 stop
    
  • Щоб перезапустити:

    sudo /etc/init.d/apache2 restart
    

Після перезавантаження комп'ютера, здається, добре з усіма командами, які ви запропонували, але я отримав це повідомлення під час перезавантаження ... Перезапуск веб-сервера apache2 apache2: Не вдалося достовірно визначити повноцінне доменне ім'я сервера, використовуючи 127.0.1.1 для ServerName
Artisan

1
@Kongthap: це не помилка. Я впевнений, що Інтернет наповнений поясненнями для цього повідомлення.
Андреа Корбелліні

Так, @AndreaCorbellini вірно. Це не помилка, вона говорить про те, що у вашого ip немає жодного повністю кваліфікованого доменного імені, наприклад mail.google.com.
Саурав Кумар

4

Перевірте контекст порту selinux, видавши команду

semanage port -l | grep http

Якщо він присутній у списку http_port_t, тоді це нормально, інакше додайте порт

semanage port -a -t http_port_t -p tcp 80

або щось, що ви хочете призначити.


1

Це помилка selinux, або, принаймні, це було в моєму випадку. Або змінити булевий вимкнення, відключити selinux або встановити його на дозвіл за допомогою setenforce 0.

Булева зміна вимагає запустити getenforce -a | grep httpта шукати "дозволити мережу http connect". Скопіюйте його та замініть "увімкнено", де у списку написано "- вимкнено"


Ubuntu використовує AppArmor не SELinux, тому ваша відповідь не має значення для ubuntu.
sgx1

Як користувач centos, який отримав цю проблему, і це перше запитання, що з'явилося, я оцінюю допомогу, яку виправили мою проблему
Cacoon
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.