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