Проблемы с получением SSL для работы с django + nginx + wsgi - PullRequest
0 голосов
/ 07 января 2011

Я выполнил несколько примеров для Django + nginx + wsgi + ssl, но не могу заставить их работать. Я просто получаю сообщение об ошибке в своем браузере, чем не могу подключиться.

Я управляю двумя сайтами с хоста. Конфигурационные файлы идентичны, за исключением IP-адресов, имен серверов и каталогов.

Когда ни один из них не использует SSL, они работают нормально. Когда я пытаюсь прослушать 443 с одним из них, я не могу подключиться ни к одному.

Мои конфигурационные файлы находятся ниже, и любые предложения будут оценены.

server{
listen xxx.xxx.xxx.xxx:80;
server_name sub.domain.com;

access_log /home/django/logs/nginx_customerdb_http_access.log;
error_log /home/django/logs/nginx_customerdb_http_error.log;

location / { 
    proxy_pass  http://127.0.0.1:8080; 
    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;
    client_body_buffer_size 128k;
    proxy_connect_timeout   90; 
    proxy_send_timeout      90; 
    proxy_read_timeout      90; 
    proxy_buffers           32 4k; 
}   

location /site_media/ {
    alias /home/django/customerdb_site_media/;
}   

location /admin-media/ {
    alias /home/django/django_admin_media/;
}   
}

server{
listen xxx.xxx.xxx.xxx:443;
server_name sub.domain.com;

access_log /home/django/logs/nginx_customerdb_http_access.log;
error_log /home/django/logs/nginx_customerdb_http_error.log;

ssl on; 
ssl_certificate sub.domain.com.crt;
ssl_certificate_key sub.domain.com.key;
ssl_prefer_server_ciphers   on; 


location / { 
    proxy_pass              http://127.0.0.1:8080; 
    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;
    proxy_set_header        X-Forwarded-Protocol    https;
    client_max_body_size    10m;
    client_body_buffer_size 128k;
    proxy_connect_timeout   90;
    proxy_send_timeout      90;
    proxy_read_timeout      90;
    proxy_buffers           32 4k;
}

location /site_media/ {
    alias /home/django/customerdb_site_media/;
}

location /admin-media/ {
    alias /home/django/django_admin_media/;
}
}


<VirtualHost *:8080>
ServerName xxx.xxx.xxx.xxx
ServerAlias xxx.xxx.xxx.xxx

LogLevel warn
ErrorLog /home/django/logs/apache_customerdb_error.log
CustomLog /home/django/logs/apache_customerdb_access.log combined

WSGIScriptAlias / /home/django/customerdb/apache/django.wsgi
WSGIDaemonProcess customerdb_wsgi processes=4 threads=5
WSGIProcessGroup customerdb_wsgi

SetEnvIf X-Forwarded-Protocol "^https$" HTTPS=on

</VirtualHost>

UDPATE: проблема в существовании двух сайтов (на разных IP-адресах) на хосте. если я удаляю другой сайт, настройки выше в основном работают. это также поднимает еще одну проблему: Chrome не принимает сайт как безопасный, говоря, что некоторые материалы не зашифрованы.

Ответы [ 2 ]

2 голосов
/ 24 августа 2012

[На самом деле это должен быть комментарий ...]

Вы также должны установить

proxy_set_header X-Forwarded-Protocol $scheme

Чтобы указать Django, когда соединения безопасны, в противном случае ваши ссылки https будут перенаправлены на http, что плохо.

Это установит http, когда это на самом деле http, и https, когда это https.

0 голосов
/ 23 января 2011

Я изменил сервер, который прослушивает 80, чтобы переписать на https, удалил все остальные директивы.

...