Я настраиваю 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
Перемещено использование 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, как и в другом методе.