2016-05-16 7 views
0

これは4時間を少し上回っています。私のDjangoアプリケーション用のSSL証明書で動作するようにnginxサーバーを取得できません。ここでDjango Cookiecutter over https

は私nginx.confです:

user nginx; 
worker_processes 1; 

error_log /var/log/nginx/error.log warn; 
pid  /var/run/nginx.pid; 


events { 
    worker_connections 1024; 
} 


http { 
    include  /etc/nginx/mime.types; 
    default_type application/octet-stream; 

    log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 
         '$status $body_bytes_sent "$http_referer" ' 
         '"$http_user_agent" "$http_x_forwarded_for"'; 

    access_log /var/log/nginx/access.log main; 

    sendfile  on; 
    #tcp_nopush  on; 

    keepalive_timeout 65; 

    #gzip on; 

    upstream app { 
     server django:5000; 
    } 

    server { 
     listen     80; 
     server_name    www.example.com; 
     rewrite ^/(.*)   https://www.example.com/$1 permanent; 
    } 

    server { 
     listen     443 ssl; 
     server_name    www.example.com; 
     charset     utf-8; 

     ssl      on; 
     ssl_certificate   /etc/nginx/ssl/1_www.example.com_bundle.crt; 
     ssl_certificate_key  /etc/nginx/ssl/example_rsa.key; 

     location/{ 
      try_files   $uri     @proxy_to_app; 
     } 

     location @proxy_to_app { 
      proxy_pass   http://app; 
      proxy_redirect  off; 

      proxy_set_header X-Forwarded-Proto  $scheme; 
      proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for; 
      proxy_set_header X-Real-IP    $remote_addr; 
      proxy_set_header Host     $http_host; 
     } 

    } 
} 

私はhttpsにすべてhttpトラフィックをリダイレクトするために管理しなかったが、私はhttps://www.example.comを訪れたとき、私は美しいERR_CONNECTION_REFUSEDを取得します。

SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https') 

が、私はこの問題は、nginxのレベルであることだと思います:私は私のDjangoアプリケーションであると考えることができ

のみ関連する部分があります。私はDjango Cookiecutterpydannyを使っています。変更されていないnginx.confファイルはhereです。 DockerfileをADD私の証明書に編集しました。

ありがとうございます!

+0

私は443接続を許可していません。 https://docs.djangoproject.com/en/1.9/topics/security/#ssl-httpsをチェックして正しいパスになっていることを確認してください(cookiecutterの隣) – chachan

+0

@chachanありがとう!私はドキュメントと非常に一致していますが、問題はNginxにあると考えています。 djangoプロジェクトでのロギングは非常に広範囲ですが、Nginxを介して要求されたことはありません。あなたはNginx confogurationのhttpブロックが効果を持つと思いますか? –

答えて

0

これは私がこのケースで使用するconfファイルです。あなたは、同じアプローチを比較したりフォローしたいかもしれません:Djangoの側では

# nginx config file for example.com 

upstream django { 
    server     unix:/srv/www/app/run/app.sock; 
} 


server { 
    listen     80 default_server; 
    server_name    example.com www.example.com; 
    return     301 https://example.com$request_uri; 
} 


server { 
    listen     443 ssl; 
    server_name    www.example.com; 
    ssl_certificate   /etc/nginx/ssl/app.crt; 
    ssl_certificate_key  /etc/nginx/ssl/app.key; 
    return     301 https://example.com$request_uri; 
} 

server { 
    listen     443 ssl; 
    server_name    example.com; 
    ssl_certificate   /etc/nginx/ssl/app.crt; 
    ssl_certificate_key  /etc/nginx/ssl/app.key; 
    proxy_set_header  X-Forwarded-Protocol $scheme; 
    add_header    Strict-Transport-Security "max-age=31536000"; 
    charset     utf-8; 

    gzip on; 
    gzip_disable "msie6"; 

    gzip_vary on; 
    gzip_proxied any; 
    gzip_comp_level 6; 
    gzip_buffers 16 8k; 
    gzip_http_version 1.1; 
    gzip_min_length 256; 
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/vnd.ms-fontobject application/x-font-ttf font/opentype image/svg+xml image/x-icon; 

    location /media { 
     alias    /srv/www/app/app/media; 
    } 

    location /static { 
     alias    /srv/www/app/app/collected_static; 
    } 

    location/{ 
     uwsgi_pass django; 
     include    /srv/www/app/run/uwsgi_params; 
    } 

    location /api/v1/app/upload { 
     uwsgi_max_temp_file_size 1M; 
    } 

    location /favicon.ico { 
     alias    /srv/www/app/app/collected_static/img/favicon.ico; 
    } 
} 

、唯一の生産環境のために、私は:それ

# SSL 
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTOCOL', 'https') 
SESSION_COOKIE_SECURE = True 
CSRF_COOKIE_SECURE = True 

だそれ!

+0

私はチャンスを得るとすぐにこれを試してみます。しかし、私は実際に探している問題であるという大きな違いは見られません。どう思いますか? –

+0

@HasanCanSaralあなたのファイルに 'listen 443 ssl;'文がありません。私はドキュメントをチェックしてより簡単なシナリオを作ることをお勧めします – chachan

+0

2番目のサーバブロックの先頭にあります。ではない? –

関連する問題