aws 负载均衡器通过端口 80 将所有 https 请求转发到 ec2 实例。我需要以某种方式将所有 http 请求重定向到 https。
到目前为止,我收集到的是您需要以某种方式使用重定向规则修改 ec2 实例,然后将该实例保存为新的 AMI,并将 beanstalk 指向新的 AMI。
我找到了以下重写规则,但不幸的是我不知道如何处理它。
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !=https
RewriteRule ^/(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301]
我 ssh 进入我的 ec2 实例,然后去了/etc/httpd/
,这就是我所做的。我完全迷失了我应该从那里做的事情。
- 我是修改文件还是创建新文件?
- 如果我需要修改或创建一个新文件,它会在哪里,或者我会怎么称呼它,它会去哪里?
- 有人可以提供文件的确切内容吗
- 创建/修改此文件后,下一步该做什么?我是否只是转到 ec2 页面,单击我的实例旁边的复选框,单击操作,最后创建图像?
如果是这样,这一切意味着什么?我不知道我应该在这里有什么设置。
最后,我假设我只是在 beanstalk 仪表板中进行配置,只需将 beanstalk env 指向我的新 AMI 并重新启动服务器。这听起来正确吗?
如果有人知道如何执行此操作或详细描述该过程的网站,我会很高兴。
我想指出,我在 tomcat 上使用了一个 java 应用程序。我也不确定自定义 AMI 是否会影响服务器规模的扩大。
所以你需要做一些事情
/etc/httpd/conf.d/elasticbeanstalk.conf
- 将您的重写规则添加到虚拟主机部分虽然这不是您所要求的,但我们通过CloudFront执行此操作。它比您建议的要容易得多,并且您可以获得 CloudFront CDN 的所有额外好处,以帮助减轻 beanstalk ec2 实例的负载。
首先设置一个分布,其源指向您的 beanstalk 负载均衡器(您也可以创建一个自定义源指向您的弹性 beanstalk 域名)。 然后使用“查看器协议策略”创建一个行为以“将 HTTP 重定向到 HTTPS”。
唯一的问题是您可能需要重新上传您的 ssl 证书以添加“路径”,以便它可以在 CloudFront 中使用。
在项目目录的/src/main/webapp/.ebextensions/httpd/conf.d/文件夹中创建一个名为elasticbeanstalk.conf的文件。
将此代码复制并粘贴到 elasticbeanstalk.conf 文件。
删除以下行。
并把这条线改为。
换行
至
现在保存文件,打包您的项目并部署它。
对于那些挣扎了一段时间的人,我找到了一个包含所有 AWS 配置的 GitHub(来自 AWS 团队),这适用于 Apache 2.2 的重定向。(有关 Apache 2.4 和 Nginx 的配置,请参阅下面的链接)。
阿帕奇 2.2
在应用程序的根目录中创建一个文件: YOUR_PROJECT_ROOT/.ebextensions/httpd/conf.d/elasticbeanstalk.conf (如果使用 Java IntelliJ,请确保将其添加到最终的 .WAR 工件中)
添加以下行以在虚拟主机中启用重定向:
有关 Apache 2.4 和 Nginx 的更多示例,请访问此 GitHub 存储库:
https://github.com/awsdocs/elastic-beanstalk-samples/tree/master/configuration-files/aws-provided/security-configuration/https-redirect/java-tomcat
此外,还有更多有用的配置和示例可用。
问候