AWS Elastic Beanstalk中Spring MVC应用HTTP转HTTPS重定向失效求助
看起来你遇到的问题是重定向规则生效了,但因为缺少关键的代理配置,导致Apache没法把请求转发给后端的Spring MVC应用,所以页面才会显示无法访问。我之前在Elastic Beanstalk上部署Spring应用时也踩过类似的坑,给你整理一套完整的解决方案:
第一步:先确认Elastic Beanstalk的SSL基础配置
首先得确保你已经在Elastic Beanstalk控制台完成了SSL证书的配置:
- 进入你的环境配置,找到「负载均衡器」部分(如果是使用负载均衡器的环境)
- 添加443端口的HTTPS监听器,关联你在AWS Certificate Manager申请的证书,目标端口设置为实例的80端口(因为Apache默认在实例的80端口监听)
第二步:添加HTTPS重定向的配置文件
在你的Spring MVC项目根目录下创建.ebextensions文件夹,然后新建一个01_https_redirect.config文件,内容如下:
files: "/etc/httpd/conf.d/ssl_redirect.conf": mode: "000644" owner: root group: root content: | <VirtualHost *:80> RewriteEngine On # 检查负载均衡器转发的协议头,若为HTTP则重定向到HTTPS RewriteCond %{HTTP:X-Forwarded-Proto} =http RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] # 关键!把请求转发到后端Tomcat(Spring MVC默认跑在8080端口) ProxyPass / http://localhost:8080/ retry=0 ProxyPassReverse / http://localhost:8080/ ProxyPreserveHost On ErrorLog /var/log/httpd/elasticbeanstalk-error_log </VirtualHost>
第三步:让Spring MVC正确识别转发头
因为Elastic Beanstalk的负载均衡器会给请求加上X-Forwarded-Proto等头,Spring需要识别这些头才能正确判断当前请求的协议,避免出现重定向循环。在你的application.properties里添加:
server.use-forward-headers=true server.tomcat.remote-ip-header=x-forwarded-for server.tomcat.protocol-header=x-forwarded-proto
如果用的是YAML配置(application.yml),则改为:
server: use-forward-headers: true tomcat: remote-ip-header: x-forwarded-for protocol-header: x-forwarded-proto
排查小技巧
如果部署后还是有问题,可以通过Elastic Beanstalk的日志功能查看Apache的错误日志(路径是/var/log/httpd/elasticbeanstalk-error_log),看看有没有代理连接失败或者重定向循环的报错信息。
你之前的配置只加了重定向规则,但漏掉了ProxyPass相关的配置——Apache收到请求后,没法把请求传给后端的Tomcat,所以就算重定向到了HTTPS,最终还是没法访问到你的Spring应用。补上这些配置后应该就能正常运行了。
内容的提问来源于stack exchange,提问作者ponraj
相关产品推荐
相关产品推荐

