Вопрос или проблема
Я только что установил новый сертификат на сервер RHEL 8. Я обновил файлы конфигурации и перезапустил Apache.
Apache не запускается, но я не могу понять почему. Как определить, что вызывает проблему?
Вот что возвращает Apache:
$ sudo journalctl -xe
Jul 25 07:39:54 ylntest.yln.info sudo[215986]: pam_unix(sudo:session): session opened for user root by administrator(uid=0)
Jul 25 07:39:54 ylntest.yln.info systemd[1]: Starting The Apache HTTP Server...
-- Subject: Unit httpd.service has begun start-up
-- Defined-By: systemd
-- Support: https://access.redhat.com/support
--
-- Unit httpd.service has begun starting up.
Jul 25 07:39:54 ylntest.yln.info httpd[215989]: [Tue Jul 25 07:39:54.455473 2023] [so:warn] [pid 215989] AH01574: module php_module is already loaded, skipping
Jul 25 07:39:54 ylntest.yln.info systemd[1]: httpd.service: Main process exited, code=exited, status=1/FAILURE
Jul 25 07:39:54 ylntest.yln.info systemd[1]: httpd.service: Failed with result 'exit-code'.
-- Subject: Unit failed
-- Defined-By: systemd
-- Support: https://access.redhat.com/support
--
-- The unit httpd.service has entered the 'failed' state with result 'exit-code'.
Jul 25 07:39:54 ylntest.yln.info systemd[1]: Failed to start The Apache HTTP Server.
-- Subject: Unit httpd.service has failed
-- Defined-By: systemd
-- Support: https://access.redhat.com/support
--
-- Unit httpd.service has failed.
--
-- The result is failed.
Jul 25 07:39:54 ylntest.yln.info sudo[215986]: pam_unix(sudo:session): session closed for user root
Jul 25 07:40:33 ylntest.yln.info sudo[216223]: administrator : TTY=pts/0 ; PWD=/etc/openldap ; USER=root ; COMMAND=/bin/journalctl -xe
Jul 25 07:40:33 ylntest.yln.info sudo[216223]: pam_unix(sudo:session): session opened for user root by administrator(uid=0)
Jul 25 07:41:07 ylntest.yln.info sudo[216223]: pam_unix(sudo:session): session closed for user root
Jul 25 07:41:20 ylntest.yln.info sudo[216509]: administrator : TTY=pts/0 ; PWD=/etc/httpd/conf.d ; USER=root ; COMMAND=/bin/mv php.conf.old php.conf
Jul 25 07:41:20 ylntest.yln.info sudo[216509]: pam_unix(sudo:session): session opened for user root by administrator(uid=0)
Jul 25 07:41:20 ylntest.yln.info sudo[216509]: pam_unix(sudo:session): session closed for user root
Jul 25 07:41:36 ylntest.yln.info sudo[216609]: administrator : TTY=pts/0 ; PWD=/etc/httpd/conf.d ; USER=root ; COMMAND=/bin/systemctl restart httpd
Jul 25 07:41:36 ylntest.yln.info sudo[216609]: pam_unix(sudo:session): session opened for user root by administrator(uid=0)
Jul 25 07:41:36 ylntest.yln.info systemd[1]: Starting The Apache HTTP Server...
-- Subject: Unit httpd.service has begun start-up
-- Defined-By: systemd
-- Support: https://access.redhat.com/support
--
-- Unit httpd.service has begun starting up.
Jul 25 07:41:36 ylntest.yln.info httpd[216612]: [Tue Jul 25 07:41:36.377257 2023] [so:warn] [pid 216612] AH01574: module php_module is already loaded, skipping
Jul 25 07:41:36 ylntest.yln.info systemd[1]: httpd.service: Main process exited, code=exited, status=1/FAILURE
Jul 25 07:41:36 ylntest.yln.info systemd[1]: httpd.service: Failed with result 'exit-code'.
-- Subject: Unit failed
-- Defined-By: systemd
-- Support: https://access.redhat.com/support
--
-- The unit httpd.service has entered the 'failed' state with result 'exit-code'.
Jul 25 07:41:36 ylntest.yln.info systemd[1]: Failed to start The Apache HTTP Server.
-- Subject: Unit httpd.service has failed
-- Defined-By: systemd
-- Support: https://access.redhat.com/support
--
-- Unit httpd.service has failed.
--
-- The result is failed.
Jul 25 07:41:36 ylntest.yln.info sudo[216609]: pam_unix(sudo:session): session closed for user root
Jul 25 07:41:45 ylntest.yln.info sudo[216670]: administrator : TTY=pts/0 ; PWD=/etc/httpd/conf.d ; USER=root ; COMMAND=/bin/journalctl -xe
Jul 25 07:41:45 ylntest.yln.info sudo[216670]: pam_unix(sudo:session): session opened for user root by administrator(uid=0)
У меня есть как php.conf
, так и php81-php.conf
, так что я переименовал php.conf
.
Это не дало эффекта (и они спокойно сосуществовали некоторое время).
Попробуйте использовать следующее, чтобы убедиться, что ваша конфигурация Apache корректна.
apachectl configtest
Также проверьте, включен ли у вас SELinux
sestatus
Ответ или решение
Определение причин, по которым Apache не перезапускается
Теория
Apache — это один из самых популярных веб-серверов, и его правильная настройка имеет ключевое значение для обеспечения непрерывной работы системы. Проблемы при перезапуске Apache могут возникнуть по многим причинам: изменения в конфигурационных файлах, несоответствия в SSL-сертификатах, конфликты модулей и пр. Чтобы выявить и устранить проблему, необходимо последовательно анализировать журналы ошибок, проверять конфигурацию сервера и следить за совместимостью всех компонентов.
Пример: Анализ проблемы
Ваша проблема описывается следующим образом: вы установили новый SSL сертификат на сервере под управлением RHEL 8 и внесли изменения в конфигурационные файлы Apache, после чего сервер перестал перезапускаться. Журнал systemd показывает, что основной процесс Apache завершился с кодом 1 (ошибка), и теперь служба не запускается. Также важное предупреждение: модуль PHP загружается дважды. Вы переименовали один из конфликтующих файлов, но это не решило проблему.
Применение: Шаги по диагностике и устранению проблемы
1. Проверка журналов ошибок
Ваш первый шаг — это тщательный анализ логов Apache. Вы можете найти этот журнал по адресу /var/log/httpd/error_log
или по пути, указанному в ваших конфигурационных файлах. Используйте следующую команду для просмотра последних записей журнала ошибок:
tail -fn 50 /var/log/httpd/error_log
Ошибки, связанные с SSL-сертификатами, обычно подчеркивают отсутствие доверенных цепочек или несоответствие ключей.
2. Проверка конфигурации Apache
Команда apachectl configtest
поможет обнаружить проблемы в файлах конфигурации Apache. Выполните эту команду, чтобы получить вывод об ошибках или предупреждениях:
apachectl configtest
Если вывод возвращает "Syntax OK", это означает, что конфигурационные файлы правильные с точки зрения синтаксиса, но не исключает логических ошибок.
3. Взаимодействие Apache и SELinux
SELinux может блокировать некоторые действия Apache, если конфигурации безопасности не настроены. Проверьте статус SELinux:
sestatus
Если SELinux включен, временно переведите его в разрешающий режим:
setenforce 0
Попробуйте снова перезапустить Apache, чтобы увидеть, устраняет ли это проблему. Не забудьте включить SELinux обратно:
setenforce 1
Хотя отключение SELinux для тестирования допустимо, не рекомендуется держать его в отключенном состоянии на постоянной основе.
4. Проверка SSL-сертификатов
Убедитесь, что все пути к SSL-сертификатам в конфигурационных файлах Apache корректны. Проверьте права доступа к файлам сертификатов и их пригодность:
openssl x509 -in /путь/к/сертификату.crt -noout -text
openssl rsa -in /путь/к/ключу.key -check
Обычно файлы сертификатов и ключи должны быть доступны только пользователю root и пользователю от Apache.
5. Работа с модулями
Если в логах предупреждение AH01574 о дублировании модуля PHP, это может означать, что конфигурация загружает один и тот же модуль несколько раз. Проверьте файлы конфигурации в каталогах /etc/httpd/conf.modules.d/
и /etc/httpd/conf.d/
на наличие избыточных строк LoadModule
.
При желании вы можете отключить один из модулей, добавив #
в начале строки или переместив файл конфигурации в другую директорию.
6. Перезагрузка и контрольный список
После выполнения всех диагностических шагов попробуйте перезапустить Apache и следите за выводом команд:
systemctl restart httpd
systemctl status httpd
Также можете использовать journalctl -xe
, чтобы получить более подробные сведения о том, почему служба, возможно, снова не запускается.
Заключение
В данном сценарии последовательная диагностика поможет выявить и устранить проблемы, препятствующие перезапуску Apache. Кроме того, рекомендуем внедрить автоматизированное решение для проверки конфигурации или тестирования применяемых изменений в безопасной среде, прежде чем развертывать их в продукции. Надеемся, эти шаги помогут в успешном решении вопросов с вашим веб-сервером.