Mac中的80端口是用于什么的?

30

我们的服务器必须使用端口80。但是在我尝试在Mac上使用时,它总是说80已被占用了,但我不知道是哪个程序在使用它。

我在Google上搜索过,有人说是关于Apache的,但我尝试了一下,没有起作用。我找到了这个:https://gist.github.com/kujohn/7209628,但似乎访问我们的服务器IP地址并不能起作用。

我真的不知道发生了什么以及如何找出哪个程序正在使用端口80并停止它。

如果有人能帮忙,我会非常感激,因为我是新手使用Mac。谢谢。


可能是在Mac OS X上谁监听了给定的TCP端口?的重复问题。 - TheDarkKnight
6个回答

47

找出占用80端口的进程:

  1. 进入应用程序目录;
  2. 打开实用工具文件夹;
  3. 打开活动监视器
  4. 点击内存选项卡;
  5. 查看端口及其使用的进程,找到80端口并选择它;
  6. 进入菜单栏中的“视图”,然后选择强制退出进程

这只会终止该进程,而不会阻止已经运行的服务器实例继续运行。 (更正:“端口”列显示打开的端口数(和文件数?),而不是端口号)

如果您正在使用数据库管理系统,或者使用哪种数据库管理系统不确定,下面是一种使用MAMP的方法:

  • 通过使用sudo apachectl stop命令来停止服务器;
  • 然后将端口更改为80端口;
  • 最后重新启动服务器。

我经历了整个过程。nmap告诉我80端口正在使用,而活动监视器却显示没有任何程序在使用80端口。简单的重启解决了所有问题。 - Adam Fowler
正如我之前所述,目前不清楚您是否正在使用数据库管理系统以及使用的是哪一种。但是,我使用MAMP时采用的一种方法如下:使用“sudo apachectl stop”命令停止服务器。 然后将端口更改为80端口。 最后重新启动您的服务器。 - DocJ457

29

在终端中键入以下内容

sudo lsof -i -n -P | grep TCP

您会得到一个列表 - 例如 Dropbox 监听在 80 端口
您可以将输出复制到文本编辑器等中进行搜索


1
谢谢。我找到了这个:Google 198 admin 124u IPv4 0x47db4f2daddc29eb 0t0 TCP 172.29.71.138:50854->120.29.145.17:80 (ESTABLISHED) Google 198 admin 126u IPv4 0x47db4f2dadd8addb 0t0 TCP 172.29.71.138:50856->96.17.199.32:80 (ESTABLISHED)你知道这是什么意思吗?看起来这是我按照我在问题中提供的链接中的指示所做的结果。但现在它不起作用了。 - Sky

5

在Mac上,1024以下的端口只能由root用户绑定。请尝试以root用户(使用sudo命令)启动您的服务器,或者尝试使用1024以上的端口。

您还可以尝试在/etc/sudoers文件中为您的用户添加root权限。

# root and users in group wheel can run anything on any machine as any user
root            ALL = (ALL) ALL
%admin          ALL = (ALL) ALL
your_user_here  ALL = (ALL) ALL

3
将root权限添加到您自己的用户中,这个最后的建议非常非常危险。 - grooveplex
1
是的,这是真的,出于安全原因,这很危险。但正如他所说,他有一台服务器,他只是想在他的 Mac 上启动它,可能是为了开发目的,但是,不建议永久这样做,只是为了试用目的。 - Carlos B. Flores
是的,我也在开发中使用它,这样我就不必重新配置一些API调用。我不建议更改/etc/sudoers文件。如果这只是一个临时的开发情况,我会直接切换到root用户(sudo -i),然后返回到项目并运行serve --port 80 - Matthew Zackschewski

4
我遇到了这个问题,apache已通过launchctl禁用,但启动后仍占用80端口。可以启动apache并正常工作,但在卸载后,无法在80端口上启动任何服务。我使用Python内置的Web服务器进行简单测试。它可以在81端口上工作,但不能在80端口上工作。
以下是症状:
$ launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist 
/System/Library/LaunchDaemons/org.apache.httpd.plist: Could not find specified service
$ sudo lsof -i ':80'
COMMAND  PID USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
Python  3353 root    3u  IPv4 0xe455777a82799f05      0t0  TCP *:http (LISTEN)

对于我来说,解决方案(在搜索了太多后)很简单:

sudo pfctl -F all

这将刷新数据包过滤器,释放端口80(和其他我认为Apache可能占用的端口8080、443等)。

之后,重新启动Python服务器,它就可以正常运行了。


一直在修复这个问题,尝试了所有的方法,但这个方法救了我。谢谢! - cgrayson

3

可能是Skype在使用80端口。如果您已经安装并运行Skype,请尝试在设置中更改到其他端口。


谢谢您的评论。但我还没有安装Skype。 - Sky
就像我在谷歌上搜索到的那样,有一种方法可以更改一个Apache文件的监听器,最初是80。但是当我将其更改为其他值后,它并没有起作用。 - Sky

-2

是的,但我不知道哪一个在使用它。您有什么想法可以找到正在使用此端口的服务器吗?谢谢! - Sky
嘿,在终端窗口中输入命令lsof -n | grep LISTEN,以获取进程列表以及它们正在侦听的端口。 - Kári
我得到了一个列表,但似乎没有使用80端口: TCP 127.0.0.1:49563 (LISTEN) TCP 127.0.0.1:6942 (LISTEN) TCP 127.0.0.1:63342 (LISTEN) TCP *:astromed-main (LISTEN) TCP *:49966 (LISTEN) TCP *:49604 (LISTEN) TCP *:ff-sm (LISTEN) TCP *:49607 (LISTEN) TCP *:http-alt (LISTEN) TCP *:8009 (LISTEN) TCP 127.0.0.1:8005 (LISTEN) TCP *:5701 (LISTEN) TCP 127.0.0.1:25035 (LISTEN) TCP [::1]:25035 (LISTEN) 这是您提到的命令显示的最后一列。 - Sky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接