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.

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

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

(EAI 2) Имя или служба неизвестны: AH00547: Не удалось разрешить имя хоста billingtest.example.org - игнорируется!


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

0
задан 28 July 2019 в 08:12
3 ответа

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

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

1
ответ дан 4 December 2019 в 15:39

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

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

означает, что имя хоста 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 так же, как и с другим методом.

0
ответ дан 4 December 2019 в 15:39

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

Я получил ту же ошибку, что и вы (Имя или служба неизвестна: AH00547: Не удалось разрешить имя хоста… -- игнорирую! ) в /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-ready-when-executing-cron-scripts

1
ответ дан 7 May 2020 в 00:25

Теги

Похожие вопросы