apache не будет перезагружаться после добавления файла конфигурации VirtualHost, почему бы и нет?

14

На CentOS 7сервере я получаю следующую ошибку при вводе sudo apachectl restartпосле добавления файла включения в нижней части httpd.conf:

Job for httpd.service failed. See 'systemctl status httpd.service' and 'journalctl -xn' for details.

Когда я тогда печатаю sudo systemctl status httpd.service -l, результат:

httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled)
   Active: failed (Result: exit-code) since Tue 2014-12-23 20:10:37 EST; 2min 15s ago
  Process: 2101 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=0/SUCCESS)
  Process: 2099 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited, status=1/FAILURE)
 Main PID: 2099 (code=exited, status=1/FAILURE)
   Status: "Total requests: 0; Current requests/sec: 0; Current traffic:   0 B/sec"

Dec 23 20:10:37 ip-address httpd[2099]: AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::e23f:49ff:feb7:2a21. Set the 'ServerName' directive globally to suppress this message
Dec 23 20:10:37 ip-address systemd[1]: httpd.service: main process exited, code=exited, status=1/FAILURE
Dec 23 20:10:37 ip-address systemd[1]: Failed to start The Apache HTTP Server.
Dec 23 20:10:37 ip-address systemd[1]: Unit httpd.service entered failed state.

Я могу apacheперезапустить компьютер, если закомментирую директиву include, и могу снова создать ошибку, не комментируя директиву include. Как мне apacheначать правильно использовать содержимое включаемого файла?

Строка в нижней части , httpd.confкоторый вызывает ошибку: IncludeOptional sites-enabled/*.conf. Единственный .confфайл в sites-enabledпапке mydomain.com.conf, который имеет следующее содержимое:

<VirtualHost *:80>
    ServerName www.mydomain.com
    ServerAlias mydomain.com
    DocumentRoot /var/www/mydomain.com/public_html
    ErrorLog /var/www/mydomain.com/error.log
    CustomLog /var/www/mydomain.com/requests.log combined
</VirtualHost>

Это httpd.confто же самое, что и предустановленное httpd, за исключением одной строки, включенной выше. Я знаю, потому что я сделал sudo yum remove httpd mod_sslи sudo yum install httpd mod_sslпрямо перед тем, как вызвать эту ошибку. Все httpd.confможно прочитать на сайте обмена файлами , нажав на эту ссылку .

Я столкнулся с этой проблемой, когда явно следовал инструкциям в этом руководстве .

Когда я закомментирую включаемый файл, он http/mydomain.comуспешно обрабатывает статический контент /var/www/html, который находится в , который DocumentRootопределен в httpd.conf. Кажется, проблема связана с VirtualHostдирективой во включаемом файле, показанной выше. Чтобы помочь в диагностике, я включил в РЕДАКТИРОВКУ № 3 ниже ссылки на все .confфайлы, которые содержатся в трех директивах include в httpd.conf.

РЕДАКТИРОВАТЬ # 1

Когда я попробую совет m32 изменить /etc/hostnameопределение mydomain.com, apacheвсе равно не будет перезапущен, и systemctl status httpd.serviceрезультаты следующие:

[sudo_user_account@server-ip-address ~]$ sudo systemctl status httpd.service -l
httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled)
   Active: failed (Result: exit-code) since Tue 2014-12-23 14:25:35 EST; 20s ago
  Process: 31993 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=0/SUCCESS)
  Process: 31991 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited, status=1/FAILURE)
 Main PID: 31991 (code=exited, status=1/FAILURE)
   Status: "Total requests: 1; Current requests/sec: 0; Current traffic:   0 B/sec"

Dec 23 14:25:35 hostname systemd[1]: httpd.service: main process exited, code=exited, status=1/FAILURE
Dec 23 14:25:35 hostname systemd[1]: Failed to start The Apache HTTP Server.
Dec 23 14:25:35 hostname systemd[1]: Unit httpd.service entered failed state.  

РЕДАКТИРОВАТЬ № 2

Я также попробовал совет eyoung100, чтобы изменить содержимое моего /etc/hostsфайла, как определено на следующем рисунке, но я все еще получаю ту же ошибку, определенную в EDIT # 1 выше.

EDIT # 3

По запросу Дерека, я побежал sudo apachectl configtestи получил:

AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::e23f:49ff:feb7:2a21. Set the 'ServerName' directive globally to suppress this message
Syntax OK

Кроме того, согласно предложению GarethTheRed, я изучил директивы include в httpd.conf . В httpd.conf есть три директивы include . Я перечислил три ниже, вместе со всеми файлами, расположенными в папке каждой директивы. Это все стандартные .confфайлы, установленные с httpd. Я еще не модифицировал ни одного из них. Вы можете просмотреть каждый из .confфайлов на сайте обмена файлами, нажав на ссылки ниже:

Include conf.modules.d/*.confссылается на следующие файлы в conf.modules.dкаталоге: 00-base.conf
00-dav.conf
00-lua.conf
00-mpm.conf
00-proxy.conf
00-ssl.conf
00-systemd.conf
01-cgi.conf

IncludeOptional conf.d/*.confссылки на следующие файлы в conf.dкаталоге: autoindex.conf
ssl.conf
userdir.conf
welcome.conf
Существует также README файл , который я опуская здесь.

Кроме того, IncludeOptional sites-enabled/*.confдиректива и ее содержание были подробно изложены в ОП выше.

Есть ли какие-либо из этих файлов, которые конфликтуют с VirtualHostнастройками в mydomain.com.conf?

EDIT # 4

По предложению garethTheRed я перешел mydomain.com.confв conf.dкаталог, а затем начал комментировать строки mydomain.com.confпо одной, пока httpdне смог перезапустить. Затем я начал не комментировать строки, чтобы увидеть, сколько строк может остаться и все httpdеще перезапускаться. Мне удалось httpdперезапустить, но systemctl status httpd.service -lпродолжает выдавать то же предупреждение:

AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::e23f:49ff:feb7:2a21. Set the 'ServerName' directive globally to suppress this message

VirtualHostСинтаксис , который позволяет httpdначать (хотя продолжает генерировать выше предупреждение) выглядит следующим образом :

<VirtualHost *:80>
    ServerName www.mydomain.com
    ServerAlias mydomain.com
    DocumentRoot /var/www/mydomain.com/public_html
</VirtualHost>  

Обратите внимание, что мне пришлось пропустить следующие строки, чье присутствие приводит к тому, что предупреждение полностью не может запустить http:

# ErrorLog /var/www/mydomain.com/error.log
# CustomLog /var/www/mydomain.com/requests.log combined

Кроме того, я побежал, sudo journalctl -xelu httpdи терминал ответил, повторяя много раз следующее:

-- 
-- Unit httpd.service has finished shutting down.
Dec 24 17:48:43 server-ip-address systemd[1]: Stopped The Apache HTTP Server.
-- Subject: Unit httpd.service has finished shutting down
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit httpd.service has finished shutting down.
Dec 24 17:48:48 server-ip-address systemd[1]: Starting The Apache HTTP Server...
-- Subject: Unit httpd.service has begun with start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit httpd.service has begun starting up.
Dec 24 17:48:48 server-ip-address httpd[10364]: AH00558: httpd: Could not reliably d
Dec 24 17:48:48 server-ip-address systemd[1]: Started The Apache HTTP Server.
-- Subject: Unit httpd.service has finished start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit httpd.service has finished starting up.
-- 
-- The start-up result is done.
lines 887-909/909 (END)

Примечание. Приведенные выше результаты остаются неизменными независимо от того, использую ли я файл хоста eyoung100 или файл хоста m32. Чтобы ответить на этот вопрос, я думаю, что я должен иметь возможность создавать файлы журналов, а также избегать предупреждения имени сервера. В противном случае я боюсь, что последующие шаги по настройке httpd будут подвержены длительным ошибкам.

CodeMed
источник
1
Какая именно «туманная» ошибка возникает при добавлении ServerNameдирективы? Добавьте это к своему вопросу.
Вюртель
1
Какой выход apachectl configtest?
ДерекК,
Есть ли IncludeOptionalв конце оригинального httpd.confфайла? Я полагаю, что при установке по умолчанию. Проблема может заключаться в том, что вы добавляете дополнительный файл IncludeOptionalв конце, который вынуждает apacheпрочитать включенный файл конфигурации дважды и, следовательно, приводит к сбою.
garethTheRed
Для начала, вам нужно , чтобы переместить mydomain.com.confк /etc/httpd/conf.d(где все остальные) и удалять /etc/httpd/sites-enabled(это Debian / Ubuntu вещь) и IncludeOptionalвы добавили httpd.conf. Вы можете игнорировать AH00558сообщение на данный момент, поскольку оно не останавливается apache. Затем удалите строку из confфайла, пока не найдете виновного (или, альтернативно, начните с пустой строки и восстанавливайте по одной строке за раз).
garethTheRed
1
@garethTheRed и кому-либо из Google вам не нужно удалять IncludeOptional sites-enabled / *. conf. Это была красная сельдь. Реальная проблема заключалась в файлах журналов, как указано ниже garethTheRed. Я следовал тому же учебнику, что и OP, и имел ту же проблему. Удаление строк файла журнала из файла конфигурации виртуального хоста исправило это.
Луиза Эгглтон

Ответы:

19

Журналы вызывают ошибки, потому что apacheне могут записать в корень вашего сайта. Даже если вы исправите права доступа к файлу, вы все равно будете заблокированы SELinux; который позволяет только apacheписать логи в /var/log/httpd. Самым простым решением было бы изменить свой веб-сайт для входа в этот каталог - возможно, с именем файла, содержащим имя веб-сайта, чтобы отличить его от других журналов.

ErrorLog /var/log/httpd/mydomain_com_error.log
CustomLog /var/log/httpd/mydomain_com_requests.log combined

Чтобы установить имя хоста сервера и избавиться от предупреждения AH00558, просто используйте:

hostnamectl set-hostname --static <FQDN of your machine>

например

hostnamectl set-hostname --static mydomain.com
garethTheRed
источник
Я столкнулся с другой ошибкой, так как продолжаю работать над этим. Вы тоже хотите мне помочь? Вот ссылка: unix.stackexchange.com/questions/176052/…
CodeMed
2

Я получил эту ошибку, когда я забыл установить имя хоста для машины. Вы сделали это?
Запустите эту команду:

echo 'example.com' >> /etc/hostname  

Проверить с помощью hostname

Изменить:
с обновленным OP, похоже, ваш файл хостов не настроен правильно. Вот как выглядит моя;

127.0.0.1 localhost.localdomain localhost
# Auto-generated hostname. Please do not remove this comment.
166.66.666.66 m32.me m32
::1     ip6-localhost ip6-loopback

Попробуйте установить что-то простое, как это. Конечно, замените всю информацию своей.
166.66.666.66с вашим собственным IP
m32.me and m32с вашим доменом и доменом без TLD

m32
источник
Это не решило проблему, я все еще получаю сообщение об AH00558ошибке, когда я использую ваш пример файла hosts, с моим ipи mydomain.com mydomain.
CodeMed