Network Load Balancer后端EC2实现HTTP转HTTPS重定向问题
解决NLB后端EC2的.htaccess HTTP转HTTPS失效问题
你的问题根源很明确:AWS Network Load Balancer(NLB)默认采用TCP模式运行,这种模式下不会像Application Load Balancer(ALB)那样自动添加X-Forwarded-Proto这类HTTP请求头,所以你依赖这个头的Rewrite规则自然无法触发。
下面提供两种可行的解决方案:
方案一:通过后端端口判断(适用于TCP模式NLB)
如果你的NLB是TCP模式,通常会将客户端的HTTP请求(80端口)转发到后端EC2的80端口,HTTPS请求(443端口)转发到后端443端口。这种情况下直接通过请求端口判断即可,修改.htaccess规则如下:
# HTTP to HTTPS redirect for NLB TCP mode RewriteCond %{SERVER_PORT} ^80$ RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=permanent]
方案二:切换NLB为HTTP/HTTPS监听模式
AWS NLB现在支持HTTP/HTTPS监听模式,这种模式下NLB会自动添加X-Forwarded-Proto请求头,和ALB的行为一致。切换后你原来的.htaccess规则就能直接生效:
# aws rule for http to https RewriteCond %{HTTP:X-Forwarded-Proto} =http RewriteRule .* https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]
切换步骤:在AWS控制台的NLB配置中,将原有的TCP监听替换为HTTP(80端口)和HTTPS(443端口)监听,并确保目标组的协议设置为HTTP/HTTPS。
内容的提问来源于stack exchange,提问作者user3206332
相关产品推荐
相关产品推荐

