Site icon 8HOST.COM

AH00526: синтаксическая ошибка конфигурации Apache

Эта серия мануалов поможет вам предотвратить или устранить самые распространенные ошибки, которые возникают при работе с веб-сервером Apache.

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

Сообщение об ошибке «AH00526: Syntax error» возникает, когда в конфигурационных файлах Apache есть опечатки или неверно настроенные параметры. Это общая ошибка, которая может указывать на ряд базовых проблем.

Ошибку можно обнаружить с помощью команды apachectl configtest еще перед загрузкой нерабочей конфигурации. Ее также можно найти с помощью команд systemctl и journalctl. В последних двух случаях Apache не сможет работать из-за ошибки.

Если вы обнаружили ошибку с помощью apachectl, перейдите к разделу, посвященному apachectl, в мануале Устранение общих ошибок Apache. Далее мы расскажем, как использовать systemctl для устранения этой ошибки.

Устранение ошибки с помощью systemctl

Согласно инструкциям по устранению неполадок из мануала Устранение общих ошибок Apache, первым шагом при устранении ошибки AH00526 будет проверка состояния Apache с помощью systemctl. Сейчас нам важно понять, влияет ли ошибка на запущенный процесс и препятствует ли она запуску Apache.

В дистрибутивах Ubuntu и Debian выполните следующую команду, чтобы проверить статус Apache:

sudo systemctl status apache2.service -l --no-pager

В системах CentOS и Fedora для проверки статуса Apache используйте эту команду:

sudo systemctl status httpd.service -l --no-pager

Флаг -l выводит все содержимое строки (то есть содержимое длинных строк не будет заменено многоточием (…)). Флаг –no-pager выводит весь на экран весь лог, не вызывая при этом инструмент less, который показывает только фрагмент содержимого.

Если в файлах действительно обнаружена ошибка AH00526, вы должны получить примерно такой вывод:

apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Drop-In: /lib/systemd/system/apache2.service.d
└─apache2-systemd.conf
Active: failed (Result: exit-code) since Wed 2020-07-15 13:45:49 UTC; 1min 37s ago
. . .
Jul 15 13:45:49 f17f01056c5b systemd[1]: Starting The Apache HTTP Server...

Jul 15 13:45:49 f17f01056c5b apachectl[15860]: AH00526: Syntax error on line 2 of /etc/apache2/sites-enabled/000-default.conf:


Jul 15 13:45:49 f17f01056c5b apachectl[15860]: Invalid command 'SSSLCertificateFile', perhaps misspelled or defined by a module not included in the server configuration


Jul 15 13:45:49 f17f01056c5b apachectl[15860]: Action 'start' failed.


Jul 15 13:45:49 f17f01056c5b apachectl[15860]: The Apache error log may have more information.


Jul 15 13:45:49 f17f01056c5b systemd[1]: apache2.service: Control process exited, code=exited status=1


Jul 15 13:45:49 f17f01056c5b systemd[1]: apache2.service: Failed with result 'exit-code'.


Jul 15 13:45:49 f17f01056c5b systemd[1]: Failed to start The Apache HTTP Server.

Такой вывод подтвердит, что Apache не работает из-за синтаксической ошибки. В нашем случае ошибка вызвана лишним символом S в начале строки SSSLCertificateFile в файле /etc/apache2/sites-enabled/000-default.conf. Правильная директива – SSLCertificateFile. Чтобы устранить ошибку, вам нужно отредактировать файл и исправить имя директивы, после чего вы сможете запустить Apache.

Вывод systemctl в этом примере также содержит некоторые строки из лога systemd. Если в ваших выходных данных указывается, что определенная строка в вашем конфигурационном файле генерирует синтаксическую ошибку, вы можете пропустить команды journalctl и apachectl configtest. Вы можете перейти непосредственно к указанному файлу, проверить его и исправить ошибку, чтобы устранить AH00526.

Если ваш вывод не содержит информации о конкретном конфигурационном файле Apache, в котором есть ошибка, вам нужно будет изучить выходные данные journalctl из логов systemd. В следующем разделе мы покажем, как использовать journalctl для устранения ошибки AH00526.

Устранение ошибки с помощью journalctl 

Если в выводе systemctl нет сведений о синтаксической ошибке AH00526, вы можете продолжить ее поиски с помощью команды journalctl, которая проверит записи логов systemd на наличие упоминаний Apache.

В системах на основе Ubuntu и Debian выполните следующую команду:

sudo journalctl -u apache2.service --since today --no-pager

В системах типа CentOS, Fedora и RedHat используйте эту команду:

sudo journalctl -u httpd.service --since today --no-pager

Флаг –since today ограничивает вывод записями, зарегистрированными с 00:00:00 текущего дня. Эта опция поможет ограничить объем записей, которые вам понадобится изучить при проверке ошибок.

Если в конфигурации Apache есть ошибка AH00526, в выводе команды journalctl вы найдете такие строки:

-- Logs begin at Tue 2019-11-05 21:26:44 UTC, end at Tue 2020-06-09 15:13:01 UTC. --
. . .
Jun 09 15:12:28 f17f01056c5b apachectl[3157]: AH00526: Syntax error on line 3 of /etc/apache2/sites-enabled/000-default.conf:
Jun 09 15:12:28 f17f01056c5b apachectl[3157]: Invalid command 'SSLCertificateFile', perhaps misspelled or defined by a module not included in the server configuration
. . .

Первая строка вывода – это и есть ошибка AH00526. Она является общей ошибкой, связанной с недопустимой директивой или опечаткой в ​​ конфигурации. В следующей строке вывода объясняется, что вызвало такую ошибку. В данном случае это директива SSLCertificateFile: она будет действительна только в том случае, если модуль ssl включен.

Если вы столкнулись с ошибкой AH00526, связанной с недопустимой директивой SSLCertificateFile, вы можете устранить ее, включив модуль ssl, а затем перезапустив Apache.

Для систем Ubuntu и Debian используйте такую команду, чтобы включить модуль:

sudo a2enmod ssl
sudo systemctl restart apache2.service

В системах CentOS и Fedora сначала установите пакет mod_ssl, а затем загрузите модуль, добавив его в каталог Apache /etc/httpd/conf.modules.d:

sudo yum install mod_ssl
echo "LoadModule ssl_module modules/mod_ssl.so" | sudo tee > /etc/httpd/conf.modules.d/00-ssl.conf
sudo systemctl restart httpd.service

После того как Apache обратится к модулю и вы перезапустите его с помощью соответствующей команды в зависимости от дистрибутива Linux, сервер запустится (если в конфигурации больше нет ошибок).

Если же это не единственная ошибка в конфигурации, Apache и systemctl status продолжат сообщать о них и пытаться объяснить, что препятствует запуску сервера.

В системах Ubuntu и Debian systemctl будет выводить такие сообщения об ошибках:

Job for apache2.service failed because the control process exited with error code.
See "systemctl status apache2.service" and "journalctl -xe" for details

В системах на основе CentOS, Fedora и RedHat вы получите такое сообщение:

Job for httpd.service failed because the control process exited with error code.
See "systemctl status httpd.service" and "journalctl -xe" for details.

Если же Apache по-прежнему не запускается из-за ошибок, команда apachectl configtest может быть наиболее эффективным и действенным способом диагностики в этом случае. В следующем разделе мы расскажем, как использовать эту утилиту для устранения ошибки AH00526.

Устранение ошибки с помощью apachectl

Чтобы устранить ошибку AH00526 с помощью утилиты apachectl, вы можете протестировать конфигурацию Apache с помощью подкоманды configtest. Этот инструмент проанализирует файлы Apache, чтобы определить, допустимо ли их содержимое, и, если нет, найдет неверные настройки в конфигурации.

Команда apachectl configtest полезна для выявления синтаксических ошибок в новой конфигурации веб-сервера перед перезагрузкой. Этот тест поможет вам избежать сбоев в обслуживании в случае неправильных настроек в ваших файлах Apache.

Следующий пример команды вернет сообщение об ошибке синтаксиса AH00526 и объяснит, что вероятная проблема заключается в том, что Apache ссылается на пустой файл SSLCertificateFile:

sudo apachectl configtest
AH00526: Syntax error on line 3 of /etc/apache2/sites-enabled/000-default.conf:
SSLCertificateFile: file '/etc/ssl/certs/example.com.pem' does not exist or is empty

В этом примере файл /etc/ssl/certs/example.com.pem не существует, что и указано в сообщении об ошибке. Чтобы решить проблему, вам нужно добавить сертификат SSL/TLS в файл или удалить эту директиву.

Если в конфигурации нет ошибок, команда apachectl должна показать следующее:

Syntax OK

Заключение

В этом мануале вы узнали, как устранить синтаксическую ошибку Apache AH00526. Первым шагом при исследовании любой ошибки Apache является проверка статуса сервера с помощью команды systemctl status apache2 или systemctl status httpd (в зависимости от вашего дистрибутива Linux). Так вы можете определить, правильно ли работает Apache или он не может запуститься из-за ошибки.

После того, как вы определили состояние Apache, вы можете дополнительно диагностировать его с помощью journalctl и изучить логи system для этого процесса. Затем вы можете использовать команду apachectl configtest, чтобы проверить файлы конфигурации на наличие ошибок.