我在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; #
}
}
任何人都可以建议更好的解决方案。
答案 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;
}
}