GAE PHP弹性环境配置Nginx强制HTTPS解决重定向过多问题
解决GAE弹性环境自定义域名HTTP强制跳转HTTPS的重定向循环问题
我刚碰到过一模一样的坑!你之前的配置之所以触发重定向循环,核心原因是Google App Engine弹性环境的请求都经过了Google负载均衡处理——负载均衡已经完成了HTTPS的终止,所以到达你应用内Nginx的请求实际上全是HTTP协议的,哪怕用户一开始用HTTPS访问。这就导致你的listen 80; return 301 https://...规则会无差别把所有请求重定向到HTTPS,而负载均衡又把HTTPS请求转成HTTP发给Nginx,形成死循环。
正确的做法是通过GAE负载均衡传递的X-Forwarded-Proto请求头判断原始请求的协议,只对原始为HTTP的请求做重定向。把你的nginx-app.conf改成下面这样:
server_name custom.example.com; if ($http_x_forwarded_proto = "http") { return 301 https://$server_name$request_uri; }
配置细节说明:
server_name custom.example.com:确保规则只作用于你的自定义域名,不会干扰已经能正常跳转的appspot默认域名if ($http_x_forwarded_proto = "http"):检查负载均衡传递的原始请求协议,只有当原始请求是HTTP时才执行重定向return 301 https://$server_name$request_uri:永久重定向到对应HTTPS地址,完整保留用户的原始请求路径
另外,测试前一定要清除浏览器缓存——之前的错误重定向规则可能已经被浏览器缓存,会影响测试结果的准确性。
部署这个配置后,你的自定义域名就能正常将HTTP请求跳转到HTTPS,同时不会触发重定向循环了。
内容的提问来源于stack exchange,提问作者Rob MacMillian
相关产品推荐
相关产品推荐

