我有一个映射流量的AWS ELB:
我的目标是让所有流量都通过https。
在那个实例上,我有一个节点服务器侦听端口3000。
我尝试在端口80上添加http server监听以重定向所有流量,但是存在一些权限问题,我还读到使用sudo命令运行服务器不是一个好习惯。
我尝试将nginx配置添加到实例,但它没有用完。
server {
listen 80;
server_name app.elaisian.com;
location / {
proxy_pass https://app.sitename.com;
}
}
提前致谢
答案 0 :(得分:0)
从AWS docs开始,解决方案是使用HTTP请求的X-Forwarded-Proto
标头:
server {
listen 80;
server_name www.example.org;
if ($http_x_forwarded_proto != "https") {
rewrite ^(.*)$ https://$server_name$REQUEST_URI permanent;
}
}
答案 1 :(得分:0)
我认为您可以使用Nginx重定向从http到https
server {
listen 80;
listen [::]:80;
server_name app.elaisian.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name app.elaisian.com;
...
}
您可以参考此post了解更多信息
答案 2 :(得分:0)
另一种选择是将所有流量发送到您的节点服务器并执行以下操作:
server.pre(function (req, res, next) {
var proto = req.header('X-Forwarded-Proto');
if (proto === 'http' && req.header('host')) {
let query = req.getQuery() ? '?' + req.getQuery() : '';
console.log(`Redirecting ${req.getPath()} to https...`);
res.redirect(302, 'https://' + req.header('host') + req.getPath() + query, next);
} else {
next();
}
});
这将预先检查每个请求,以查看它是否作为HTTP遇到ELB。如果是这样,它将重定向到HTTPS,保留完整的URL。它假设您使用Restify或Express。您可能需要根据您正在使用的HTTP包来调整函数调用。