- Вопрос или проблема
- Ответ или решение
- Ошибка ERR_CONNECTION_REFUSED при использовании виртуальных хостов в Apache 2.4 на macOS Ventura
- 1. Проверка конфигурации /etc/hosts
- 2. Проверка конфигурации Apache
- 3. Проверка конфликтов с другими инстансами Apache
- 4. Проверка настройки порта
- 5. Перезагрузка служб
- 6. Проверка доступности с помощью cURL
- Заключение
Вопрос или проблема
У меня настроено несколько виртуальных хостов на macOS Ventura 13.7. Прошло несколько лет с тех пор, как я это настроил, и теперь мне нужно запустить и разработать новый сайт. Либо моя система больше не настроена правильно, либо я забыл шаги. Я хочу иметь возможность открывать и запускать любые свои веб-сайты (html или php) на своем локальном компьютере.
Конфигурация
/etc/hosts
содержит
##
# База данных хостов
#
# localhost используется для настройки интерфейса loopback
# во время загрузки системы. Не изменяйте эту запись.
##
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
127.0.0.1 mysite1.com
127.0.0.1 mysite2.com
127.0.0.1 mysite3.com
127.0.0.1 mysite4.com
127.0.0.1 mysite5.cc
127.0.0.1 mysite6.com
127.0.0.1 mysite7.com
127.0.0.1 kubernetes.docker.internal
# kubernetes добавлено Docker Desktop
# Чтобы тот же kube контекст работал на хосте и в контейнере:
# Конец раздела
/etc/apache2/httpd.conf
содержит
# Виртуальные хосты
Include /private/etc/apache2/extra/httpd-vhosts.conf
<IfDefine SERVER_APP_HAS_DEFAULT_PORTS>
Listen 8080
</IfDefine>
<IfDefine !SERVER_APP_HAS_DEFAULT_PORTS>
Listen 80
</IfDefine>
ServerName localhost
<Directory />
AllowOverride all
Require all denied
</Directory>
DocumentRoot "/Volumes/HD/Web/websites"
<Directory "/Volumes/HD/Web/websites">
Options Indexes FollowSymLinks Multiviews
MultiviewsMatch Any
AllowOverride All
Require all granted
</Directory>
/etc/apache2/extra/httpd-vhosts.conf
содержит
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot "/Volumes/HD/Web/websites/mysite1"
ServerName localmysite1.com
ServerAlias www.localmysite1.com
ErrorLog "/Volumes/HD/Web/websites/apache_logs/localmysite1/logs/error_log"
CustomLog "/Volumes/HD/Web/websites/apache_logs/localmysite1/logs/access_log" common
</VirtualHost>
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot "/Volumes/HD/Web/websites/mysite2"
ServerName localmysite2.com
ServerAlias www.localmysite2.com
ErrorLog "/Volumes/HD/Web/websites/apache_logs/localmysite2/logs/error_log"
CustomLog "/Volumes/HD/Web/websites/apache_logs/localmysite2/logs/access_log" common
</VirtualHost>
...
Проблема
mysite5.cc
показывает html-страницу, которая находится в /Volumes/HD/Web/websites
. Она работает так, как будто я указываю браузер на 127.0.0.1
или localhost:80
. Я не вижу, почему этот сайт ведет себя иначе.
Мне удалось открыть каждый из других сайтов в Chrome ровно один раз. После закрытия вкладки я больше не могу получить к ним доступ, даже если перезапускаю Apache. Я вижу эту ошибку
Это сайт недоступен
mysite1.com отказался от соединения.
Попробуйте:
Проверить соединение
Проверить прокси и брандмауэр
ERR_CONNECTION_REFUSED
Это та же ошибка, которую я получаю, если указываю в браузере localhost:8080
.
Устранение неполадок
Перезапуск Apache не помогает. Перезагрузка компьютера также не помогла.
apachectl configtest
возвращает Syntax OK
Я пытался очистить кэш DNS с помощью
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
Я пытался изменить Listen 80
на Listen 8080
и наоборот. Интересно, что это не изменяет то, что я вижу в браузере. localhost:80 всегда показывает страницу в DocumentRoot. Я вижу начальный вид каждого сайта в журналах доступа. Ошибок не зафиксировано.
Сравнивая с похожими постами здесь, я попробовал следующее:
↪ curl -I -L 127.0.0.1
HTTP/1.1 200 OK
Date: Fri, 25 Oct 2024 06:46:39 GMT
Server: Apache/2.4.59 (Unix) PHP/8.3.4
Last-Modified: Sat, 10 Feb 2024 21:51:14 GMT
ETag: "22-6110e0b1e1880"
Accept-Ranges: bytes
Content-Length: 34
nslookup mysite1.com
** сервер не может найти mysite1.com: NXDOMAIN
httpd -v
Версия сервера: Apache/2.4.59 (Unix)
Сервер собран: Apr 3 2024 12:22:45
which httpd
/usr/local/bin/httpd
php -v
PHP 8.3.4 (cli) (собран: Mar 12 2024 23:42:26) (NTS)
Авторские права (c) Группа PHP
Zend Engine v4.3.4, Авторские права (c) Zend Technologies
с Zend OPcache v8.3.4, Авторские права (c), от Zend Technologies
which php
/usr/local/opt/php/bin/php
Я использую sudo apachectl start
для запуска apache.
Вышеизложенное заставило меня подумать, что у меня установлена другая инстанция apache. Оказалось, что это так. Я, должно быть, установил Apache из Homebrew в какой-то момент. В /usr/local/etc/httpd
я нашел копию httpd.conf
и /extra/httpd-vhosts.conf
. Я не вижу версии файла hosts
от brew.
Сравнение файлов показало, что версия httpd.conf
из Homebrew содержит Listen 127.0.0.1:80
. Я изменил это на Listen *:80
. Теперь, когда я посещаю mysite5.cc
, php файл загружается на мой рабочий стол. По крайней мере, это лучше, чем отображение неправильной страницы. Мне нужно вспомнить, как запустить php…
Странно, что, когда я посещаю другие сайты, я все еще вижу ошибку соединения. Поэтому у меня все еще есть проблемы с конфигурацией.
Ответ или решение
Ошибка ERR_CONNECTION_REFUSED при использовании виртуальных хостов в Apache 2.4 на macOS Ventura
Если вы столкнулись с ошибкой ERR_CONNECTION_REFUSED при работе с виртуальными хостами Apache на macOS Ventura, необходимо выполнить комплексный анализ вашей конфигурации и среды разработки. Давайте рассмотрим ключевые шаги и рекомендации для устранения данной проблемы.
1. Проверка конфигурации /etc/hosts
Ваш файл /etc/hosts
выглядит правильно, поскольку он включает необходимые записи для локального хостинга:
127.0.0.1 mysite1.com
127.0.0.1 mysite2.com
...
Убедитесь, что каждая запись действительно соответствует необходимым виртуальным хостам. Также проверьте отсутствие синтаксических ошибок и лишних символов в файле.
2. Проверка конфигурации Apache
Убедитесь, что файл конфигурации Apache /etc/apache2/httpd.conf
правильно настроен для работы с виртуальными хостами. Обратите внимание, что вы уже включили:
Include /private/etc/apache2/extra/httpd-vhosts.conf
Это необходимо для того, чтобы виртуальные хосты правильно работали. Убедитесь, что в конфигурации виртуальных хостов (файл /etc/apache2/extra/httpd-vhosts.conf
) используются правильные пути к DocumentRoot
и что все директивы правильно прописаны:
<VirtualHost *:80>
DocumentRoot "/Volumes/HD/Web/websites/mysite1"
ServerName localmysite1.com
...
</VirtualHost>
Убедитесь, что все необходимые хосты прописаны в этом файле.
3. Проверка конфликтов с другими инстансами Apache
Ваши выводы указывают на наличие нескольких установок Apache — одной из Homebrew и другой, встроенной в macOS. Убедитесь, что вы используете один и тот же экземпляр Apache для запуска:
which httpd
Это покажет, какой именно Apache вы запускаете. Если вы используете Homebrew, убедитесь, что конфигурации и каталоги не конфликтуют. В режиме отладки можно использовать:
sudo apachectl -k start
И проверьте, нет ли ошибок в логах Apache (/usr/local/var/log/httpd/error_log
или других, в зависимости от вашей конфигурации).
4. Проверка настройки порта
Если ваш текущий экземпляр Apache настроен на работу с портом 8080, убедитесь, что ваши виртуальные хосты также правильно настроены для использования этого порта, а не 80. Проверьте, какую команду вы используете для доступа к вашему сайту — если вы настраиваете Apache на использование порта 8080, то доступ должен быть через http://mysite1.com:8080
.
Измените конфигурацию следующим образом, если используете 8080:
Listen 8080
<VirtualHost *:8080>
...
</VirtualHost>
5. Перезагрузка служб
После внесения всех изменений убедитесь в их применении:
sudo apachectl restart
Также полезно проверить статус сервера:
sudo apachectl -S
Это покажет все загруженные виртуальные хосты и на каких портах они слушают.
6. Проверка доступности с помощью cURL
Дополнительно можно проверить доступность серверов через cURL:
curl -I http://mysite1.com
Это поможет понять, правильно ли сервер отвечает на запросы, и используется ли корректный конфигурационный файл.
Заключение
Ошибки ERR_CONNECTION_REFUSED часто указывают на проблемы с доступностью сервера или неправильными настройками виртуальных хостов. Пошаговая проверка конфигураций, устранение конфликтов и правильная работа с портами должны помочь вам восстановить доступ к вашим сайтам на локальном сервере. Если проблемы сохраняются, рекомендуется проверить журналы ошибок Apache для детальной диагностики.