在nginx上为django项目设置ssl

时间:2015-11-26 16:34:19

标签: python django ssl nginx gunicorn

我想为nginx设置ssl,我的项目是django,我也使用gunicorn作为wsgi http服务器。 我在settings.py代码中添加以下行:

CSRF_COOKIE_SECURE = True
SESSION_COOKIE_SECURE = True

我不知道是否有必要这样做,然后我按以下形式配置我的nginx:

upstream app_server {
    server 127.0.0.1:6000; // your gunicorn server
}
server {
    listen 80;
    server_name <name>;
    return 301 https://$host$request_uri;
}

server {
    #listen 80;
    listen 443 default ssl;
    client_max_body_size 4G;

    server_name <name>;

    #ssl                  on;
    ssl_certificate      /etc/nginx/ssl/ssl.crt;
    ssl_certificate_key  /etc/nginx/ssl/ssl.key;

    ssl_session_timeout  5m;

    ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers   on;
    keepalive_timeout 5;

# path for static files
    root /home/deploy/;

    location /static/ {
    }
    location /media/ {
    }

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        #proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_pass http://app_server;
    }

    error_page 500 502 503 504 /500.html;
    location = /500.html {
        root /home/deploy/static;
    }
}

nginx configure是正确的我认为因为它重定向80到443,但没有任何反应,80请求发送,然后nginx将其重定向到443,但没有任何事情发生,它无法连接到gunicorn或项目。

我的nginx有什么问题?我的nginx版本nginx / 1.0.15。我几乎看到了相关的主题,根据他们我的配置是正确的。谁能帮我?  我应该用gunicorn做点什么吗?我的证书是自签名的,或者我该怎么办?

问候:)

1 个答案:

答案 0 :(得分:1)

这是我用于带枪炮的nginx的配置,它可以工作。试一试,看看你得到了什么。

server { 
  listen 80; 
 server_name something.com;                             
 access_log off; 
 return 301 https://$server_name$request_uri; 
 } 
server{
     server_name something.com; 
     listen 443 ssl;
     ssl_certificate /path/to/file.crt;
     ssl_certificate_key /path/to/privatekey.pem;

location /static/ {            
    alias /opt/myenv/static/;                   
}  
location / {                                
    proxy_pass http://127.0.0.1:8001; 
    proxy_set_header X-Forwarded-Host $server_name;
    proxy_set_header X-Real-IP $remote_addr;
    add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"';
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    add_header Front-End-Https on;
    proxy_redirect off;  

} 

我认为关键因素是:

proxy_pass http://127.0.0.1:8001; 

将请求重定向到gunicorn,假设您在端口8001上运行它。我猜这就是您需要添加的内容。