Эта серия мануалов поможет вам предотвратить или устранить самые распространенные ошибки, которые возникают при работе с веб-сервером 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, чтобы проверить файлы конфигурации на наличие ошибок.