You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Elastic Beanstalk下mod_rewrite HTTP转HTTPS时80端口未切443如何解决?

解决Elastic Beanstalk中HTTP重定向HTTPS时端口错误的问题

我完全懂你遇到的麻烦——当用户直接访问http://example.com时,虽然能被重定向到HTTPS,但URL里还带着80端口,导致Google OAuth的授权重定向地址变成了https://example.com:80/j_security_check,和你在控制台配置的不带端口的地址不匹配,直接触发了redirect_uri_mismatch错误。

这个问题的核心原因是Elastic Beanstalk的负载均衡器会保留原请求的Host头信息,而你的原rewrite规则里没有处理端口,导致重定向时把80端口带了过去。下面给你两个可行的修复方案,都是通过.ebextensions配置实现的:

方案一:明确指定443端口(最简单直接)

把你现有的ssl_rewrite.conf替换成下面的内容:

files: "/etc/httpd/conf.d/ssl_rewrite.conf": 
  mode: "000644" 
  owner: root 
  group: root 
  content: | 
    LoadModule rewrite_module modules/mod_rewrite.so 
    RewriteEngine On 
    # 判断请求是否来自HTTP协议
    RewriteCond %{HTTP:X-Forwarded-Proto} =http 
    # 重定向时强制指定443端口,避免携带原80端口
    RewriteRule ^ https://%{HTTP_HOST}:443%{REQUEST_URI} [L,R=permanent]

方案二:通过环境变量动态指定端口(更灵活)

如果以后端口有调整需求,这个方案更易维护:

files: "/etc/httpd/conf.d/ssl_rewrite.conf": 
  mode: "000644" 
  owner: root 
  group: root 
  content: | 
    LoadModule rewrite_module modules/mod_rewrite.so 
    RewriteEngine On 
    RewriteCond %{HTTP:X-Forwarded-Proto} =http 
    # 使用预定义的环境变量指定HTTPS端口
    RewriteRule ^ https://%{HTTP_HOST}:%{ENV:REDIRECT_HTTPS_PORT}%{REQUEST_URI} [L,R=permanent]
    # 设置环境变量为443
    SetEnv REDIRECT_HTTPS_PORT 443

为什么原配置会失效?

原规则里的%{HTTP:Host}会完整保留用户请求时的Host头,包括端口号。当用户访问http://example.com时,Host头是example.com:80,所以重定向后的URL就变成了https://example.com:80/...,这自然和你在Google控制台配置的https://example.com/j_security_check不匹配了。

额外优化:让Tomcat识别HTTPS请求

为了避免应用内部生成错误的URL,你还可以给Tomcat添加配置,让它知道请求是通过负载均衡器的HTTPS转发过来的:

在.ebextensions里新增一个配置文件:

files: "/etc/tomcat9/conf/server.xml":
  mode: "000644"
  owner: tomcat
  group: tomcat
  content: |
    <!-- 这里保留你原server.xml的其他内容,只修改Connector节点 -->
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="443"
               proxyName="example.com"
               proxyPort="443"
               scheme="https"
               secure="true"/>

这样Tomcat会默认使用HTTPS协议和443端口生成URL,进一步避免端口错误。

验证步骤

  • 将修改后的配置文件放到应用的.ebextensions目录下
  • 重新部署你的Elastic Beanstalk应用
  • 访问http://example.com,检查重定向后的URL是否是https://example.com/...(不带80端口)
  • 测试Google OAuth登录流程,确认不再出现redirect_uri_mismatch错误

内容的提问来源于stack exchange,提问作者Anish Sana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:56:41