【问题标题】:Redirecting correctly HTTP to HTTPS using Django and Nginx使用 Django 和 Nginx 将 HTTP 正确重定向到 HTTPS
【发布时间】:2020-02-09 20:57:54
【问题描述】:

我正在尝试将我的网站从 HTTP 重定向到 HTTPS,并且我已经部分成功了。问题是,当我输入 mywebsite.fr 时,我会在地址栏中获得包含网站代码的容器的服务名称(例如 Django app/),并带有 DNS_PROBE_FINISHED_NXDOMAIN 错误。

现在,我在另一台计算机的另一个 Chrome 浏览器上尝试了同样的操作,这一次当我输入 www.mywebsite.fr 时,我得到了相同的结果,而非 www 被正确地重定向到了安全地址。

最后,我使用带有 www 和非 www 的智能手机 (Brave) 尝试了完全相同的过程,我得到 https://djangoapp 错误 ERR_NAME_NOT_RESOLVED 而当我明确输入 https:\\mywebsite 时,我没有遇到任何问题。

所以这里是重定向到 HTTPS 服务器的 NGINX 部分:

    server {
            ...

            location / {
                    return 301 https://djangoapp$request_uri;
            }
    }

这是指向上游的 HTTPS 服务器中的位置:

server {
           ...

           location / {
                    ...

                    proxy_pass http://djangoapp;
            }
   }

而且,这是运行代码的服务:

  djangoapp:
    build: .
    ports:
      - "8000:80"
    links:
      - db
    depends_on:
      - db

我还没有掌握 NGINX 的所有复杂性,而且我真的不明白我在这里做错了什么。关于这个问题我有什么解决方案或建议?

【问题讨论】:

    标签: django nginx https docker-compose nginx-location


    【解决方案1】:

    您正在返回您的 django 应用程序 url,而不是将其重定向到您的 http nginx 块。

    在配置的 http 部分:

     server {
         return 301 https://$host$request_uri;
         listen 80;
     }
    

    并且在 https 中,如果您不希望 url 更改为您的 django 应用程序的 url,则在代理传递时,您应该添加 proxy_set_header Host $http_host;。添加一些额外的标头(例如 ip 地址)也很有用。所以整个服务器块看起来像:

    server {
        location / {
             proxy_set_header Host $http_host;
             proxy_set_header X-Real-IP $remote_addr;
             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
             proxy_set_header X-Forwarded-Proto $scheme;
             proxy_pass http://djangoapp;
        }
    }
    

    【讨论】:

    • 您好,感谢您的回复。问题是我已经在 HTTPS 服务器块中有这些设置,所以我不确定问题是否来自于此。您的第一个答案很有趣,那么我应该如何重定向到上游?
    【解决方案2】:

    我的问题已解决,因为我的 proxy_set_header X-Forwarded-Proto 设置为 $https 而不是 https。按照建议使用$scheme 也可以正常工作。

    通过阅读@mehrad 的评论并再次在网络上搜索一下,我发现了重定向无法正常工作的错误。这还包括使用$host 而不是djangoapp

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-29
      • 2018-01-05
      • 1970-01-01
      • 2014-05-08
      • 2016-04-27
      • 1970-01-01
      • 2014-10-11
      • 2018-08-18
      相关资源
      最近更新 更多