如何在弹性 Beanstalk 上强制使用 HTTPS?

12 浏览
0 Comments

如何在弹性 Beanstalk 上强制使用 HTTPS?

我似乎无法在elastic beanstalk的免费使用层上强制使用https。

我尝试了如何在亚马逊弹性beanstalk上强制使用https而不导致健康检查失败中的建议。

使用以下Apache重写规则:

RewriteEngine On

RewriteCond %{HTTP:X-Forwarded-Proto} !https

RewriteCond %{REQUEST_URI} !^/status$

RewriteCond %{REQUEST_URI} !^/version$

RewriteCond %{REQUEST_URI} !^/_hostmanager/

RewriteRule . https://%{SERVER_NAME}%{REQUEST_URI} [L,R]

当我尝试这样做时,http请求不会像我希望的那样重定向到https。相反,http页面会正常加载。我还尝试使用X-Forwarded-Port头部,但结果相同。

我还尝试了以下重写规则:

RewriteCond %{SERVER_PORT} 80
RewriteRule . https://%{SERVER_NAME}%{REQUEST_URI} [L,R]

这条规则导致了重定向循环。所以看来Apache重写规则没有识别到Elastic Load Balancer的X-Forwarded-Port和X-Forwarded-Proto头部,但重定向循环也不是我想要的结果。

请帮忙。我是AWS和Elastic Beanstalk的新手,对Apache规则也不太熟悉。我不太确定接下来该怎么做。谢谢。

0
0 Comments

问题的出现原因:用户想在Elastic Beanstalk上强制使用HTTPS,但只成功设置了www域名的重定向,而未能成功设置裸域名的重定向。

解决方法:首先,确保在设置EB环境时使用了Application Load Balancer(默认情况下是经典负载均衡器)。如果未使用ALB,则需要重新创建环境。

然后,进入EC2设置的负载均衡器页面,点击为EB环境创建的负载均衡器。确保已经设置了HTTPS监听器,监听443端口,并使用SSL证书将流量转发到80端口的实例。

接下来,添加一个监听器,监听HTTP协议,并将默认操作设置为“Redirect to:”。确保将协议设置为HTTPS,端口设置为443,选项设置为“Original host, path, query”,最后将HTTP响应代码设置为301。

添加完监听器后,确保更新EC2负载均衡器安全组,以接受HTTPS和HTTP连接。监听器旁边会有一个小警告标志提醒用户。

对于无法成功重定向裸域名的问题,暂无具体解决方法。

0
0 Comments

如何在Elastic Beanstalk上强制使用HTTPS?

出现原因:

- AWS推出了新的服务,如证书管理器(Certificate Manager),使得部分答案中的内容过时。

- 使用.ebextensions文件夹与Apache一起处理重定向是一种更干净的方法。

解决方法:

1. 使用aws命令将证书上传到AWS。命令结构如下:

aws iam upload-server-certificate --server-certificate-name CERTIFICATE_NAME --certificate-body "file://PATH_TO_CERTIFICATE.crt" --private-key "file://YOUR_PRIVATE_KEY.pem" --certificate-chain "file://YOUR_CERTIFICATE_CHAIN.ca-bundle" --path /cloudfront/

2. 进入Elastic Beanstalk应用程序,转到“配置” -> “网络层” -> “负载均衡”,点击齿轮图标。

3. 将“安全监听端口”设置为443,选择“协议”为HTTPS。选择第2步中的“CERTIFICATE_NAME”作为“SSL证书ID”。保存配置。

4. 进入控制台,点击“EC2实例”,点击“负载均衡器”,点击负载均衡器,点击“实例”,向下滚动以查看分配给该负载均衡器的EC2实例。如果EC2实例的名称与应用程序URL相同(或相似),请记下负载均衡器的“DNS名称”。它应该是以“awseb-e-…”格式。

5. 返回控制台,点击“CloudFront”,点击“创建分发”。选择“Web”分发。

6. 设置分发。将“源域名”设置为在第5步中找到的负载均衡器DNS名称。将“查看器协议策略”设置为“重定向HTTP到HTTPS”。将“转发查询字符串”设置为“是”。将“备用域名(CNAME)”设置为要用于应用程序的URL。将“SSL证书”设置为在第2步中上传的“CERTIFICATE_NAME”。创建分发。

7. 在CloudFront中点击分发名称。点击“源”,选择源,点击“编辑”。确保“源协议策略”为“匹配查看器”。返回上级页面。点击“行为”,选择源,点击“编辑”。将“转发标头”更改为“白名单”,并添加“主机”。保存。

注意:还可以参考更详细的指南。

0
0 Comments

如何在弹性Beanstalk上强制使用https?

问题原因:

- 需要在负载均衡器安全组中启用https。

- 需要将SSL证书添加到负载均衡器。

- 需要通过负载均衡器转发80和443端口。

- 需要将域名指向弹性Beanstalk环境。

解决方法1:使用Apache进行重定向

- 对于使用Apache的弹性Beanstalk环境,可以在配置中选择Apache作为代理主机。

- 在代码库中添加名为`.platform/httpd/conf.d/ssl_rewrite.conf`的配置文件,内容为:

RewriteEngine On

RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

解决方法2:使用ALB进行重定向

- 只有在使用应用程序负载均衡器时才能使用该方法。

- 在代码库中的`.config`文件中添加以下内容,以用重定向替换http监听器:

Resources:

AWSEBV2LoadBalancerListener:

Type: AWS::ElasticLoadBalancingV2::Listener

Properties:

LoadBalancerArn:

Ref: AWSEBV2LoadBalancer

Port: 80

Protocol: HTTP

DefaultActions:

- Type: redirect

RedirectConfig:

Host: "#{host}"

Path: "/#{path}"

Port: "443"

Protocol: "HTTPS"

Query: "#{query}"

StatusCode: "HTTP_301"

其他不良解决方法:

- 使用Cloudfront:将Cloudfront用于强制重定向不适合动态内容,且会增加复杂性。

- SSH进入服务器并进行配置:违背了使用弹性Beanstalk的初衷,不可行。

- 覆盖Apache配置文件或动态编辑Apache配置文件:可能导致维护困难或配置丢失的问题。

注意:以上解决方法适用于不同版本的弹性Beanstalk环境,但具体配置可能有所不同。

0