Digital Ocean Load Balancer http 到 https 使用 301 而不是 307

Digital Ocean Load Balancer http to https with 301 instead of 307

在我的设置中,我有一个 DigitalOcean 负载平衡器,只连接了一个 droplet(目前)运行 nginx。我通过 SSL Termination 使用负载均衡器管理我的 SSL 证书。负载均衡器设置了此转发规则:

端口 80 上的 HTTP -> 端口 80 上的 HTTP

443 端口上的 HTTP2 -> 80 端口上的 HTTP

负载均衡器有一个选项可以将 HTTP 重定向到 HTTPS。但是,如果我使用此选项,它会使用 307 重定向而不是 301。根据 DigitalOcean,这是有意的。有人告诉我,出于 Seo 的原因,它应该使用 301。我试图禁用该选项并使用 nginx 配置进行重定向,但我最终陷入了无限循环。这是我使用的片段:

server {
        listen 80;
        server_name _;
        # $scheme will get the http protocol
        # and 301 is best practice for tablet, phone, desktop and seo
        return 301 https://$host$request_uri;
}

有谁知道如何正确处理这种情况?任何帮助将不胜感激。

干杯 拉夫

我实际上发现我可以通过添加

来防止循环
if ($http_x_forwarded_proto = "http") {
  return 301 https://$host$request_uri;
}

如本 post

中所建议