Google Load Balancer出现502/302重定向错误 重写规则是否有误
你的问题确实和重写规则配置错误,加之后端转发逻辑与负载均衡配置不匹配有直接关系,核心问题如下:
- 80端口虚拟主机未启用
RewriteEngine,你写的www跳转规则根本不会执行 - 所有HTTPS请求经过Google Load Balancer后,是通过HTTP协议转发到你后端Apache的80端口,你写的443端口虚拟主机完全没有接收任何请求,对应的www跳转规则自然不生效
- 没有配置HTTP到HTTPS的跳转逻辑,现有的80端口跳转目标还是HTTP协议,完全不符合你的需求
- 你配置的
SetEnvIf X-Forwarded-Proto https HTTPS=on没有用到,Apache无法识别用户侧实际的请求协议,容易出现跳转死循环
修正方案
直接替换你现有的配置即可,原443端口虚拟主机可以直接删除,因为当前负载均衡和后端走HTTP协议,不会有请求打到443端口:
SetEnvIf X-Forwarded-Proto https HTTPS=on <VirtualHost _default_:80> DocumentRoot "/opt/bitnami/apache/htdocs" Include "/opt/bitnami/apps/letsencrypt/conf/httpd-prefix.conf" <IfModule mod_proxy.c> ProxyPass /.well-known ! </IfModule> RewriteEngine On # 排除Let's Encrypt证书验证路径 RewriteCond %{REQUEST_URI} ^/\.well-known RewriteRule ^ - [L] # 带www的请求直接一步跳转到HTTPS非www域名,避免多次跳转 RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] RewriteCond %{HTTP_HOST} !^localhost RewriteCond %{HTTP_HOST} !^[0-9]+.[0-9]+.[0-9]+.[0-9]+(:[0-9]+)?$ RewriteRule ^(.*)$ https://%1$1 [R=permanent,L] # 不带www的HTTP请求直接跳HTTPS RewriteCond %{HTTP_HOST} !^www\. [NC] RewriteCond %{HTTP_HOST} !^localhost RewriteCond %{HTTP_HOST} !^[0-9]+.[0-9]+.[0-9]+.[0-9]+(:[0-9]+)?$ RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=permanent,L] </VirtualHost>
额外负载均衡配置确认
修改完Apache配置后,需要确认Google Load Balancer的配置符合要求:
- 前端配置同时开放80(HTTP)和443(HTTPS)端口,443端口绑定覆盖www和非www域名的有效SSL证书
- 后端服务协议保持HTTP,端口对应Apache的80端口
- 健康检查路径设置为
/.well-known/或者站点正常可访问路径,确保返回200状态码
配置完成后重启Apache服务,清空浏览器缓存再测试即可解决所有报错,实现HTTP跳HTTPS、www跳非www的需求。
内容的提问来源于stack exchange,提问作者FlyingPenguin
相关产品推荐
相关产品推荐

