我在 Mac OS X 上运行着 Apache 2.4。apachectl configtest
结果显示:语法正常。
我设置了两个虚拟主机,一个名为localhost,一个名为test.dev。
<VirtualHost *:80>
DocumentRoot "/Users/psychomachine/Development/_localhost"
ServerName localhost
ServerAlias www.localhost
<Directory />
Require all granted
</Directory>
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/Users/psychomachine/Development/test"
ServerName test.dev
ServerAlias www.test.dev
<Directory />
Require all granted
</Directory>
</VirtualHost>
localhost 就可以正常工作:
↪ curl -I -L localhost 15:51:08
HTTP/1.1 200 OK
Date: Tue, 08 Dec 2015 14:51:17 GMT
Server: Apache/2.4.16 (Unix)
Last-Modified: Tue, 08 Dec 2015 08:52:04 GMT
ETag: "c-5265f1673f500"
Accept-Ranges: bytes
Content-Length: 12
Content-Type: text/html
而 test.dev 没有:
↪ curl -I -L test.dev 15:51:01
curl: (7) Failed to connect to test.dev port 80: Connection refused
我的 hosts 文件有一个 test.dev 的条目,这就是我可以 ping test.dev 并收到 127.0.0.1 的回复的原因。
↪ ping test.dev 15:53:39
PING test.dev (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.069 ms
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.096 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.111 ms
^C
--- test.dev ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.069/0.092/0.111/0.017 ms
我花了几个小时研究这个问题,但还是不明白为什么 ping test.dev 时仍然会出现连接被拒绝的情况。Apache 正在监听端口 80,但我没有收到页面被禁止的错误。Apache 日志中没有 test.dev 的任何内容,因为对 test.dev 的请求从未到达 Apache。
我遗漏了这个谜题的一个关键元素——我希望有人能给我指明正确的方向。
提前谢谢了。
编辑: 正如我所说,Apache 正在监听 80:
sudo lsof -i ':80' 16:54:46
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
httpd 2464 root 5u IPv6 0x8883a2a43af0ca7f 0t0 TCP *:http (LISTEN)
httpd 2466 daemon 5u IPv6 0x8883a2a43af0ca7f 0t0 TCP *:http (LISTEN)
httpd 2467 daemon 5u IPv6 0x8883a2a43af0ca7f 0t0 TCP *:http (LISTEN)
httpd 2468 daemon 5u IPv6 0x8883a2a43af0ca7f 0t0 TCP *:http (LISTEN)
httpd 2469 daemon 5u IPv6 0x8883a2a43af0ca7f 0t0 TCP *:http (LISTEN)
httpd 2470 daemon 5u IPv6 0x8883a2a43af0ca7f 0t0 TCP *:http (LISTEN)
附加信息
scutil -r test.dev 08:25:59
Reachable
telnet test.dev 08:26:17
Trying 127.0.0.1...
telnet: connect to address 127.0.0.1: Connection refused
telnet: Unable to connect to remote host
telnet test.dev 80 08:26:43
Trying 127.0.0.1...
telnet: connect to address 127.0.0.1: Connection refused
telnet: Unable to connect to remote host
127.0.0.1 test.dev
在apache 的 conf 中/etc/hosts
。Listen *:80
答案1
检查您httpd.conf
是否具有以下情况:
Listen 127.0.0.1:80
您必须将其替换为:
Listen *:80
通过这样做,Apache 将绑定到计算机的所有接口,而不仅仅是回送界面。
编辑后请不要忘记重新启动 Apache httpd.conf
。
答案2
尽管 Apache 正在监听端口 80,但该端口拒绝连接。最后,以下方法对我有用:
我确保所有接口上的 80 端口都对 TCP 开放,在 OSX 上,您可以通过添加
pass in proto tcp from any to any port 80
到/etc/pf.conf
。重新加载 pfctl 并没有起到什么作用,但重新启动就起作用了。现在我的所有虚拟主机都可以访问了。世界又恢复了秩序。
答案3
尝试将 test.dev 与另一个可用端口连接以进行 http 或 https 通信。或者停止使用端口“:80”的先前 PID,然后运行。使用 - 检查进程 ID
netstat -ltnp |复制代码
杀死-9