2010-01-25 354 views
23

我打算通過收取信用卡來銷售產品,因此使用SSL對於使用Django的網站來說至關重要。我對此非常天真。Django和SSL問題

我最初的Django的設置方案是使用Apache作爲Web服務器,並使用mod_wsgi的Django的溝通,靜止媒體再次被Apache服務。在SSL協議進入計劃之前,所有這一切似乎都很好。

我將使用SSL協議進行用戶帳戶設置頁面,整個採購程序,也許在Django管理。

我已經檢查過官方文檔和google搜索,但答案相當混亂。

  • 將SSL實施到此設置的建議方式是什麼?
  • 對此首次SSL實施者的任何建議,以一個網站?
  • this page看來,他們似乎已經將Nginx納入了堆棧。如果沒有它,難道不行嗎?

感謝

回答

28

我已經在SSL使用Apache的mod_sslmod_wsgi部署Django的應用程序。

我沒有Apache的專家,但這裏是如何的一個網站,我設置SSL(把指令下面的httpd.conf文件,或從該文件中引用的文件,例如在sites-enabled目錄,如果是在使用你的Apache安裝)。有關如何創建和使用自簽名證書,請參閱下面的第一個文檔鏈接。

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

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

文檔鏈接:

+0

如果我只希望Django的/管理/網址通過https去?我有什麼要添加到您的配置示例? – Feanor 2012-06-28 10:13:27

+1

我想最簡單的方法是配置HTTP和HTTPS站點使用相同的''WSGIScriptAlias''指令。在https站點配置中使用「Redirect/admin」。 – codeape 2012-06-29 08:39:50

7

Django不處理SSL的東西。 Apache會爲你透明地處理這個問題,Django將像往常一樣工作。您可以在request.is_secure()的視圖中檢查SSL。

但是,您必須在適當的地方提供https鏈接。您也可能想要將某些http頁面重定向到https頁面(如django管理屏幕)。

14

對於那些通過谷歌,繼承人爲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; 
    } 

}