У меня Apache 2.4 работает на Mac OS X. 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
Я часами смотрел на это, но до сих пор не понимаю, как можно пинговать 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
в /etc/hosts
и Listen *:80
находится в конф.
Проверь себя httpd.conf
чтобы узнать, есть ли у вас следующее:
Listen 127.0.0.1:80
Вы должны заменить его:
Listen *:80
Таким образом, Apache будет связываться со всеми интерфейсами компьютера, а не только с петля интерфейс.
Не забудьте перезапустить Apache после редактирования httpd.conf
.
Несмотря на то, что Apache прослушивал порт 80, этот порт отказывался от подключения. В итоге у меня сработало вот что:
Я убедился, что порт 80 открыт для TCP на всех интерфейсах, что в OSX вы делаете, добавляя
pass in proto tcp from any to any port 80
к /etc/pf.conf
. Перезагрузка pfctl не совсем помогла, но перезагрузка сделала. Теперь все мои виртуальные хосты доступны. И в мире снова порядок.
Попробуйте подключить test.dev к другому доступному порту для связи по протоколу http или https. ИЛИ остановите предыдущий PID с портом ': 80', а затем запустите. Проверьте идентификатор процесса с помощью -
netstat -ltnp | grep ': 80'
убить -9