将 Http Url 重定向到 Elastic beantalk 负载均衡器中的 Https

Redirect Http Url to Https in Elastic beanstalk loadbalancer

我的 spring 启动应用程序 运行 在负载均衡器后面的 tomcat EC2 实例上,它配置了 Https 并在内部使用 Http。

我想将 url 请求重定向到 HTTP 到 HTTPS。

我从 AWS Support

找到了这个 document

正如它所说,我需要使用以下配置配置 Apache 后端

RewriteEngine On

RewriteCond %{HTTP:X-Forwarded-Proto} =http

RewriteRule . https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]

我的问题是在哪里添加这些配置?

另一个文档说我需要将 .ebextensions 目录添加到 webapp 目录并在那里放置配置。如果是这样,那么目录结构和配置文件格式是什么?

在您的项目的根目录中创建一个文件夹 .ebextensions(并确保它位于您要上传到 Elastic Beanstalk 的包的根目录中。像这样:

~/workspace/my-app/
|-- .ebextensions
|   -- httpd
|      -- conf.d
|         -- myconf.conf
-- index.jsp

myconf.conf

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule . https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]

有一整篇关于在 Elastic Beanstalk Tomcat 中自定义 Java 应用程序 运行 的文章:http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/java-tomcat-platform.html 查看更多信息。

找到解决方案在以下位置创建配置文件

~/workspace/server/
|-- .ebextensions
|   -- httpd
|      -- conf.d
|         -- abc.conf

内容如下

<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 *>
     Require all granted
   </Proxy>

   ProxyPass / http://localhost:8080/ retry=0
   ProxyPassReverse / http://localhost:8080/
   ProxyPreserveHost on

   ErrorLog /var/log/httpd/elasticbeanstalk-error_log

</VirtualHost>

在较新的 Tomcat 安装中需要加载 mod_rewrite。

来源:https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/configuring-https-httpredirect.html