【问题标题】:Nginx rewrite http to https and proxy to another port, ERR_TOO_MANY_REDIRECTS errorNginx 将 http 重写为 https 并代理到另一个端口,ERR_TOO_MANY_REDIRECTS 错误
【发布时间】:2018-06-25 17:59:44
【问题描述】:

这里尝试使用 Nginx 作为反向代理。这就是我想要实现的目标:

  • example.comwww.example.com 重定向到https://example.com
  • 将请求代理到另一个端口。

这是流程:example.com -> Nginx -> Go web server listening on port 5000

似乎重写工作正常,因为在浏览器中我得到https://example.com,但是我在浏览器中得到这个错误:

ERR_TOO_MANY_REDIRECTS

如果重要的话,我的 DNS 设置如下:

@   - A - 11.XX.XX.XX
www - A - 11.XX.XX.XX

这是我的/etc/nginx/nginx.conf 文件:

events {
    worker_connections 1024;
}

http {
    server {
        listen      80;
        listen      [::]:80;
        server_name www.example.com example.com;

        rewrite ^(.*)$ https://example.com$request_uri permanent;

        location / {
                proxy_pass http://127.0.0.1:5000;
        }
    }

    server {
        listen      443 ssl;
        listen      [::]:443 ssl;
        server_name www.example.com example.com;

        ssl_certificate "/etc/letsencrypt/live/example.com/fullchain.pem";
        ssl_certificate_key "/etc/letsencrypt/live/example.com/privkey.pem";

        rewrite ^(.*)$ https://example.com$request_uri permanent;

        location / {
            proxy_pass http://127.0.0.1:5000;
        }
    }
}

任何帮助将不胜感激。网络菜鸟在这里。

【问题讨论】:

    标签: ssl nginx proxy


    【解决方案1】:

    在这个server块中,只需重定向到HTTPS块,这里不需要location块:

    server {
        listen      80;
        listen      [::]:80;
        server_name www.example.com example.com;
        return 301 https://example.com$request_uri;
    }
    

    【讨论】:

      【解决方案2】:

      不需要添加重定向 443 块,因为它已经从 80 块重定向。所以试试下面的配置:

      events {
          worker_connections 1024;
      }
      
      http {
          server {
              listen      80;
              listen      [::]:80;
              server_name www.example.com example.com;
      
              return 301 https://example.com$request_uri;
      
              location / {
                      proxy_pass http://127.0.0.1:5000;
              }
          }
      
          server {
              listen      443 ssl;
              listen      [::]:443 ssl;
              server_name www.example.com example.com;
      
              ssl_certificate "/etc/letsencrypt/live/example.com/fullchain.pem";
              ssl_certificate_key "/etc/letsencrypt/live/example.com/privkey.pem";
      
      
      
              location / {
                  proxy_pass http://127.0.0.1:5000;
              }
          }
      }
      

      【讨论】:

        【解决方案3】:

        其他两个答案对于修复这个问题的答案(重定向循环)非常有帮助。然而,还有另一个错误,即即使我重定向到非 www https 版本,每次都会显示 www。

        这是执行以下操作的更新配置:

        • 把 www 变成非 www
        • 把http转成https

          events {
              worker_connections 1024;
          }
          
          http {
              server {
                  listen      80;
                  listen      [::]:80;
                  server_name www.example.com example.com;
          
                  return 301 https://example.com$request_uri;
              }
          
              server {
                  listen      443 ssl;
                  listen      [::]:443 ssl;
                  server_name www.example.com;
          
                  ssl_certificate "/etc/letsencrypt/live/example.com-0001/fullchain.pem";
                  ssl_certificate_key "/etc/letsencrypt/live/example.com-0001/privkey.pem";
          
                  return 301 https://example.com$request_uri;
              }
          
              server {
                  listen      443 ssl;
                  listen      [::]:443 ssl;
                  server_name example.com;
          
                  ssl_certificate "/etc/letsencrypt/live/example.com-0001/fullchain.pem";
                  ssl_certificate_key "/etc/letsencrypt/live/example.com-0001/privkey.pem";
          
                  location / {
                      proxy_pass http://127.0.0.1:5000;
                  }
              }
          }
          

        【讨论】:

          猜你喜欢
          • 2020-05-19
          • 2020-08-04
          • 2018-11-16
          • 1970-01-01
          • 1970-01-01
          • 2021-11-13
          • 2011-06-30
          • 2017-05-16
          • 1970-01-01
          相关资源
          最近更新 更多