端口 80:连接被拒绝。如何在 Mac OSX 上修复?

Ten*_*nch 6 port mac-osx localhost virtualhost apache-2.4

我注意到两台 Mac 上的 Apache 虚拟主机存在一些问题,否则它们具有相同类型的设置(就 httpd.conf、vhosts、主机等而言)。在一台 Mac 上,虚拟主机可以正常运行,而在另一台 Mac 上,我在端口 80 上连接被拒绝。

我认为这似乎不是 Apache 配置的问题,而是与端口有关。

即,无法在 80 上为虚拟主机 test.dev 提供服务的机器在端口扫描时向我显示了这一点:

???????????? ???????????????????...

Port Scanning host: 127.0.0.1

     Open TCP Port:     88          kerberos
     Open TCP Port:     445         microsoft-ds
     Open TCP Port:     548         afpovertcp
     Open TCP Port:     631         ipp
???????????? ?????? ?????????…
Run Code Online (Sandbox Code Playgroud)

为 test.dev 提供服务的机器显示:

Port Scanning host: 127.0.0.1

     Open TCP Port:     22          ssh
     Open TCP Port:     53          domain
     Open TCP Port:     80          http
     Open TCP Port:     88          kerberos
     Open TCP Port:     445         microsoft-ds
     Open TCP Port:     548         afpovertcp
     Open TCP Port:     631         ipp
???????????? ?????? ?????????…
Run Code Online (Sandbox Code Playgroud)

因此,在“好”机器上,会列出端口 80,而在“坏”机器上则没有。

在两台机器上,我都有 apache 监听 *:80 等,正确设置 vhosts,主机文件中的适当条目等。两台 Mac 都运行 El Capitan,在同一网络上等。

在好的 mac 上,提供了 test.dev,在坏的 mac 上,我得到了这个:

? curl -I -L test.dev                                                                                                                                                               15:51:01
curl: (7) Failed to connect to test.dev port 80: Connection refused
Run Code Online (Sandbox Code Playgroud)

我有点不知所措,因为我不知道如何解决这个问题。为什么端口 80 没有出现在坏 Mac 的端口扫描中(使用 Network Utility 应用程序),但sudo lsof -i -P | grep -i "80"给了我:

httpd     4482           root    5u  IPv6 0xfe89d5ee2c7da24b      0t0  TCP *:80 (LISTEN)
httpd     4484         daemon    5u  IPv6 0xfe89d5ee2c7da24b      0t0  TCP *:80 (LISTEN)
httpd     4485         daemon    5u  IPv6 0xfe89d5ee2c7da24b      0t0  TCP *:80 (LISTEN)
httpd     4486         daemon    5u  IPv6 0xfe89d5ee2c7da24b      0t0  TCP *:80 (LISTEN)
httpd     4487         daemon    5u  IPv6 0xfe89d5ee2c7da24b      0t0  TCP *:80 (LISTEN)
httpd     4488         daemon    5u  IPv6 0xfe89d5ee2c7da24b      0t0  TCP *:80 (LISTEN)
Run Code Online (Sandbox Code Playgroud)

提前谢谢了。

一切顺利,丁奇

编辑:我被要求证明为什么这不是关于拒绝连接的更一般问题的重复问题。这不是因为我的问题是特定于 Mac OSX 的,而对我有用的解决方案(见下文)需要编辑 pf.conf 并使用 pfctl,这在假定的重复问题中根本没有提到。

Ten*_*nch 5

为了确保端口 80 对所有接口上的 TCP 开放,我添加了

pass in proto tcp from any to any port 80
Run Code Online (Sandbox Code Playgroud)

/etc/pf.conf。重新加载 pfctl 并不能完全解决问题,但重新启动可以。现在,端口在端口扫描中显示为打开状态,并且我的虚拟主机已按应有的方式提供服务。