3

AmazonでホストされているサイトのELBレベルでSSL認定を取得しています。http次のサイトを使用して、すべてのリクエストを転送するミドルウェアをセットアップしましたhttps

http://djangosnippets.org/snippets/2472/

それはうまく機能しています。しかし、ここに私の質問があります。各リクエストは転送されているので、リンクをクリックするときなどにわずかな遅れがあります。極端なことは何もありません。しかし、djangoにすべてを強制的に実行させる方法はありhttpsますか?HttpResponseとのコードがある場合、デフォルトで代わりにHttpResponseRedirectどのように設定できますか?これを検索しようとしましたが、失敗しました...httpshttp

https://www...リダイレクト用のURLとページのリンクごとに入力すれば可能だと思いますが、可能であればそのように入力することは避けたかったのです。

4

3 に答える 3

2

Django がリダイレクト先の絶対 URI を作成するとき、request.is_secure をチェックして、使用するプロトコル スキーム (http、https、または ftp) を決定します。

Django はデフォルトで、リクエストに使用されるプロトコルに基づいてこれを行いますが、ご指摘のとおり、LB またはプロキシの背後にある場合、LB/プロキシ レベルでの SSL ターミネーションが原因で、これが間違っている可能性があります。

SECURE_PROXY_SSL_HEADER設定を使用して、この正確なシナリオを検出するように Django を構成できます。

于 2016-11-08T02:23:44.860 に答える
2

あなたが投稿したミドルウェアを見ると、手動でやりたくないと言ったこと、つまりドメインからのhttpsすべての着信http要求に追加することを正確に実行しています。このジョブをフロントエンド サーバー (nginx または apache) にオフロードすることをお勧めします。

于 2012-09-17T07:06:15.723 に答える
1

現在、Nginx を使用して負荷を分散し、リクエストで SSL を強制し、内部アプリ サーバーにプロキシされているときに SSL 接続を終了します。派手な負荷分散機能はありませんが、Nginx は小型で高速なので、どこにでも配置できます。

必要なコードビットは次のとおりです。

# listen on port 80 and redirect to SSL.
server {
   listen         80;
   server_name    site.com;
   rewrite        ^ https://$server_name$request_uri? permanent;
}

# listen on port 443, terminate SSL, and proxy to internal web app
# can be node, rails, whatever.
server {
  listen 443;
  server_name  site.com;
  gzip  on;
  client_max_body_size 250M;

  ssl   on;
  ssl_certificate   /etc/nginx/site.com.crt;
  ssl_certificate_key  /etc/nginx/site.com.key;
  keepalive_timeout  70;

  location / {
    proxy_pass http://127.0.0.1:8080;
    # We add this extra header just so proxied web app
    # knows this used to be an SSL connection.
    proxy_set_header x-https 1;
    include /etc/nginx/conf.d/proxy.conf;
  }
}
于 2013-02-06T19:10:09.030 に答える