【问题标题】:ssl not working with nginx + uwsgi + djangossl 不适用于 nginx + uwsgi + django
【发布时间】:2020-07-19 19:53:34
【问题描述】:

嗨,我正在使用 django、nginx 和 uwsgi 编写我自己的服务器 问题是当我访问 https://localhost 时,ssl 工作。 但 https://domainname ,它不会工作。 我的代码有什么问题?

nginx.conf

worker_processes  1;
events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;


    keepalive_timeout  65;
upstream django {
        #server 172.30.1.40:8000;
        server localhost:8000;
}
    server {
        server_name  fidochallenge486.tk;
        listen 8080;
        location / {
                uwsgi_pass django;
                include /usr/local/etc/nginx/uwsgi_params;
                proxy_redirect off;
                proxy_pass_header Server;
                proxy_set_header Host $http_host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-Proto $scheme;
                proxy_pass http://127.0.0.1:8000/;
                proxy_redirect off;
                proxy_http_version 1.1;
        }
}
  server {
        listen       443 ssl;
        server_name  fidochallenge486.tk;

        ssl_certificate      /Users/junbeomkwak/Downloads/fidochallenge486.tk/bundle.crt;
        ssl_certificate_key  /Users/junbeomkwak/Downloads/fidochallenge486.tk/privkey.key;
        #ssl_session_cache    shared:SSL:1m;
        #ssl_session_timeout  5m;

        #ssl_ciphers  HIGH:!aNULL:!MD5;
        #ssl_prefer_server_ciphers  on;

        location / {
                include /usr/local/etc/nginx/uwsgi_params;
                uwsgi_pass django;
        }
    }
}

fido_project.conf

upstream django {
        server 172.30.1.40:8000;
}
server {
        listen 8080;
        server_name domainname;
        return 301 https://$host$request_uri;
        location / {
                uwsgi_pass django;
                proxy_pass 172.30.1.40:8000;
        }

}
server {
        listen 443 ssl;
        server_name domainname;
        if ($host = domainname') {
                return 301 https://domainname$request_uri;
        }
        ssl_certificate /Users/junbeomkwak/Downloads/fidochallenge486.tk/bundle.crt;
        ssl_certificate_key /Users/junbeomkwak/Downloads/fidochallenge486.tk/privkey.pem;
        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;
        location / {
                uwsgi_pass django;
                include /usr/local/etc/nginx/uwsgi_params;
                #proxy_pass 172.30.1.40:8000; // local
        }
}

编辑于 10:55 kst 我编辑了你说的..不工作 需要一些文件吗?比如ini文件什么的..

【问题讨论】:

  • 你应该把这个问题告诉你的主办公司

标签: django nginx uwsgi


【解决方案1】:

这里有一些奇怪的配置部分:

server {
        listen 8080;
        server_name domainname;
        return 301 https://$host$request_uri;
        location / {
                uwsgi_pass django;
                proxy_pass 172.30.1.40:8000;
        }

}

这个重定向

        return 301 https://$host$request_uri;
当最终用户在其浏览器地址栏中键入 domainname 而不指定 https:// 前缀时,

通常用于 HTTP 到 HTTPS 的重定向。在 server 块中监听端口 8080 是很奇怪的,因为最终用户必须输入 domainname:8080 才能重定向到 https://domainname。通常这种类型的重定向用于server 块中,它侦听默认的 HTTP 端口 80。无论如何

        location / {
                uwsgi_pass django;
                proxy_pass 172.30.1.40:8000;
        }

这里没有意义,因为它永远不会执行。此外,您应该只有proxy_pass 或uwsgi_pass,而不是两者。

下一个:

server {
        listen 443 ssl;
        server_name domainname;
        if ($host = domainname') {
                return 301 https://domainname$request_uri;
        }
        ...

if 块是干什么用的?它会给你从 HTTPS 到 HTTPS 的无限重定向,这绝对没有任何意义。看起来您从其他配置中复制粘贴了它,但不了解它的含义。删除它。

【讨论】:

  • 我仔细查看了您的 nginx.conf,看起来您复制粘贴时出现错误(例如,我认为 "nginx.conf" 66L, 1729C 行不是来自该配置文件)。你能解决它吗?
  • 编辑您的问题,不要在 cmets 中粘贴 nginx.conf。
猜你喜欢
  • 2014-01-20
  • 2020-07-28
  • 2011-10-10
  • 2017-11-02
  • 2019-12-28
  • 2015-07-01
  • 1970-01-01
  • 2014-05-31
  • 2017-08-07
相关资源
最近更新 更多