Я настраиваю 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 - игнорируется!
Заранее благодарим вас за любую поддержку, которую вы можете оказать.
Опора перенесена на 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 так же, как и с другим методом.
Я знаю, что это старый вопрос, но он может помочь кому-то другому в ситуации, похожей на мою.
Я получил ту же ошибку, что и вы (Имя или служба неизвестна: 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