Apache не запускається, Адреса вже використовується (але не дуже)


58

Я намагаюся налаштувати VM під управлінням Ubuntu 12.04. У мене є два віртуальних хости, налаштовані за допомогою порту 80, але Apache не запуститься.

Я отримую цю помилку:
(98) Address already in use: make_sock: could not bind to address 0.0.0.0:80

Результат netstat -tulpnпоказує, що ніщо не використовує порт 80. Що може бути причиною цього?


ти починаєш це як корінь? За замовчуванням лише root може відкривати порти нижче 1024.
1313

Так, я. Він працював в один момент, коли у мене був налаштований лише один віртуальний хост, тому я видалив інший віртуальний хост, щоб спробувати виправити проблему, але з цим не пощастило.
Стрілець Барнс

У вас у хості щось працює на порту 80, і ви перебуваєте в мостовому режимі для гостя? Я не знаю, що це зробить так, але це здається ймовірним
RobotHumans

Чи ви спробували пропозиції, починаючи з помилки Starting apache (не вдалося прив’язати до адреси 0.0.0.0:80) ? І, будь ласка, також включіть результат grep -ri listen /etc/apacheта sudo netstat -ntlp | grep 80.
gertvdijk

2
grep -ri listen /etc/apache2виводи: etc / apache2 / httpd.conf: Listen 80 /etc/apache2/httpd.conf: Listen 443 /etc/apache2/ports.conf: Listen 80 /etc/apache2/httpd.conf: Listen 443 / etc / apache2 / httpd.conf: Прослуховуйте 443 sudo netstat -ntlp | grep 80виходи взагалі нічого.
Gunner Barnes

Відповіді:


38

Переконайтеся, що ви не оголошуєте Listen 80двічі у .conf-файлах.

Наприклад, у вас може бути і в, ports.confі в корчмі sites-enabled/www.conf.

Щоб дізнатися це, використовуйте: grep -ri listen /etc/apache2

Тримайтеся Listen 80лише в одному місці.


19

Відповідаючи на те, як я вирішив це питання. Може бути корисним комусь у майбутньому.

Спробуйте netstat -ltnp | grep :80

Це поверне щось подібне

tcp6 0 0 ::: 80 ::: * LISTEN 1047 / apache2

Потім бігайте

sudo kill -9 1047

Де 1047 - під програми, що працює на порту 80. Ви можете замінити той pid, який ви отримали netstat


вау! ... і ось я через 48 годин після відправлення квитка на захоплення і чекаю відповіді. дякую
Амйо

2
Що це значить? Я не отримую PID або ім’я. tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN -
Аарон Франке

@AaronFranke Чи можете ви, будь ласка, спробуйте запустити цю команду в Terminal після збільшення вікна?
Анонімний Платипус

2
@AaronFranke запустіть його з судо. Можливо, у вас немає дозволів для перегляду.
Адвайт S

13

Коли у мене виникла ця проблема, це виявилося тому, що мій Apache не міг запускатися під час завантаження, тому що у мене був SSL-сайт, для якого потрібно було ввести пароль для сертифіката.

Хороший спосіб сказати, чи так це для вас, це запустити ps -ef | grep apache: якщо це повертає процеси, схожі на /bin/bash /usr/share/apache2/ask-for-passphrase mysite.com:443 RSAто, він чекає введення пароля в термінал, який ви ніколи не побачите.

По-перше, я вбив вивішений процес (надсилання в kill -HUPідентифікатор процесу для / usr / sbin / apache2 процесу повинно бути достатньо, щоб вбити й інших, але зробити інший, ps -ef | grep apacheщоб бути впевненим).

Потім я дотримувався інструкцій у цій публікації, щоб створити файл пароля SSL, який не потребував введення пароля. Потім service apache2 startдобре працював, і Apache стартував належним чином після перезавантаження.


11

Я отримав цю помилку під час нової установки при запуску apache2 Ubuntu 12.10.

Це помилка в апачі2. Він зависає на задньому плані. Ось мій посібник щодо того, де можуть бути помилки в програмному забезпеченні.

Ось помилка, яку я отримав:

el@titan:~$ sudo service apache2 start
 * Starting web server apache2               
(98)Address already in use: 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]

Адреса вже використовується? Для чого це можна використовувати? Перевір:

el@titan:~$ grep -ri listen /etc/apache2
/etc/apache2/apache2.conf:#   supposed to determine listening ports for incoming connections, and which
/etc/apache2/apache2.conf:# Include list of ports to listen on and which to use for name based vhosts
/etc/apache2/ports.conf:Listen 80
/etc/apache2/ports.conf:    Listen 443
/etc/apache2/ports.conf:    Listen 443

Це означає, що apache2 заважає запуску apache2. Химерність. Це підтвердить:

el@titan:~$ ps -ef | grep apache2
root      1146   954  0 15:51 ?        00:00:00 /bin/sh /etc/rc2.d/S91apache2 start
root      1172  1146  0 15:51 ?        00:00:00 /bin/sh /usr/sbin/apache2ctl start
root      1181  1172  0 15:51 ?        00:00:00 /usr/sbin/apache2 -k start
root      1193  1181  0 15:51 ?        00:00:00 /bin/bash /usr/share/apache2/ask-for-passphrase 127.0.1.1:443 RSA
el        5439  5326  0 16:23 pts/2    00:00:00 grep --color=auto apache2

Так, у цьому випадку apache2 працює, я намагався запустити apache2 вдруге на тому ж порту.

Що мене бентежить, що serviceповідомлення про те, що apache2 НЕ працює:

el@titan:~$ sudo service apache2 status
Apache2 is NOT running.

І коли ви запитуєте apache2ctl на його статус, він зависає.

root@titan:~# /usr/sbin/apache2ctl status
**hangs until Ctrl-C is pressed.

Тож Ubuntu, схоже, має проблеми з управлінням apache2 під час завантаження. Час зупинки apache2:

root@titan:~# /usr/sbin/apache2ctl stop
httpd (no pid file) not running

Велика підказка! Ви намагаєтеся зупинити apache2, і він втратив ідентифікатор процесу! Тож Ubuntu не може зупинити apache2, оскільки він не знає, де він знаходиться!

Ви можете подумати, що перезавантаження виправить це, але це не так, тому що apache2 запускається при завантаженні та зависає. Нормальний процес завантаження для apache2 не працює належним чином.

Отже, як це виправити?

Я зміг це виправити , проаналізувавши psвихід команди. Зауважте, що psкоманда повідомляє нам, що цей процес було запущено "/etc/rc2.d/S91apache2 start".

Це кривдна програма, яка потребує швидкого удару.

/etc/rc2.d/S91apache2символічне посилання, яке використовується для запуску apache2 для вас під час запуску комп'ютера. Чомусь здається, що він запускає apache2, а потім зависає. Тому нам доведеться сказати, щоб цього не робити.

Тож погляньте на це /etc/rc2.d/S91apache2.

el@titan:/etc/rc2.d$ ls -l
lrwxrwxrwx   1 root root    17 Nov  7 21:45 S91apache2 -> ../init.d/apache2*

Це символічне посилання, що ми не хочемо, щоб воно було там. Зробіть це, щоб запобігти запуску apache2 під час завантаження:

root@titan:~# sudo update-rc.d -f apache2 remove
 Removing any system startup links for /etc/init.d/apache2 ...
   /etc/rc0.d/K09apache2
   /etc/rc1.d/K09apache2
   /etc/rc2.d/S91apache2
   /etc/rc3.d/S91apache2
   /etc/rc4.d/S91apache2
   /etc/rc5.d/S91apache2
   /etc/rc6.d/K09apache2

Перезавантажте комп'ютер, щоб переконатися, що apache2 не запускається і не зависає. ОК добре. Тепер ви могли б повернути apache2 назад таким, яким він був, але це призведе до того, що він знову не зможе.

root@titan:~$ sudo update-rc.d apache2 defaults     //(don't do this)
 Adding system startup for /etc/init.d/apache2 ...
   /etc/rc0.d/K20apache2 -> ../init.d/apache2
   /etc/rc1.d/K20apache2 -> ../init.d/apache2
   /etc/rc6.d/K20apache2 -> ../init.d/apache2
   /etc/rc2.d/S20apache2 -> ../init.d/apache2
   /etc/rc3.d/S20apache2 -> ../init.d/apache2
   /etc/rc4.d/S20apache2 -> ../init.d/apache2
   /etc/rc5.d/S20apache2 -> ../init.d/apache2

Замість цього запустіть apache2 так:

sudo service apache2 start

І apache2 знову створює резервні копії та обслуговує сторінки. Здається, є кілька серйозних помилок з apache2 / Ubuntu 12.10, які викликають запуск і зависання apache2. Це вирішення, я думаю, виправлення полягає в тому, щоб отримати новіші версії apache2 та Ubuntu та сподіватися на найкраще.


Приємно читати та користуватися порадами! Дякуємо, що написали "так, як ви це налагодили"!
Рам

10

У мене на моєму сервері AWS EC2 прослуховувався сервер Nginx, я думаю, він налаштувався, коли я будував EC2, отже, я отримував адресу, яка вже використовується помилкою. Тож я припинив службу і запустив службу Apache2:

sudo service nginx stop
sudo service apache2 start

Дякую тонну! Зрештою, спроби це працювало на мене.
Вівек

4

Я зрозумів це. У мене були дублюючі команди Слухати 80 в моїх httpd.conf і ports.conf

Також при копіюванні конфігураційного файлу для цього віртуалізованого сервера я нехтував зауваженням, що каталог журналу помилок був змінений. Заглянувши в цей журнал помилок, я помітив, що каталог для mime.typesконфігураційного файлу в моєму httpd.confфайлі був неправильним . Я оновив цей параметр, і сервер запустився чудово.


3
У мене також були дублікати Listen 80команд і в моєму, httpd.confіports.conf
Gunner Barnes

2

Це означає, що порт 80 вже використовується, або змініть порт для apache2 (що я не рекомендую), відредагувавши:

/etc/apache2/ports.conf

Або закрийте програму, що працює на порту 80:

netstat -antp | grep 80

Щоб знайти те, що працює на порту 80.


netstat -antp | grep 80також нічого не виводить.
Gunner Barnes

чи можете ви скопіювати та вставити висновок netstat -antp | греп 80?
Ділан Доддс

Виходу буквально немає.
Gunner Barnes

хм, це не дивно, спробуйте змінити порт на 81, якщо ні, це не порт, який блокується, є ще одна помилка, ви можете перевірити помилки apache2 у /var/log/apache2/error.log
Ділан Доддс,

2

Просто підказка для кожного, хто, можливо, працює з VirtualBox з NAT-мережами. Я виявив, що правила NAT між моїм гостем і хостом створили себе, прив'язуючи порт


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