Elastic Beanstalk: создайте новую среду: .ebextensions с SSL-сертификатом не запускается (tomcat-single-instance)
Я пытаюсь создать новую среду с текущим производственным пакетом WAR.
Развертывание нового экземпляра завершилось неудачно и получило статус «Зеленый». Первоначально мы следовали этому образцу для создания расширений .ebextensions (https://s3.amazonaws.com/elasticbeanstalk-single-instance-ssl-demo/tomcat-single-instance.zip ) и расширили, как описано здесь https ://docs.aws.amazon.com/elasticbeanstalk/latest/dg/https-singleinstance-tomcat.html .
New Platform: Managed, Tomcat 8.5 with Java 8 on 64bit Amazon Linux
Platform version: 3.4.1(Recommended)
Ошибка:
httpd24-tools conflicts with httpd-tools-2.2.34-1.16.amzn1.x86_64
mod24_ssl conflicts with 1:mod_ssl-2.2.34-1.16.amzn1.x86_64
httpd24 conflicts with httpd-2.2.34-1.16.amzn1.x86_64
Чтобы устранить эту ошибку, я заменил
packages:
yum:
mod_ssl : []
с
packages:
yum:
mod24_ssl.x86_64 : []
Но это вызвало эту ошибку:
Httpd configuration detected in the '.ebextensions/httpd' directory. AWS Elastic Beanstalk will no longer manage the httpd configuration for this environment.
Executing: /usr/sbin/apachectl -t -f /var/elasticbeanstalk/staging/httpd/conf/httpd.conf
httpd: Syntax error on line 21 of /var/elasticbeanstalk/staging/httpd/conf/httpd.conf: Include/IncludeOptional: No matches for the wildcard '*.conf' in '/etc/httpd/conf.d/elasticbeanstalk', failing
Failed to execute '/usr/sbin/apachectl -t -f /var/elasticbeanstalk/staging/httpd/conf/httpd.conf'
Failed to execute '/usr/sbin/apachectl -t -f /var/elasticbeanstalk/staging/httpd/conf/httpd.conf' (Executor::NonZeroExitStatus)
AWS просит заменить текущий производственный сервер (Amazon Linux/2.3.1) без промедления, поскольку он «списан». Я также опубликовал этот вопрос на AWS Forum. Пожалуйста помоги.
@jccampanero Спасибо за ваш ответ. Разница только в том, что у меня нет «myconf.conf» в папке «conf.d». Я следовал примеру AWS (s3.amazonaws.com/elasticbeanstalk-single-instance-ssl-demo/…). Мой рабочий сервер отлично работает последние два года на Amazon Linux 2.3.1. Единственная проблема заключается в том, что я не могу перейти на рекомендованный AWS Amazon Linux 3.4.1.
Я включил ответ @Roy, надеюсь, это поможет.
Спаси себя от боли. Не настраивайте SSL на своем сервере Tomcat, сделайте это на ELB AWS Elastic Load Balancer.
Благодарим за ваше предложение. Я использую ebextensions с SSL в производстве (Amazon Linux 2.3.1). После настройки скрипт работает отлично. Стоимость конфигурации SSL с одним экземпляром составляет всего 30 % по сравнению с Elastic Load Balancer. Надеюсь, кто-нибудь сможет ответить на мой вопрос.
Вы также можете настроить SSL в Cloudfront. Честно говоря, Рой, мой старый друг, вы просто испытаете боль, ничего не получите, потеряете возможность автоматического обновления сертификатов, рискуете безопасностью при управлении частными сертификатами, это просто бесполезно. Не знаю, откуда вы берете эти расходы, но почти уверен, что после того, как вы потратите больше времени и проведете все расчеты, вы потеряете $$$$$.
Я не мог не согласиться с этим. Настройка SSL через ALB/ELB намного проще и безопаснее, чем ручная настройка.
Как указано в документации AWS:
Начиная с конфигураций платформы Tomcat версии 3.0.0, которые были выпущены с обновлением Java с платформой Tomcat 24 мая 2018 г., Apache 2.4 является прокси-сервером по умолчанию для платформы Tomcat.
После изучения проблемы, как видно из комментариев и сопутствующего чата, фактическим решением проблемы было либо создание, либо клонирование существующей среды с идеей возможности использовать свежую среду beanstalk для Amazon Linux 3.4. 2, без каких-либо настроек.
Затем, чтобы избежать упомянутой проблемы с SSL, каталог .ebextensions
должен включать только удобный ssl.conf
и скрипт environment.config
, представленный в образце zip-файла, указанного в вопросе, без раздела packages
, потому что mod_ssl
уже установлен в образе beanstalk.
В данном конкретном случае возникли дополнительные проблемы, связанные с созданием файлов, необходимых для логирования. После настройки пути на тот, в котором приложение имеет возможность записи, по умолчанию для Tomcat в Beanstalk, /var/logs/tomcat8
, все работает правильно.
Спасибо за ваш ответ. Я уже пробовал IncludeOptional в файле httpd.conf. Это обошло сопоставление с подстановочными знаками, но дало мне: AH00534: httpd: Ошибка конфигурации: MPM не загружен. После этого я не мог добиться никакого прогресса.
Спасибо. Я создал учетную запись, но там написано, что ответ "ЭКСКЛЮЗИВНОЕ СОДЕРЖИМОЕ ПОДПИСЧИКА". Если у вас есть доступ к ответу, пожалуйста, опубликуйте ответ здесь.
Привет @Рой. Во-первых, извините за быстрые ответы вчера, у меня не было времени, чтобы объяснить меня лучше. Как я уже говорил, я думаю, что проблема связана с конфигурацией модуля MPM, необходимого для Apache 2.4. Я обновил ответ информацией, ранее описанной в моих предыдущих комментариях. Я надеюсь, что это помогает.
Спасибо @jccampanero. Теперь я столкнулся с новой ошибкой. Я попробовал все три варианта mod_mpm один за другим. Но все это привело к одной и той же ошибке: Выполнение: /usr/sbin/apachectl -t -f /var/elasticbeanstalk/staging/httpd/conf/httpd.conf AH00526: синтаксическая ошибка в строке 16 файла /etc/httpd/conf.d/ autoindex.conf: недопустимая команда «IndexOptions», возможно, написана с ошибкой или определена модулем, не включенным в конфигурацию сервера. Не удалось выполнить «/usr/sbin/apachectl -t -f /var/elasticbeanstalk/staging/httpd/conf/httpd. conf 'Не удалось выполнить '/usr/sbin/apachectl -t -f /var/elasticbeanstalk/staging/httpd/conf/httpd.conf'
Привет, Рой. Сожалею, что у вас возникла новая ошибка. Я думаю, что это не связано с предыдущим. Проблема, по-видимому, связана с некоторой настройкой, необходимой для модуля автоиндексации. Вы можете попробовать загрузить модуль в свой httpd.conf
файл, LoadModule autoindex_module modules/mod_autoindex.so
- пожалуйста, проверьте наличие библиотеки - хотя я думаю, что стоит попытаться понять, где требуется этот функционал. Я предполагаю, что он загружается при включении другой конфигурации в каталог conf.d
, когда применяется IncludeOptional conf.d/*.conf
.
Если у вас есть возможность подключиться по ssh к виртуальной машине, которая поддерживает вашу установку, вы можете ввести apachectl configtest
, чтобы проверить правильность вашей конфигурации, прежде чем запускать Apache.
@Roy Если конфигурация Apache 2.4 вызывает проблемы, мой лучший совет: если у вас есть возможность, создайте новую среду beanstalk с нуля для Amazon Linux 3.4.1 без какой-либо настройки. Он предоставит вам свежую и рабочую конфигурацию tomcat и Apache. С этой рабочей конфигурацией попробуйте затем настроить поведение SSL, это должно быть просто, вместо того, чтобы использовать и пытаться адаптировать старую конфигурацию, описанную в предоставленном вами zip-файле.
Благодарим вас за помощь @jccampanero. Я могу запустить инстанс Amazon Linux 3.4.1 без расширения .ebextensions в своем WAR-пакете. Это прекрасно работает без SSL. Однако мне нужно избегать внесения каких-либо изменений через SSH в EC2. Следовал вашим предложениям, и в это время я добрался до файла ssl.conf. Новая ошибка: Выполнение: /usr/sbin/apachectl -t -f /var/elasticbeanstalk/staging/httpd/conf/httpd.conf AH00526: синтаксическая ошибка в строке 18 файла /etc/httpd/conf.d/ssl.conf : Недопустимая команда «SSLPassPhraseDialog».
Пожалуйста, @Roy;). Теперь проблема в SSL. Сначала проверьте, установлен ли модуль, заглянув в папку /etc/httpd/modules/
и попытавшись найти mod_ssl.so
. Если он не установлен, вам необходимо установить его с помощью пакета mod24_ssl.x86_64
, как вы указали в вопросе. В любом случае, после его установки или из-за того, что модуль уже был установлен, необходимо настроить ssl.conf
. Поместите только этот файл в папку .ebextensions/httpd/conf.d
. Пожалуйста, проверьте при развертывании, что там правильный файл. Смотрите следующий комментарий
Этот файл должен быть автономным. Как следствие, вам нужно включить в него директиву LoadModule ssl_module modules/mod_ssl.so
. См., например, этот блог. Конечно, предоставьте в своих расширениях необходимую конфигурацию для вашего сертификата и закрытого ключа. Нет необходимости переопределять https.conf
. Я надеюсь, что это помогает.
Привет @jccampanero: директива LoadModule ssl_module modules/mod_ssl.so уже есть в образце zip-файла AWS (упоминается в вопросе). Я только добавил свой SSL-сертификат в образец и развернул его в производственной системе, и он все еще работает нормально. Проблема связана с миграцией Amazon Linux 3.4.1. Как вы предложили, я только что попробовал mod24_ssl и mod24_ssl.x86_64 как в environment.config, так и в ssl.config. Иногда развертывание EC2 постоянно терпит неудачу, и мне приходится его прерывать.
Привет, @Roy, утро. Но нет необходимости загружать собственный файл httpd.conf
. Идея состоит только в том, чтобы предоставить необходимую конфигурацию SSL, то есть ваш криптографический материал и ssl.conf
. Когда вы создали новую среду с нуля, без SSL, вы изменить файл httpd.conf
? Почему изначально ОС жаловалась на SSL? Если вы создаете среду с нуля, без настройки SSL, она не должна выдавать никаких ошибок. Вы можете подключиться через ssh к машине ec2, только чтобы проверить, установлен ли уже mod_ssl, и чтобы просмотреть, как файл httpd.conf
, предоставленный AWS с нуля выглядит
@ Рой, сначала попробуй проверить, нужна ли установка mod_ssl. Как вы можете видеть в документации , которую вы указали , хотя я знаю, что они предоставляют другой файл конфигурации в zip, они не упоминают, что установка mod_ssl
необходима. Просто подключите environment.config без установки пакетов yum, только с вашей конфигурацией криптографического материала и файлом ssl.conf
. Я предлагаю вам включить директиву LoadModule в ssl.conf
. Смотрите следующий комментарий
но возможно, в зависимости от конфигурации Apache, это даже не нужно. Ваш каталог .ebextensions
будет содержать только два упомянутых файла без раздела пакета yum. Если сочтете нужным, можем пообщаться.
Давайте продолжим обсуждение в чате.
Извините за поздний ответ @Roy, я в чате, хотя мне нужно выйти сейчас. Я снова присоединюсь к чату через пару часов. Если хочешь, присоединяйся ко мне там
Я думаю, что вы на правильном пути при применении нового пакета модов ssl. @ Рой, не могли бы вы указать, как выглядит ваш файл
httpd.conf
? Я предполагаю, что вы включили некоторую конфигурацию, подобную примерам, приведенным в разделе «Расширение и переопределение конфигурации Apache по умолчанию» в документации AWS, это правильно?