Как мне узнать, как macPorts украл мой порт:80?

У меня была установлена ​​MAMP (и она работает нормально), затем я попытался установить mongoDB через macPorts. Затем macports начал устанавливать кучу зависимостей. после этого http://localhost/ начал давать "Это работает!" экран. после перезагрузки, чтобы посмотреть, может ли это исправить, я обнаружил, что не могу запустить свой сервер MAMP. консоль сказала это:

9/13/10 1:20:54 PM  [0x0-0x12012].de.appsolute.MAMP[133]    (48)Address already in use: make_sock: could not bind to address [::]:80

Я знаю, что MacPorts сделал что-то глупое, чтобы связываться со мной. Как я могу узнать, что он установил, это украл порт:80?

вот некоторая команда, которую я пробовал: (:80 не сработало, поэтому я просто использовал 80)

$ sudo netstat -an | grep 80 
Password:
tcp46      0      0  *.80                   *.*                    LISTEN
udp6       0      0  fe80::21e:52ff:f.123   *.*                    
udp6       0      0  fe80::1%lo0.123        *.*   

а также:

$ lsof -i :80
COMMAND   PID        USER   FD   TYPE     DEVICE SIZE/OFF NODE NAME
firefox-b 451 biting_duck   39u  IPv4 0x0ab806b0      0t0  TCP 192.168.0.198:49515->stackru.com:http (ESTABLISHED)
firefox-b 451 biting_duck   40u  IPv4 0x0ab87ec8      0t0  TCP 192.168.0.198:49517->sstatic.net:http (ESTABLISHED)
firefox-b 451 biting_duck   41u  IPv4 0x0ab88aec      0t0  TCP 192.168.0.198:49516->pz-in-f95.1e100.net:http (ESTABLISHED)
firefox-b 451 biting_duck   42u  IPv4 0x0ab97334      0t0  TCP 192.168.0.198:49518->sstatic.net:http (ESTABLISHED)
firefox-b 451 biting_duck   47u  IPv4 0x0ab87abc      0t0  TCP 192.168.0.198:49519->sstatic.net:http (ESTABLISHED)
firefox-b 451 biting_duck   48u  IPv4 0x0ab886e0      0t0  TCP 192.168.0.198:49520->sstatic.net:http (ESTABLISHED)
firefox-b 451 biting_duck   50u  IPv4 0x0ab89b1c      0t0  TCP 192.168.0.198:49521->sstatic.net:http (ESTABLISHED)
firefox-b 451 biting_duck   51u  IPv4 0x0ab86680      0t0  TCP 192.168.0.198:49522->peak-colo-196-216.peak.org:http (ESTABLISHED)
firefox-b 451 biting_duck   54u  IPv4 0x0ab81ef8      0t0  TCP 192.168.0.198:49523->gravatar.com:http (ESTABLISHED)
firefox-b 451 biting_duck   55u  IPv4 0x0ab82710      0t0  TCP 192.168.0.198:49524->gravatar.com:http (ESTABLISHED)
firefox-b 451 biting_duck   56u  IPv4 0x0ab8a334      0t0  TCP 192.168.0.198:49526->64.34.80.176:http (ESTABLISHED)
firefox-b 451 biting_duck   57u  IPv4 0x0ab812d4      0t0  TCP 192.168.0.198:49525->pv-in-f101.1e100.net:http (ESTABLISHED)

6 ответов

Из того, что вы описываете об ошибках запуска и /private/etc/apache2/httpd.conf, похоже, что копия Apache, установленная с базовой ОС, включена. Проверьте Системные настройки -> Сервисы -> Веб-сервис и отключите его при необходимости. Если он там не включен, попробуйте:

sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist

... и если это не сработает, загляните в /Library/LaunchDaemons, чтобы узнать, было ли установлено что-то еще, запускающее системную копию Apache (/usr/sbin/httpd).

На Max OS 10.1, Mountain Lion, отключение apache устранило эту проблему для меня.

sudo apachectl stop

В OS X был установлен встроенный веб-сервер Apache, который находится в /etc/apache2. Сообщение "Это работает!" Отображается, когда каким-то образом запускается веб-сервер Apache. Ниже описан процесс его остановки / запуска.

sudo apachectl stop
sudo apachectl start

sudo необходим в качестве порта 80 доступа к веб-серверу.

Если какой-либо сервис определит, что он будет прослушивать порт 80, launchd зарезервирует его во время начальной загрузки. Это может быть apache, но это может быть и что-то еще. Если у вас нет apache, но есть проблема, попробуйте

cd ~/Library/LaunchAgents
grep -R 80 .
cd /System/Library/LaunchDaemons
grep -R 80 .

Он должен показать вам агенты, слушающие порт 80. Удалите и перезапустите!

Порт MongoDB не устанавливает ничего, что потребовало бы или использовал порт 80. Ни одна из его зависимостей. Кроме того, единственный способ, которым порт MacPorts может захватить порт 80 при запуске, - это если он установил демон запуска, но MacPorts не активирует никаких демонов запуска самостоятельно (вы должны сделать это вручную).

Тем не менее, вы можете узнать, какая программа прослушивает определенный порт, выполнив

$ lsof -i :<port>

Например,

$ lsof -i :80

покажет вам программу, прослушивающую порт 80. Это должно сузить то, что захватывает порт.

Убедитесь, что ваши httpd.conf файлы правильные. Это означает: не более 1 "Слушай 80". Если у вас есть Listen 80 (или любой другой порт) более одного раза, это вызовет ошибку привязки.

Я надеюсь, что это полезно для вас:)

Другие вопросы по тегам