AWS Beanstalk 将整个应用程序从 http 重定向到 https

AWS Beanstalk 将整个应用程序从 http 重定向到 https

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/然后就到了这里。我完全不知道接下来该做什么。

  1. 我是否修改文件或创建新文件?
  2. 如果我需要修改或创建一个新文件,它会在哪里或我该如何称呼它以及它会存入哪里?
  3. 有人可以提供该文件的确切内容吗
  4. 一旦我创建/修改了这个文件,我下一步该做什么?我是否只需转到 ec2 页面,单击我的实例旁边的复选框,单击操作,最后创建图像?

如果是的话,这一切意味着什么?我不知道我应该在这里进行什么设置。在此处输入图片描述

最后,我假设我只需进入 beanstalk 仪表板中的配置并将 beanstalk 环境指向我的新 AMI 并重新启动服务器即可。这听起来正确吗?

如果有人知道如何做到这一点,或者有一个网站详细描述了这个过程,我会很感激。

我想指出的是,我在 tomcat 上使用 java 应用程序。我不确定自定义 AMI 是否会影响服务器大小的扩展。

答案1

所以你需要做几件事

  1. 在您的负载均衡器中,定义两个侦听器,即端口 80 和端口 443
  2. 在 ec2 实例中,将/etc/httpd/conf.d/elasticbeanstalk.conf重写规则添加到虚拟主机部分
  3. 完成后,如果一切正常,您可能需要创建一个 ami 映像,以便这些设置保留在 ami 映像中,您稍后可以使用该映像创建其他实例

答案2

虽然这不是您所要求的,但我们通过CloudFront。它比您提议的要容易得多,并且您可以获得 CloudFront CDN 的所有额外好处,以帮助减轻您的 beanstalk ec2 实例的负载。

首先设置一个分配起源指向您的 beanstalk 负载均衡器(您还可以创建指向您的 elastic beanstalk 域名的自定义原点)。 然后创建一个行为将“查看器协议策略”设置为“将 HTTP 重定向到 HTTPS”。

唯一的问题是你可能需要重新上传您的 SSL 证书中添加“路径”,以便可以在 CloudFront 中使用。

aws iam upload-server-certificate --server-certificate-name certificate_object_name --certificate-body file://public_key_certificate_file --private-key file://privatekey.pem --certificate-chain file://certificate_chain_file  --path cloudfront_path

答案3

创建名为elasticbeanstalk.conf文件夹内/src/main/webapp/.ebextensions/httpd/conf.d/在您的项目目录中。

复制和粘贴此代码到 elasticbeanstalk.conf 文件。

删除以下行。

     Order deny,allow
     Allow from all

并将此行改为。

     Require all granted

改变线路

   RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

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

现在保存文件,打包您的项目并部署它。

答案4

对于那些挣扎了一段时间的人,我找到了一个 GitHub(来自 AWS 团队),其中包含所有 AWS 配置,这适用于 Apache 2.2 的重定向。(有关 Apache 2.4 和 Nginx 的配置,请参阅下面的链接)。

Apache 2.2

  1. 在应用程序的根目录中创建一个文件: 您的项目根目录/.ebextensions/httpd/conf.d/elasticbeanstalk.conf (如果使用 Java IntelliJ,请确保将其添加到最终的 .WAR 工件中)

  2. 添加以下行以启用虚拟主机中的重定向:

    <VirtualHost *:80>
        LoadModule rewrite_module modules/mod_rewrite.so
        RewriteEngine On
        RewriteCond %{HTTP:X-Forwarded-Proto} !https
        RewriteCond %{HTTP_USER_AGENT} !ELB-HealthChecker
        RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
    
        <Proxy *>
            Order deny,allow
            Allow from all
        </Proxy>
    
        ProxyPass / http://localhost:8080/ retry=0
        ProxyPassReverse / http://localhost:8080/
        ProxyPreserveHost on
    
        ErrorLog /var/log/httpd/elasticbeanstalk-error_log
    </VirtualHost>
    

有关 Apache 2.4 和 Nginx 的更多示例,请访问此 GitHub 存储库:

https://github.com/awsdocs/elastic-beanstalk-samples/tree/master/configuration-files/aws-provided/security-configuration/https-redirect/java-tomcat

此外,还有更多有用的配置和示例可用。

问候

相关内容