如何使用AWS负载均衡器将所有请求重定向到单个域名
当然可以实现!
AWS负载均衡器(尤其是Application Load Balancer,简称ALB)完全能帮你搞定这个重定向需求,结合Elastic Beanstalk使用也很顺畅。下面分场景给你具体的实现步骤:
一、优先方案:用ALB的监听器规则实现(推荐)
如果你的Elastic Beanstalk环境使用的是ALB(现在大部分新环境默认都是ALB),这是最直接高效的方式——负载均衡器直接处理重定向,不用请求打到后端服务器。
操作步骤:
- 登录AWS EC2控制台,找到Elastic Beanstalk环境对应的ALB(可以通过Elastic Beanstalk控制台的「配置」>「负载均衡器」查看ALB名称)。
- 切换到监听器标签页,找到你要配置的端口(比如HTTP 80或HTTPS 443),点击「查看/编辑规则」。
- 添加一条新规则:
- 条件:选择「主机头」,匹配规则设为「不等于」,输入
domain.com;或者用「匹配所有值」然后排除domain.com(具体看控制台选项,不同区域可能略有差异)。 - 动作:选择「重定向」,然后配置:
- 协议:根据你的需求选HTTP或HTTPS(推荐强制HTTPS)
- 主机:固定为
domain.com - 路径:选择
$path(保留原请求路径) - 查询字符串:选择
$query(保留原请求参数) - 状态码:选301(永久重定向)(对SEO友好)或302(临时重定向)
- 条件:选择「主机头」,匹配规则设为「不等于」,输入
- 把这条重定向规则拖到所有规则的最顶部,确保非
domain.com的请求先被匹配并重定向,剩下的正常转发到Elastic Beanstalk的目标组。
二、如果用的是经典负载均衡器(CLB)
CLB本身不支持基于主机头的重定向规则,这时候可以在Elastic Beanstalk的后端Web服务器(比如Nginx或Apache)里配置:
以Nginx为例:
在你的Elastic Beanstalk项目的.ebextensions目录下创建一个配置文件(比如nginx-redirect.config),内容如下:
files: "/etc/nginx/conf.d/redirect.conf": mode: "000644" owner: root group: root content: | server { if ($host != 'domain.com') { return 301 https://domain.com$request_uri; } }
部署这个配置后,Nginx会在收到非domain.com的请求时直接重定向。
以Apache为例:
同样在.ebextensions下创建apache-redirect.config:
files: "/etc/httpd/conf.d/redirect.conf": mode: "000644" owner: root group: root content: | RewriteEngine On RewriteCond %{HTTP_HOST} !^domain\.com$ [NC] RewriteRule ^(.*)$ https://domain.com$1 [L,R=301]
注意事项
- 如果用HTTPS重定向,确保你的SSL证书覆盖了
domain.com(如果有子域名也要包含,或者重定向后目标域名的证书有效)。 - 配置完成后,一定要测试:用不同的主机头(比如
test.com、www.otherdomain.com)访问,确认是否正确跳转到domain.com。 - 如果你想让Elastic Beanstalk的配置持久化ALB规则,可以通过
.ebextensions的CloudFormation模板来定义,不过手动配置控制台规则更直观灵活。
内容的提问来源于stack exchange,提问作者Anatol Zakrividoroga
相关产品推荐
相关产品推荐

