Почему я получаю "Отказано в разрешении: make_sock: не удалось привязать к адресу" при запуске Apache2?

Я могу остановить это с помощью

/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:80no listening sockets available, shutting downUnable to open logsAction 'start' failed.The Apache error log may have more information.                                                                         [fail]

Несколько слов об ошибках, которые вы получаете, которые, надеюсь, спасут вас от подобных ситуаций в будущем.

В 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

Когда запускается http-демон Apache2, он пытается привязать порт 80, поскольку это порт по умолчанию для использования в HTTP видеть, который является портом в пределах назначенных системой портов, и как таковой к нему может получить доступ только root.

Вы выполнили команду "Пуск" как обычный пользователь без прав суперпользователя, и это привело к сбою.

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

Вы:

Привет, Apache2. Я Конгтхап, и я говорю вам начать (/etc/init.d/apache2 start)

Apache2:

ОК. Я начинаю (запускаю веб-сервер apache2)

Система, пожалуйста, дайте мне порт 80 для использования и прослушивания подключений.

Система:

ОК. Один момент, чтобы проверить...

Ааа... Извините, Apache2, но я не могу позволить вам работать на порту 80, это для личного использования.

И у вас нет правильных привилегий для его привязки. (Operation not permitted)

Apache2:

Ооо, Конгтхап, мне не удалось запустить, система не позволила мне это сделать ((13)Permission denied:[...])

Вывод

В основном существует два решения этой проблемы:

  1. Запустите HTTP-демон Apache2 с правами суперпользователя, используя 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 и выбранный порт является нет используется другим процессом.

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

  • Начать:

    sudo /etc/init.d/apache2 start
  • Чтобы остановить:

    sudo /etc/init.d/apache2 stop
  • Для перезапуска:

    sudo /etc/init.d/apache2 restart

Проверьте контекст порта selinux, выполнив команду

semanage port -l | grep http

Если он присутствует в списке http_port_t, то все в порядке, в противном случае добавьте свой порт с помощью

semanage port -a -t http_port_t -p tcp 80

или что-то, что вы хотите назначить.

Это ошибка selinux, или, по крайней мере, так было в моем случае. Либо измените логическое значение, отключите selinux, либо установите для него значение permissive с помощью setenforce 0.

Логическое изменение потребует от вас запуска getenforce -a | grep http, и найдите "разрешить подключение к сети http". Скопируйте его и замените "вкл." там, где в списке написано "-- выкл."