【问题标题】:How to redirect http to https on a AWS EC2 instance running a node server.如何在运行节点服务器的 AWS EC2 实例上将 http 重定向到 https。
【发布时间】:2018-05-27 03:09:17
【问题描述】:

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

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

我的目标是让所有流量都通过 https。

在那个实例上,我有一个节点服务器正在侦听端口 3000。

我尝试添加一个http server 监听端口 80 以重定向所有流量,但存在一些权限问题,我还了解到使用 sudo 命令运行服务器不是一个好习惯。

我尝试向实例添加 nginx 配置,但没有成功。

server {
    listen 80;
    server_name app.elaisian.com;
    location / {
        proxy_pass https://app.sitename.com;
    }
}

提前致谢

【问题讨论】:

    标签: node.js nginx amazon-ec2 elastic-load-balancer


    【解决方案1】:

    来自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;
          }
    }
    

    【讨论】:

      【解决方案2】:

      我认为您可以使用 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了解更多信息

      【讨论】:

      • 我的服务器监听 Web 应用程序的 3000 端口,负载均衡器是否从 433 重定向到 3000 上的 ec2 实例。你的脚本仍然有意义吗? (我会试试这个并给出反馈)
      【解决方案3】:

      另一种选择是将所有流量发送到您的节点服务器并执行以下操作:

      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 包调整函数调用。

      【讨论】:

        猜你喜欢
        • 2018-01-29
        • 1970-01-01
        • 2018-12-08
        • 2018-05-09
        • 2021-02-19
        • 2019-02-09
        • 1970-01-01
        • 2020-10-04
        • 1970-01-01
        相关资源
        最近更新 更多