Я в процессе миграции веб-сайта для клиента на AWS. У меня все настроено и работает, за исключением того, что клиент хотел бы иметь возможность принимать платежи на своем веб-сайте. Я следовал нескольким руководствам о том, как заставить SSL работать, используя эластичный бобовый стебель. В настоящее время он настроен на использование исходного пакета, и я создал файл конфигурации в файле .ebextensions, который выглядит следующим образом:
Resources:
sslSecurityGroupIngress:
Type: AWS::EC2::SecurityGroupIngress
Properties:
GroupName: {Ref : AWSEBSecurityGroup}
IpProtocol: tcp
ToPort: 443
FromPort: 443
CidrIp: 0.0.0.0/0
packages:
yum:
mod24_ssl : []
files:
/etc/httpd/conf.d/ssl.conf:
mode: "000755"owner: root
group: root
content: |
LoadModule ssl_module modules/mod_ssl.so
Listen 443
<VirtualHost *:443>
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
SSLEngine on
SSLProtocol All -SSLv2 -SSLv3
SSLCertificateFile "/etc/pki/tls/certs/server.crt"SSLCertificateKeyFile "/etc/pki/tls/certs/server.key"
ProxyPass / http://localhost:80/ retry=0
ProxyPassReverse / http://localhost:80/
ProxyPreserveHost on
LogFormat "%h (%{X-Forwarded-For}i) %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""ErrorLog /var/log/httpd/elasticbeanstalk-error_log
TransferLog /var/log/httpd/elasticbeanstalk-access_log
</VirtualHost>
/etc/pki/tls/certs/server.crt:
mode: "000400"owner: root
group: root
source: sourceHere
/etc/pki/tls/certs/server.key:
mode: "000400"owner: root
group: root
source: sourceHere
где sourceHere — ссылка на файл в S3, я также пытался использовать контент непосредственно вместо источника, но результат тот же, приложение запускается без каких-либо ошибок, но любые попытки подключиться к IP-адресу или указанному URL-адресу просто говорят, что страница недоступна. Если я создаю тот же zip-файл, но оставляю конфигурационные файлы, которые он создает правильно. Это именно то, что есть на странице поддержки AWS и в документации по Elastic Beanstalk, поэтому я не уверен, что происходит.
В вашем конфигурационном файле есть проблема с отступом: /etc/pki/tls/certs/server.crt
а также /etc/pki/tls/certs/server.key
должен быть на том же уровне, что и /etc/httpd/conf.d/ssl.conf
,
Вы должны исправить отступ, чтобы получить:
files:
/etc/httpd/conf.d/ssl.conf:
mode: "000755"owner: root
group: root
content: |
LoadModule ssl_module modules/mod_ssl.so
Listen 443
<VirtualHost *:443>
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
SSLEngine on
SSLProtocol All -SSLv2 -SSLv3
SSLCertificateFile "/etc/pki/tls/certs/server.crt"SSLCertificateKeyFile "/etc/pki/tls/certs/server.key"
ProxyPass / http://localhost:80/ retry=0
ProxyPassReverse / http://localhost:80/
ProxyPreserveHost on
LogFormat "%h (%{X-Forwarded-For}i) %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""ErrorLog /var/log/httpd/elasticbeanstalk-error_log
TransferLog /var/log/httpd/elasticbeanstalk-access_log
</VirtualHost>
/etc/pki/tls/certs/server.crt:
mode: "000400"owner: root
group: root
source: sourceHere
/etc/pki/tls/certs/server.key:
mode: "000400"owner: root
group: root
source: sourceHere
Вместо того, чтобы предоставлять SSL через .ebextensions, вы должны посмотреть, как добавить его через балансировщик нагрузки в разделе Конфигурация среды Elastic Beanstalk >> Уровень сети >> Балансировка нагрузки.
Самый простой способ, кроме использования инструментов CLI, — создать балансировщик нагрузки EC2 и добавить ключи. После того, как вы пройдете этап 2 (Выбрать сертификат), вы можете прервать его, и сертификат будет сохранен для использования Elastic Beanstalk.
Если вы хотите использовать letsencrypt, вы можете попробовать это: Вот способ установить сертификаты на серверы узлов с одним экземпляром beanstalk: http://bluefletch.com/blog/domain-agnostic-letsencrypt-ssl-config-for-elastic-beanstalk-single-instances/
В основном это автоматический .ebextension для установки certbot, получения сертификата и привязки к нему nginx.