ERR_CONNECTION_REFUSED виртуальный хост apache 2.4 mac ventura

Вопрос или проблема

У меня настроено несколько виртуальных хостов на 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 для детальной диагностики.

Оцените материал
Добавить комментарий

Капча загружается...