如何在http到nginx docker elastic beanstalk中将http重定向到https

时间:2016-09-27 05:41:39

标签: docker nginx https

我在django应用程序托管在docker elastic beanstalk中,它使用nginx。对于SSL,我使用的是aws证书。 要将http重定向到https,我在docker容器中尝试使用了nginx“x_forwarded_proto”,但是我收到了502错误。这是nginx配置:

server {

listen      80 default_server;

server_name www.example.com; 

access_log /home/docker/logs/nginx-access.log;
error_log /home/docker/logs/nginx-error.log;


if ($host !~* ^(www.example.com|example.com)$ ) {
    return 444;
}

if ( $http_x_forwarded_proto != 'https' ) {
return 301 https://$host$request_uri;
}

location / {
    uwsgi_pass unix:/var/sockets/api.sock;
    include    /home/docker/server/uwsgi_params; #
  }  
}

任何人都可以建议更好的解决方案。

2 个答案:

答案 0 :(得分:4)

找到一个解决方案,只需添加

if ( $http_x_forwarded_proto != 'https' ) {
return 301 https://$host$request_uri;
}

到eb实例的nginx配置。

答案 1 :(得分:-2)

这确实是一个nginx问题(添加正确的标签)。

您的配置似乎很复杂。从这一个开始。这就是我用来将http端口80流量重定向到TLS / SSL端口443流量。

access_log /home/docker/logs/nginx-access.log;
error_log /home/docker/logs/nginx-error.log;

server {
    listen 80;
    server_name www.example.com;

    return 301 https://$host$request_uri;
}

server {
    listen      443 ssl;
    server_name www.example.com;

    location / {
        root   /usr/share/nginx/html;
        index  index.html;
    }
}