如何将所有HTTPstream量redirect到HTTPS,以使用SSL证书在ELB后面的nginx / uWSGI后面运行的Django 1.4应用程序

我想知道如何把我的整个Django网站后面的HTTPS。 如果有人试图通过HTTP来,我希望该用户被redirect到HTTPS。 目前,Firefox给我的错误是“Firefox已经检测到服务器正在redirect这个地址的请求,永远不会完成”。

我的设置是:

1.一个带SSL证书的AWS负载均衡器(ELB)ELB有两个监听器:

  • 负载均衡器端口80(HTTP)指向实例端口80(HTTP)
  • 指向实例端口80(HTTP)的负载平衡器端口443(HTTPS)

2.运行nginx / uWSGI的ELB后面有一个EC2实例

nginxconfiguration

server { listen 80; return 301 https://$host$request_uri; } server { listen 443 ssl; set $home /server/env.example.com; client_max_body_size 10m; keepalive_timeout 120; location / { uwsgi_pass uwsgi_main; include uwsgi_params; uwsgi_param SCRIPT_NAME ""; uwsgi_param UWSGI_CHDIR $home/project; uwsgi_param UWSGI_SCRIPT wsgi; uwsgi_param UWSGI_PYHOME $home; } } 

uwsgiconfiguration

 # file: /etc/init/uwsgi.conf description "uWSGI starter" start on (local-filesystems and runlevel [2345]) stop on runlevel [016] respawn exec /usr/local/sbin/uwsgi \ --uid www-data \ --socket 127.0.0.1:5050 \ --master \ --logto /var/log/uwsgi_main.log \ --logdate \ --optimize 2 \ --processes 8 \ --harakiri 120 \ --vhost \ --no-site \ --post-buffering 262144 

3. Django设置文件具有SSL / HTTPS专用的以下设置

 SESSION_COOKIE_SECURE = True CSRF_COOKIE_SECURE = True 

任何想法如何正确设置HTTPS?

谢谢

  1. 将您的AWS ELB映射ELB:80设置为实例:80,将ELB:443设置为实例:1443。
  2. 绑定nginx在端口80和1443上收听。
  3. 将到达端口80的请求转发到端口443。

aws elb设置

NGINX设置

 server { listen 80; server_name www.example.org; rewrite ^ https://$server_name$request_uri? permanent; } server { listen 1443; server_name www.example.org; }