Вопрос или проблема
В настоящее время я сталкиваюсь с необычной проблемой с Apache 2.4; через некоторое время (примерно через день) моя Apache не обслуживает SSL-сертификат, установленный в виртуальном хосте. Мне нужно перезапустить Apache, чтобы он снова начал обслуживать SSL-сертификат.
Вот моя текущая конфигурация виртуального хоста (я должен скрыть доменное имя сервера):
<VirtualHost XXX:80>
ServerName XXX
Redirect permanent / https://XXX/
</VirtualHost>
<VirtualHost XXX:443>
DocumentRoot "/home/project/staging/dashboard/build"
ServerName XXX
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" vhost_combined
LogFormat "%v %h %l %u %t \"%r\" %>s %b" vhost_common
<Directory "/home/project/staging/dashboard/build">
Options -Indexes
Require all granted
RewriteEngine On
RewriteCond %{THE_REQUEST} \.\.\/
RewriteRule ^ - [F]
</Directory>
Include /etc/letsencrypt/options-ssl-apache.conf
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/XXX/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/XXX/privkey.pem
</VirtualHost>
При перезапуске Apache не возникает никаких ошибок. И никаких соответствующих ошибок в логах Apache тоже нет..
Я добавляю логи, которые записываются при перезапуске Apache:
[Sun Oct 06 09:35:04.051573 2024] [mpm_prefork:notice] [pid 650835:tid 650835] AH00163: Apache/2.4.62 (Debian) OpenSSL/1.1.1w настроен -- возобновление нормальной работы
[Sun Oct 06 09:35:04.051591 2024] [core:notice] [pid 650835:tid 650835] AH00094: Command line: '/usr/sbin/apache2'
[Sun Oct 06 09:35:18.304163 2024] [authz_core:error] [pid 682856:tid 682856] [client 139.59.132.8:43442] AH01630: клиенту отказано в доступе по конфигурации сервера: /home/project/staging/dashboard/build/server-status
[Sun Oct 06 09:35:32.594377 2024] [mpm_prefork:notice] [pid 650835:tid 650835] AH00171: Запрошен плавный перезапуск, выполняется перезапуск
PHP Warning: PHP Startup: Невозможно загрузить динамическую библиотеку 'openssl' (попытка: /usr/lib/php/20220829/openssl (/usr/lib/php/20220829/openssl: невозможно открыть файл общего элемента: Нет такого файла или каталога), /usr/lib/php/20220829/openssl.so (/usr/lib/php/20220829/openssl.so: невозможно открыть файл общего элемента: Нет такого файла или каталога)) в Unknown on line 0
PHP Warning: PHP Startup: Невозможно загрузить динамическую библиотеку 'xsl' (попытка: /usr/lib/php/20220829/xsl (/usr/lib/php/20220829/xsl: невозможно открыть файл общего элемента: Нет такого файла или каталога), /usr/lib/php/20220829/xsl.so (/usr/lib/php/20220829/xsl.so: неопределенный символ: dom_node_class_entry)) в Unknown on line 0
PHP Warning: Модуль "curl" уже загружен в Unknown on line 0
PHP Warning: Модуль "exif" уже загружен в Unknown on line 0
PHP Warning: Модуль "fileinfo" уже загружен в Unknown on line 0
PHP Warning: Модуль "ftp" уже загружен в Unknown on line 0
PHP Warning: Модуль "gd" уже загружен в Unknown on line 0
PHP Warning: Модуль "gettext" уже загружен в Unknown on line 0
PHP Warning: Модуль "intl" уже загружен в Unknown on line 0
PHP Warning: Модуль "mbstring" уже загружен в Unknown on line 0
PHP Warning: Модуль "mysqli" уже загружен в Unknown on line 0
PHP Warning: Модуль "pdo_mysql" уже загружен в Unknown on line 0
PHP Warning: Модуль "soap" уже загружен в Unknown on line 0
PHP Warning: Модуль "zip" уже загружен в Unknown on line 0
[Sun Oct 06 09:35:32.932134 2024] [mpm_prefork:notice] [pid 650835:tid 650835] AH00163: Apache/2.4.62 (Debian) OpenSSL/1.1.1w настроен -- возобновление нормальной работы
[Sun Oct 06 09:35:32.932155 2024] [core:notice] [pid 650835:tid 650835] AH00094: Command line: '/usr/sbin/apache2'
Ответ или решение
Проблема, с которой вы столкнулись, может быть вызвана несколькими факторами, включая конфигурацию Apache, неправильные настройки SSL, проблемы с памятью, исчерпание ресурсов или даже ошибки в самом программном обеспечении. Вот несколько шагов, которые можно предпринять для диагностики и решения данной проблемы:
1. Проверка логов
Сначала вам следует углубиться в логи Apache. Убедитесь, что уровень журналирования достаточен для выявления скрытых ошибок. Чтобы повысить уровень детальности логов, измените конфигурацию LogLevel
на debug
в вашем конфигурационном файле Apache:
LogLevel debug
После изменения уровня логирования перезапустите Apache и следите за логами /var/log/apache2/error.log
и другими соответствующими логами (например, /var/log/apache2/access.log
).
2. Проверка конфигурации SSL
Убедитесь, что файлы сертификата и закрытого ключа корректны и доступны для чтения процессу Apache. Вы можете использовать команду openssl
для проверки вашего сертификата:
openssl x509 -in /etc/letsencrypt/live/XXX/fullchain.pem -text -noout
Также проверьте, что вы используете корректную конфигурацию в файле /etc/letsencrypt/options-ssl-apache.conf
.
3. Максимальный размер соединений
Проверьте, что сервер не исчерпал лимиты на количество одновременно открытых соединений. Убедитесь, что значения в MaxRequestWorkers
(или MaxClients
) в секции <IfModule mpm_prefork>
оптимальны.
4. Наблюдение за ресурсами
Проверьте использование ресурсов сервера, таких как память и процессор, используя команды, такие как top
, htop
или vmstat
. Возможно, проблема заключается в том, что сервер исчерпывает ресурсы, что во время пиковых нагрузок может вызвать отсутствие ответов на SSL-запросы.
5. Обновление и устранение ошибок
Убедитесь, что у вас установлены последние патчи и обновления для Apache и OpenSSL. Иногда ошибки, вызывающие зависания, могут быть исправлены в новых версиях.
6. PHP-ошибки
Ваша конфигурация указывает на множественные ошибки загрузки расширений PHP. Хотя это может не быть основной причиной вашей проблемы с SSL, наличие ошибок можно исправить, настроив правильные конфигурации в файлах php.ini
. Убедитесь, что все необходимые модули установлены и не загружаются несколько раз.
7. Тестирование и проигрывание сценариев
Попробуйте создать нагрузочное тестирование на сервере, чтобы воспроизвести проблему. Это может помочь выявить, при каких условиях проблема возникает.
8. Альтернативные процедуры
Если ни один из вышеописанных шагов не решает проблему, рассмотрите возможность переключения на другой HTTP-сервер (например, Nginx) для тестирования на наличие той же проблемы или попробуйте изменить стратегию обработки соединений в Apache (например, переключитесь с mpm_prefork на mpm_event).
Вывод
Проблема с SSL на Apache может иметь различные корни, но с помощью вышеупомянутых шагов вы сможете более точно диагностировать и, в конечном итоге, решить проблему. Не забывайте регулярно проверять логи и отслеживать использование ресурсов на сервере.