[英]How to redirect http to https on a AWS EC2 instance running a node server.
我有一個映射流量的AWS ELB:
我的目標是通過https獲得所有流量。
在那個實例上,我有一個節點服務器在端口3000上偵聽。
我試圖添加一個偵聽端口80的http服務器以重定向所有流量,但是存在一些權限問題,並且我還讀到,使用sudo命令運行服務器不是一個好習慣。
我試圖將nginx配置添加到實例,但沒有成功。
server {
listen 80;
server_name app.elaisian.com;
location / {
proxy_pass https://app.sitename.com;
}
}
提前致謝
從AWS文檔中 ,解決方案是使用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;
}
}
我認為您可以使用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;
...
}
您可以參考這篇文章以獲取更多信息
另一種選擇是將所有流量發送到您的節點服務器,並執行以下操作:
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包來調整函數調用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.