Почему я получаю сообщение «Отказано в доступе: make_sock: невозможно связать с адресом» при запуске Apache2?

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 см , который является портом в рамках системы назначены порты и как таковой он может быть доступен только корень.

Вы выполнили команду запуска как обычный пользователь без привилегий root и не смогли этого сделать.

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

Вы:

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

Apache2:

ХОРОШО. Я запускаю (Запуск веб-сервера apache2)

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

система:

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

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

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

Apache2:

Ой, Kongthap Мне не удалось запустить, Система не позволила мне сделать это ( (13)Permission denied:[...])

Вывод

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

  1. Запустите демон Apache2 HTTP с правами 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
Отличное объяснение, хорошо поняли!
Мвирабуа Тим
Отличное объяснение. Почему используется serviceпредпочтительный метод?
Holloway
Они являются директивами Upstart, проверьте этот вопрос и ответы на askubuntu.com/q/19320/12218, а для более детального просмотра просмотрите upstart cookbook upstart.ubuntu.com/cookbook . Имейте в виду, что это относится к службам (демонам), обрабатывающим (когда и как начать-остановить) этот вопрос, и мой ответ также решает проблемы с разрешениями.
Stef K
Излишне многословность. Ответ не решает проблему.
Реджи
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-соединение». Скопируйте его и замените «вкл» там, где в списке написано «- выкл»

Tru
источник
Ubuntu использует AppArmor, а не SELinux, поэтому ваш ответ не имеет отношения к Ubuntu.
sgx1
Как пользователь Centos, у которого возникла эта проблема, и это первый вопрос о
стекопереработке,