2011-01-07 6 views
0

Ich habe ein paar Beispiele für Django + nginx + wsgi + ssl verfolgt, aber ich kann sie nicht zur Arbeit bringen. Ich erhalte einfach einen Fehler in meinem Browser, als ich keine Verbindung herstellen kann.Probleme, SSL zu bekommen, um mit django + nginx + wsgi zu arbeiten

Ich führe zwei Websites vom Host aus. Die Konfigurationsdateien sind bis auf die IP-Adressen, Servernamen und Verzeichnisse identisch.

Wenn keine SSL verwenden, funktionieren sie gut. Wenn ich versuche, mit einem von ihnen auf 443 zu hören, kann ich keine Verbindung herstellen.

Meine Konfigurationsdateien sind unten, und alle Vorschläge würden geschätzt.

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: das Vorhandensein von zwei Standorten (auf separaten IPs) auf dem Host ist das Problem. Wenn ich die andere Seite lösche, funktioniert die obige Einstellung meistens. Dies führt auch zu einem weiteren Problem: chrome akzeptiert die Website nicht als sicher, da einige Inhalte nicht verschlüsselt sind.

Antwort

0

Ich änderte den Server, der auf 80 hört, um auf https zu schreiben, entfernte alle anderen Direktiven.

2

[Dies sollte eigentlich ein Kommentar sein ...]

sollten Sie setzen auch

proxy_set_header X-Forwarded-Protocol $scheme

Django Um anzuzeigen, wenn Verbindungen sicher sind, sonst wird Ihre https Links zu http weitergeleitet , was schlecht ist.

Dies wird http setzen, wenn es tatsächlich http ist, und https, wenn es https ist.

+0

Siehe https://docs.djangoproject.com/en/dev/ref/settings/#secure-proxy-ssl-header für die passende Einstellung für Django 1.4+. –