При попытке установить новый сертификат SSL с корректным перезапуском apache возвращается [OK], но веб-сайт не работает - PullRequest
0 голосов
/ 02 июля 2019

У меня проблемы с изящным перезапуском службы Apache при установке нового сертификата SSL.

У меня есть приложение AWS Elastic Beanstalk, которое обслуживает веб-сайты для нескольких клиентов, у каждого из которых есть собственный домен. Чтобы включить SSL для каждого сайта, я загружаю файлы сертификатов в S3 Bucket. Я настроил все это так, что SSL завершается в каждом случае, а не в балансировщике нагрузки. Это все работает хорошо.

Теперь я хочу иметь возможность динамически добавлять новые сертификаты. Клиент может купить домен и автоматически указать его на свой сайт. Когда это происходит, новый сертификат генерируется (через Lets Encrypt API) и загружается на S3. Последним шагом является создание задания cron в экземпляре сервера, который синхронизирует новые файлы из S3 (через aws-cli), загружает новый vhost-файл apache и перезапускает apache. Синхронизация работает нормально, и изящная перезагрузка, кажется, работает нормально, но затем сайты не работают. Мой скрипт выглядит так:

#!/bin/bash
exec 3>&1 1>>/var/log/httpd/cert-sync.log 2>&1
# start
echo "[$(date)]: ----------- Start Sync-----------"
echo "[$(date)]: Syncing certs..."
aws s3 sync s3://bucket/certs /etc/pki/tls/

echo "[$(date)]: Syncing conf..."
aws s3 sync s3://bucket/conf/ /etc/httpd/conf.d/ssl-vhosts/

echo "[$(date)]: Attempting Apache graceful reload..."
sudo /etc/init.d/httpd graceful

exit 0

Вывод журнала такой:

[Mon Jul  1 20:09:01 UTC 2019]: ----------- Start Sync-----------
[Mon Jul  1 20:09:01 UTC 2019]: Syncing certs...
...

[Mon Jul  1 20:09:01 UTC 2019]: Syncing conf...
....

[Mon Jul  1 20:09:02 UTC 2019]: Attempting Apache graceful reload...
Equivalent Upstart operations: start httpd, stop httpd, restart httpd, status httpd
Gracefully restarting httpd
[OK]

Это заставляет меня верить, что все в порядке, но потом я просматриваю весь идентификатор приложения (я получаю 503). Когда задание cron запускается снова, это вывод:


[Mon Jul  1 22:57:01 UTC 2019]: ----------- Start Sync-----------
[Mon Jul  1 22:57:01 UTC 2019]: Syncing certs...
[Mon Jul  1 22:57:02 UTC 2019]: Syncing conf...
[Mon Jul  1 22:57:03 UTC 2019]: Attempting Apache graceful reload...
Equivalent Upstart operations: start httpd, stop httpd, restart httpd, status httpd
Gracefully restarting httpd
/etc/init.d/httpd: line 60: kill: (10478) - No such process
Stopping httpd
stop: Unknown instance: 
Starting httpd
httpd start/running, process 14139
[OK]

Так что теперь я знаю, что служба была отключена после изящного перезапуска, хотя в журнале говорилось, что все в порядке. Я ничего не могу найти в логах apache. Я могу исключить, что это проблема с сертификатом или файлом конфигурации, потому что, если я сделаю пустой коммит и развернусь, используя cli (eb deploy app-ssl), веб-сайты снова включатся, и новый сертификат SSL будет установлен правильно (я могу зайдите на домен с https без проблем). Также странно, что в нем говорится, что служба была остановлена ​​и запущена снова, но сайты все еще не работают. Перезапуск сервера из Консоли AWS также не исправляет это.

Что я пробовал:

  • несколько версий изящной команды, в том числе:
/etc/init.d/httpd graceful
/etc/init.d/apachectl -k graceful
/etc/init.d/httpd restart
service httpd graceful
  • работает с sudo и без sudo

Но, похоже, ничего не изменится. Это работает только при новом развертывании, которое, я думаю, вызывает создание нового экземпляра, и, возможно, Apache запускается только после синхронизации новых файлов (у меня есть файл ebextension, который обрабатывает синхронизацию при создании экземпляра). Мне нужно иметь возможность перезагрузить конфигурацию на существующем экземпляре, чтобы полностью автоматизировать процесс.

Я занимаюсь этим уже 3 дня. Есть идеи, что может происходить?

EDIT: Приложение AWS EBS работает под управлением Amazon Linux 2 и Apache 2.4. Также apachectl, apache2ctl и systemctl не найдены. Единственный способ, которым я могу даже попытаться перезапустить apache - это httpd.

...