簡體   English   中英

如何在運行節點服務器的AWS EC2實例上將http重定向到https。

[英]How to redirect http to https on a AWS EC2 instance running a node server.

我有一個映射流量的AWS ELB:

  • 從端口443(https)到端口3000上的EC2實例,
  • 從端口80(http)到端口80上的同一EC2實例。

我的目標是通過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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM