【问题标题】:nginx certbot doesnt redirect to django servernginx certbot 不会重定向到 django 服务器
【发布时间】:2021-09-20 17:59:44
【问题描述】:

我正在尝试为 Django 设置 SSL 证书。我通过本指南设置它:https://www.youtube.com/watch?v=dYdv6pkCufk&ab_channel=TonyTeachesTech,在指南中 django 服务器刚开始使用 SSL,但对我来说不起作用,而是将域从 http 重定向到 https,但不重定向到 django 服务器。我什至不知道该怎么办。我在整个互联网上搜索,一无所获。

这是我的 nginx 配置:

server {
    listen 80 default_server;

    server_name _;

    return 301 https://$host$request_uri;
}
server {
    server_name wavera.ru www.wavera.ru; # managed by Certbot

    return 301 https://$host$request_uri;


    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/www.wavera.ru/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/www.wavera.ru/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot



}server {
    if ($host = wavera.ru) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    if ($host = www.wavera.ru) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    listen 80 ;
    server_name wavera.ru www.wavera.ru;
    return 404; # managed by Certbot




}


我启动服务器

python3 manage.py runserver 

【问题讨论】:

  • 所以你的 Django 在 localhost:8000 上运行,在你的 nginx 配置文件中你将请求转发到那个地址?
  • 请求的 URL 是 www.wavera.ru/abc/something 并且您的 Django 在 localhost:8000/abc/something 上运行。您还缺少 Nginx 设置中的位置块。

标签: django nginx


【解决方案1】:

Runserver 仅用于开发目的,您应该运行类似 gunicorn 的东西来创建一个 .sock 文件。

现在,您可以尝试类似 -

upstream backend {
    server localhost:8000;
}
server {
        server_name wavera.ru www.wavera.ru;
        location / {
            include proxy_params;
            proxy_pass http://backend 
     }

}

对于https,试试-

server {
        server_name wavera.ru www.wavera.ru;
           location / {
            include proxy_params;
               proxy_pass http://backend
        }
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/www.wavera.ru/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/www.wavera.ru/privkey.pem; 
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}

server {
    if ($host = wavera.ru) {
        return 301 https://$host$request_uri;
    }
    if ($host = www.wavera.ru) {
        return 301 https://$host$request_uri;
    }
    listen 80 ;
    server_name wavera.ru www.wavera.ru;
    return 404;
}

【讨论】:

  • 你重启nginx了吗?
  • 是的,等一下我会更新我的答案。
  • 监听 443 ssl,会让你的服务器块只监听 https。
  • 继续在 SO 中寻找内容,不断尝试、更新和改进您的 conf 文件,这就是我学到的。很高兴它能帮助你。我现在没有任何好的 gunicorn 设置文档链接。
  • link 看看这个,它可能对你有帮助。
猜你喜欢
  • 1970-01-01
  • 2022-01-08
  • 1970-01-01
  • 2018-12-12
  • 1970-01-01
  • 2019-02-23
  • 2014-01-23
  • 2012-05-27
  • 1970-01-01
相关资源
最近更新 更多