Kma*_*hta 15 nginx amazon-ec2 amazon-web-services docker amazon-elastic-beanstalk
我希望在AWS API的EC2实例中运行一个docker,我有一个像这样的Dockerrun.aws.json:
{
"AWSEBDockerrunVersion": "1",
"Authentication": {
"Bucket": "<BUCKET>",
"Key": ".dockercfg"
},
"Image": {
"Name": "<NAME>:<TAG>",
"Update": "true"
},
"Ports": [
{
"ContainerPort": "80"
},
{
"ContainerPort": "443"
}
]
}
Run Code Online (Sandbox Code Playgroud)
就像你看到的那样,我有多个端口可以暴露,但弹性beanstalk只暴露它们中的第一个.
我在文档中找到了这句话:您可以指定多个容器端口,但AWS Elastic Beanstalk仅使用第一个容器将容器连接到主机的反向代理并从公共Internet路由请求.
我的问题是为什么?
我有一个使用Oauth2协议的身份验证,出于明显的安全原因,我必须使用HTTPS协议.有了这个限制,我只能选择HTTP或HTTPS,因为我只能暴露端口80或443.
我尝试修改ebextensions以使用EC2实例级别的端口进行nginx重定向,但我失败了.我能怎么做 ?
此stackoverflow用户具有相同的问题. 在Elastic Beanstalk中公开Docker的多个端口
提前感谢你
Kma*_*hta 11
我联系了亚马逊支持中心,我选择向您展示答案.
你好K ...,
使用Dockerrun.aws.json,Elastic Beanstalk挂钩脚本将只读取JSON文件中的第一个端口.
这是因为在/opt/elasticbeanstalk/hooks/appdeploy/pre/04run.sh中:
如果[
echo $EB_CONFIG_DOCKER_PORT | wc -w-gt 1]; 那么EB_CONFIG_DOCKER_PORT =echo $EB_CONFIG_DOCKER_PORT | awk '{print $1}'警告"只允许一个EXPOSE指令,使用第一个:$ EB_CONFIG_DOCKER_PORT"fi钩子脚本必须指定反向代理转发到的随机端口,然后转发到Docker容器的端口.目前只能设置一个端口映射.
关于nginx配置,实现端口443监听环境的最快方法是在/etc/nginx/conf.d/中创建一个单独的服务器部分,例如custom-ssl.conf,它处理与之握手的HTTPS握手.客户.这意味着您必须将SSL证书放在实例上,以便nginx可以执行SSL握手.稍后我会在nginx中使用示例HTTPS配置回复您.
否则,如果您的环境是负载平衡的,您可以在ELB上简单地设置HTTPS侦听器,并让ELB处理SSL终止.
同时,如果您有其他问题,请不要犹豫!
最好的祝福,
悉尼支持中心
*
你好再次K ...,
正如我在之前的通信中所提到的,请查找附带的示例.ebextensions配置文件,该文件将在单个实例Docker环境中在nginx上设置https服务器.您没有让我知道您询问的环境,因此附加的.ebextensions仅适用于单实例环境.
此.ebextensions配置文件执行以下操作:
将nginx的https服务器配置文件添加为/etc/nginx/sites-enabled/https.conf,它将传入的https会话反向代理到Docker容器中作为http.
将SSL密钥/证书组合文件添加到上面的HTTPS服务器所需的/etc/pki/tls/certs/my_ssl.crt中.
向Beanstalk环境的EC2安全组添加额外的入口规则,以允许传入TCP:443连接到实例
请随意修改.ebextensions配置文件以适合您的用例,并将其放在应用程序根级别的.ebextensions /目录中,以便部署在Elastic Beanstalk中.如果目录不存在,那么请创建它.
有关.ebextensions配置文件的更多信息,请参阅:
如果您处于负载平衡环境中,则需要通过AWS CLI将SSL证书上载到IAM,并配置Beanstalk环境的ELB以启用其HTTPS侦听器.说明将与上述说明不同:
请告诉我您如何使用.ebextensions配置文件,如果您需要进一步的帮助,请告诉我们!
最好的祝福,
悉尼支持中心
他给了我一个附件的例子.01-nginx的,ssl.config
files:
"/etc/nginx/sites-enabled/https.conf":
mode: "000644"
owner: root
group: root
content: |
server {
listen 443 ssl;
ssl_certificate_key /etc/pki/tls/certs/my_ssl.crt;
ssl_certificate /etc/pki/tls/certs/my_ssl.crt;
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
proxy_pass http://docker;
proxy_http_version 1.1;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
"/etc/pki/tls/certs/my_ssl.crt":
mode: "000400"
owner: root
group: root
content: |
<Your key/cert pair goes here>
Resources:
AllowSSL:
Type: AWS::EC2::SecurityGroupIngress
Properties:
GroupId: {Ref : AWSEBSecurityGroup}
IpProtocol: tcp
ToPort: 443
FromPort: 443
CidrIp: 0.0.0.0/0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7116 次 |
| 最近记录: |