Назад | Перейти на главную страницу

apache2.4 не может разрешить конфигурацию виртуального хоста

Я настраиваю apache2.4 на example.org, и у нас настроено 2 сайта.

Сайт 1:

<IfModule mod_ssl.c>
        <VirtualHost billingtest.example.org:443>
                ServerAdmin web@sad.asd
                ServerName billingtest.example.org

                ErrorLog ${APACHE_LOG_DIR}/error.log
                CustomLog ${APACHE_LOG_DIR}/access.log combined

                SSLEngine on

                SSLCertificateFile /etc/ssl/certs/example.org.crt
                SSLCertificateKeyFile /etc/ssl/private/example.org.key
                SSLCertificateChainFile /etc/ssl/certs/letsencrypt_sff_bundle.crt

                DocumentRoot /var/www/php/billing
        </VirtualHost>
</IfModule>
<VirtualHost billingtest.example.org:80>
        ServerAdminweb@sad.asd
        ServerName billingtest.example.org

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

#       DocumentRoot /usr/local/apache2/htdocs
        Redirect permanent / https://billingtest.example.org
</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

Сайт 2:

<IfModule mod_ssl.c>
        <VirtualHost example.org:443>
                ServerAdmin web@sad.asd
                ServerName example.org

                ErrorLog ${APACHE_LOG_DIR}/error.log
                CustomLog ${APACHE_LOG_DIR}/access.log combined

                SSLEngine on

                SSLCertificateFile /etc/ssl/certs/example.org.crt
                SSLCertificateKeyFile /etc/ssl/private/example.org.key
                SSLCertificateChainFile /etc/ssl/certs/letsencrypt_sff_bundle.crt

                DocumentRoot /var/www/html/main
        </VirtualHost>
</IfModule>
<VirtualHost example.org:80>
        ServerAdmin web@sad.asd
        ServerName example.org

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

#       DocumentRoot /usr/local/apache2/htdocs
        Redirect permanent / https://example.org
</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

При посещении любого из этих сайтов я встречаю указатель /var/www/html каталог и если переключиться на URL server001.example.org Я получаю тот же результат. example.org и billingtest.example.org являются CNAME записи о server001.example.org на котором размещен сервер Apache.

example.org (сайт 2) должен загружать обычный HTML-сайт и billingtest.example.org (сайт 1) должен загружать сайт PHP.

Я не уверен, что происходит. Я могу предоставить свой apache2.conf и журналы. Также мое внимание привлекла ошибка:

(EAI 2)Name or service not known: AH00547: Could not resolve host name billingtest.example.org -- ignoring!


Заранее благодарим вас за любую поддержку, которую вы можете оказать.

Я знаю, что это старый вопрос, но он может помочь кому-то еще в похожей на меня ситуации.

У меня такая же ошибка, как и у вас (Name or service not known: AH00547: Could not resolve host name… -- ignoring!) в /var/log/messages/ происходит во время загрузки сервера.

Сразу после загрузки Apache игнорировал конфигурацию виртуального хоста - все указывало на резервный домен (и в результате сертификаты SSL были недействительными). Как ни странно, перезапуск Apache с systemctl restart httpd исправил проблему.

Так что проблема возникла только сразу после перезагрузки сервера. Конфиги были в порядке, как показывает простой перезапуск Apache! Но я не мог рисковать перезагрузкой, когда меня не было рядом.

После долгих поисков я обнаружил, что Apache запускается до того, как сеть будет готова, и поэтому он не может разрешить доменное имя и поэтому игнорирует его при настройке виртуальных хостов.

Итак, я немного поискал, и довольно легко сказать systemd, что Apache должен ждать, пока сеть не заработает, во время загрузки.

Так, systemctl edit httpd.service вызывает текстовый редактор, в который я вошел:

[Unit]
After=network-online.target

Сохраните его, и теперь Apache ждет, пока сеть не заработает должным образом перед запуском.

Для более подробного объяснения настройки порядка запуска systemd:

https://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/

https://unix.stackexchange.com/questions/398540/how-to-override-systemd-unit-file-settings

https://unix.stackexchange.com/questions/165270/centos-7-boots-too-fast-and-network-is-not-ready-when-executing-cron-scripts

Перемещено использование ServerName вместо имени виртуального хоста. Поменял его обратно на _default_. Это происходит только при использовании AWS, а не Linode, я думаю, это потому, что машина не использует общедоступный IP-адрес, а работает через брандмауэр. Это можно было бы отсортировать с модификациями / etc / hosts, которых я хотел избежать.

Я просто использую _default_, спасибо Джиму Л. за помощь!

Сообщение об ошибке является подсказкой.

"Не удалось разрешить ..."

означает, что имя хоста billingtest.example.org не существует в DNS для example.org, или, по крайней мере, машина, которую вы называете server001.example.org не могу понять, какой IP номер для billingtest.example.org является.

Что касается решения этой проблемы, учитывая, что название подразумевает тестовый сайт, возможно, что billingtest.example.org еще не существует в общедоступном DNS именно потому, что это тестовый сайт, и имя не должно публиковаться (пока). Замечательно. Добавить в /etc/hosts на server001. Если его IP-адрес 10.11.12.13 затем добавьте это в /etc/hosts:

10.11.12.13 billingtest.example.org

Затем перезапустите Apache и посмотрите, исчезнет ли это сообщение об ошибке.

Это может показаться взломом, но ИМО, это отличная практика, потому что пока вы тестируете этот URL-адрес является "секретным" именем, которое не принадлежать в DNS. Добавить в /etc/hosts на сервере, затем добавьте его также в /etc/hosts на ваш машины, а затем вы можете использовать этот сервер с этим именем в течение всего дня, и никто другой не знает, что это имя даже используется (без поиска DNS, если ваш хост обращается к /etc/hosts перед DNS).

Но если вы доверяете группе коллег хранить секрет, вы жестяная банка Добавить billingtest.example.org в ваш общедоступный DNS, и тогда любой, кто владеет этим URL-адресом, сможет получить доступ к сайту. Когда вы закончите тестирование, вы можете изменить запись DNS и конфигурацию Apache, чтобы просто использовать billing вместо того billingtest.

Добавление имени в общедоступный DNS также должно решить проблему, хотя вам придется дождаться распространения DNS и убедиться, что server001 может решить billingtestи перезапустите Apache, как и в другом методе.