在Mac OSX上关闭一个未知自启动的80端口服务器

16

我在80端口上运行了一个服务器,但我不知道它是什么或来自哪里。当我运行

sudo lsof -i :80 | grep LISTEN

我得到了

httpd      80    root    5u  IPv6 0x91f5a9de62859cfd      0t0  TCP *:http (LISTEN)
httpd     694    _www    5u  IPv6 0x91f5a9de62859cfd      0t0  TCP *:http (LISTEN)

我曾尝试使用PID获取进程名称,但始终只返回“httpd”或“FOREGROUND”。

当我杀死PID时,该进程会以新的PID重新启动。我想我将不得不在启动时停止它。

如何阻止此服务器在启动时运行?

如果可以的话,我正在尝试释放端口80以使用MAMP上的Apache服务器。


当你在同一台机器上的浏览器中打开 http://localhost,你会得到什么? - ppeterka
奇怪的是,我得到了一个页面,在<h1>标签中写着“它运行了!” - Stephen Mather
我一定很久以前在端口80上安装了一个服务器,并使用测试文件确认一切正常。但是我什么都不记得了;如果我知道如何找出这是哪个服务器就好了。 - Stephen Mather
4个回答

27

这只是一个猜测,但可能是内置版本的Apache,由launchd(OS X的守护进程管理器)启动(和重新启动)。它默认情况下已禁用,但可能以某种方式被启用。您可以尝试使用以下命令来禁用它:

sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist
如果这样做没有效果(会显示类似“找不到指定的服务”之类的信息),您可以检查一下主进程的PID号码,以查看它是否是其他启动代理项:
sudo launchctl list | grep <masterPID>

这并不一定会告诉您正在发生什么,但可能会指出正确的方向。


谢谢您提供的所有信息!它真的很有帮助,现在我将简单地停止“apachectl”进程。但是随着我手头有更多时间,我一定会深入研究更多技术方面的内容。 - Stephen Mather
2
我一直在努力解决80端口上的一个无法终止的服务问题。无论我做什么都无法停止它,但是你提供的第一个解决方案起作用了。不过这会有任何负面影响吗? - Kevin F.
1
@KevinF。除非有什么东西正在使用该服务(不太可能),否则关闭它应该是完全安全的。 - Gordon Davisson
1
这就是我的全部!谢谢!! - Fateh Khalsa

8

像Gordon建议的那样,这是Apache Web服务器的内置版本。

你可以使用以下方法来停止它:

sudo apachectl stop

顺便说一下,此 Web 服务器的配置可以在 /etc/apache2/httpd.conf 目录中找到。


非常感谢,我不确定为什么,但每当我尝试在没有以root身份登录时运行“apachectl stop”时,它从来都不起作用(即使使用了“sudo”选项)。现在一切都很好! - Stephen Mather

1
这种情况经常发生。正如 @Gordon Davisson 所解释的那样,很可能是 launchdeamon 进程与您设置的服务发生冲突。一定要停止 apachetl 服务器。
sudo apachetl -k stop

尝试查找所有httpd进程,它们应该是最后一个。
sudo lsof -i :80 // without grep

然后获取第一个进程(很可能在1000左右)应该也是最低的一个。
sudo kill <firstHttpdPID>

这应该会杀死所有运行的httpd实例,然后您只需重新启动服务器即可。 但必须先停止它,否则它将继续运行。

1

Mac OSX自带Apache,但是默认是未激活的。你可能已经以某种方式激活了它。在我的情况下,我之前安装了XAMPP并在/etc/apache2/httpd.conf中配置了一些东西,导致我的端口localhost:80指向带有It Works!的html页面。

简而言之,解决方法是停用Apache2服务器。 打开终端,输入以下命令:

sudo apachetl -k stop

在我的情况下,它返回以下内容:
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using Shafies-MacBook-Pro.local. Set the 'ServerName' directive globally to suppress this message
httpd (no pid file) not running

如果你在浏览器中键入 localhost,则端口80不再处于活动状态,你将无法再看到It Works! 信息。

为了背景,我很久以前就删除了XAMPP,并不知道我的 localhost:80 仍然处于活动状态。我无法将虚拟域名 -- posts.com 重定向到我的Kubernetes Yaml配置文件的本地主机端口。
这是我的 ingress-srv.yaml 文件:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ingress-srv
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/use-regex: 'true'
spec:
  rules:
    - host: posts.com
      http:
        paths:
          - path: /?(.*)
            backend:
              serviceName: client-srv
              servicePort: 3000

我已经欺骗操作系统,通过在位于/etc/hosts的主机文件中添加以下行将我的posts.com重定向到localhost:80

127.0.0.1 posts.com

由SM提供


sudo apachetl -k stop <-- typo sudo apachectl -k stop - Frank Groot

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