Django Admin挂起nginx端口443

时间:2015-09-23 14:10:30

标签: python django ssl nginx gunicorn

我想用https设置nginx和gunicorn的django。但是,如果我想去django的管理员,它会挂起加载。

我使用以下命令调用应用程序: gunicorn core.wsgi:application --bind 127.0.0.1:8181 --certfile = / etc / nginx / ssl / ssl-bundle.crt --keyfile = / etc / nginx / ssl / hoi.key

我已经在我的settings.py中了:

  • CSRF_COOKIE_SECURE = True
  • SESSION_COOKIE_SECURE = True
  • SECURE_PROXY_SSL_HEADER =('HTTP_X_FORWARDED_PROTO','https')

这是我的nginx配置:

server{
listen   80;
listen 443 ssl;
server_name test.hello.com;
access_log /var/log/nginx/neat.access.log;
error_log /var/log/nginx/neat.error.log;
root /var/www/Test/;
ssl on; 
ssl_certificate /etc/nginx/ssl/ssl-bundle.crt;
ssl_certificate_key /etc/nginx/ssl/hoi.key;
ssl_session_timeout 5m;
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers "HIGH:!aNULL:!MD5 or HIGH:!aNULL:!MD5:!3DES";
ssl_prefer_server_ciphers on;
location / 
{
    add_header Access-Control-Allow-Origin "*";
    proxy_pass https://127.0.0.1:8181;          
    proxy_redirect off;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    client_max_body_size 10m;
}
}

1 个答案:

答案 0 :(得分:0)

您正在通知django如何通过https检测请求是否已完成,但您的nginx文件中没有设置正确的标头。尝试添加:

proxy_set_header X-Forwarded-Proto $scheme;

进入nginx配置中的位置部分。

此外,您不必在gunicorn和nginx之间建立安全连接。他们在localhost中进行通信,没有任何东西可以嗅探通信(除了你自己的服务器上的东西,但那些能够嗅探本地主机连接的人,也可以访问你的证书并解密https)。如果要设置该连接是安全的(因为例如,您不仅可以访问该服务器),请使用unix套接字和正确的访问权限。