2010-01-25 15 views
23

Ho intenzione di vendere prodotti con addebito delle carte di credito, quindi usare SSL sarà fondamentale per il sito Web di Django. E sono molto ingenuo per questo.Domanda Django e SSL

Il mio piano di installazione iniziale di django utilizzava Apache come server web e utilizzava mod_wsgi per comunicare con Django, il supporto statico di nuovo servito da Apache. Tutto sembrava buono fino a quando il protocollo SSL arriva ai piani.

Utilizzerò il protocollo SSL per le pagine di configurazione dell'account utente, l'intera sequenza di acquisto e forse l'amministratore di django.

Ho controllato i documenti ufficiali e ho cercato su Google, ma le risposte sono piuttosto confuse.

  • Quale sarebbe il modo consigliato di implementare SSL in questa configurazione?
  • Qualche suggerimento a questo implementatore SSL per la prima volta su un sito Web?
  • Da this page, sembra che abbiano incluso Nginx nello stack. Non potrebbe essere fatto senza di esso?

Grazie

risposta

28

Ho installato applicazioni Django su SSL utilizzando Apache mod_ssl e mod_wsgi.

Io non sono un esperto di Apache, ma ecco come ho impostato SSL per un sito (inserire le direttive di seguito nel file httpd.conf o in un file a cui fa riferimento tale file, ad esempio nella directory sites-enabled, se utilizzato in la tua installazione di Apache). Vedere il primo collegamento alla documentazione di seguito per come creare e utilizzare un certificato autofirmato.

NameVirtualHost *:443 
<VirtualHost *:443> 
    SSLEngine On 
    SSLCertificateFile /etc/apache2/ssl/certificatefile.crt 
    SSLCertificateKeyFile /etc/apache2/ssl/certificatekeyfile.crt 

    WSGIScriptAlias//path/to/file.wsgi 
</VirtualHost> 

link Documentazione:

+0

E se voglio solo Django/admin/URL di andare via https? cosa devo aggiungere al tuo esempio di configurazione? – Feanor

+1

Immagino che il modo più semplice sia configurare i siti http e https con la stessa direttiva '' WSGIScriptAlias''. Usa un '' Redirect/admin'' nella configurazione del sito https. – codeape

7

Django non gestisce la roba SSL. Apache si prenderà cura di te per te in modo trasparente e Django lavorerà come al solito. È possibile controllare SSL in una vista con request.is_secure().

Tuttavia, se necessario, è necessario fornire collegamenti come URL https. Potresti anche voler reindirizzare determinate pagine http a pagine https (come la schermata di amministrazione di django).

14

Per chi arriva tramite Google, ecco un esempio di configurazione per Nginx:

server { 
    listen 443 ssl default; 
    server_name example.com; 
    ssl on; 
    ssl_certificate /etc/nginx/server.crt; 
    ssl_certificate_key /etc/nginx/server.key; 
    add_header Cache-Control "public, must-revalidate"; 
    # add_header Cache-Control "no-cache"; 
    expires  1d; 
    add_header Strict-Transport-Security "max-age=2592000; includeSubdomains"; 

    location/{ 
     fastcgi_pass localhost:8000; 
     fastcgi_param PATH_INFO $fastcgi_script_name; 
     fastcgi_param REQUEST_METHOD $request_method; 
     fastcgi_param CONTENT_TYPE $content_type; 
     fastcgi_param CONTENT_LENGTH $content_length; 
     fastcgi_param SERVER_PORT  $server_port; 
     fastcgi_param SERVER_NAME  $server_name; 
     fastcgi_param SERVER_PROTOCOL $server_protocol; 
     fastcgi_pass_request_headers on; 
     # include fastcgi_params; 
    } 

    location /static { 
     root /home/myapp/application; 
    } 

    location = /favicon.ico { 
     root /home/myapp/application/assets; 
     access_log off; 
     log_not_found off; 
    } 

}