当前位置: 首页 > 知识库问答 >
问题:

在AWS EC2上的Node Express应用程序上启用https

明越
2023-03-14

我有一个在AWS EC2实例上运行的node Express应用程序。我可以使用运行服务器并连接到express apphttp://ec2-xx-xxx-xxx-242.us-west-2.compute.amazonaws.com

但是,当我使用https而不是http时,它不起作用,尽管在我的实例上打开了443端口。

有人能建议我如何在我的express应用程序上启用https吗。

var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
//var httpsRedirect = require('express-https-redirect');

var index = require('./routes/index');
var users = require('./routes/users');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', index);
app.use('/users', users);

app.get('/hello', (req, res) => res.sendStatus(200));
app.get('/health-check', (req, res) => res.sendStatus(200));

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  var err = new Error('Not Found');
  err.status = 404;
  next(err);
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

// *** HERE I am setting my App to listen on port 443

//app.listen(8080);
app.listen(8443);

module.exports = app;

以下是EC2实例的规则,其中端口443对所有流量开放。

我在AWS EC2Linux实例上启用了从端口443到8443的转发:

sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 8443

打开Linux防火墙以允许在端口443上进行连接:

sudo iptables -A INPUT -p tcp -m tcp --sport 443 -j ACCEPT
sudo iptables -A OUTPUT -p tcp -m tcp --dport 443 -j ACCEPT

共有2个答案

经博延
2023-03-14

以上答案肯定会让你达到目的。但AWS上的快速方法是使用应用程序负载平衡器,它负责设置和续订证书:https://aws.amazon.com/premiumsupport/knowledge-center/elb-redirect-http-to-https-using-alb/

穆承运
2023-03-14

这很容易,但需要一些时间来理解它通常是如何工作的。这应该是一个很好的开始:https://www.sitepoint.com/configuring-nginx-ssl-node-js/

简而言之:

  1. 让您的express应用保持原样
  2. 生成证书
  3. 安装并配置将处理https的反向代理。Nginx是不错的选择
 类似资料:
  • 我需要在具有自签名证书的Spring Boot 2.0.5应用程序上启用HTTPS,然而,到目前为止,我在配置中发现的所有内容都与设置一个名为的属性有关,但在这个Spring Boot版本上,该属性似乎不推荐使用...在Spring Boot应用程序上启用HTTPS还有其他方法吗?

  • 我有以下情况。在我的微服务[MA]中,我希望在应用程序启动后或基于某个事件初始化/销毁一些bean。想象一下,还有另一个微服务[MB],它保存关于ContentStores的信息。在MA启动之后,我想向MB请求contentStore条目,基于此,我想根据需要创建这么多bean。可能会有一个事件触发storrecreated/storredeleted,在这种情况下,我需要销毁bean。 我目前不

  • 编辑:根据Jim Rush的建议,我现在使用rc.local而不是init.d direclty来运行永远启动启动。 你知道为什么这不起作用吗?我在覆盆子皮B+上运行覆盆子。我已经运行了/etc/init.d kuuyi start和forever kicks并启动了该应用程序。只是启动机器后就不会发生了。 在这方面的任何帮助都是非常感谢的,我在这方面就像乳制品日后的旧奶酪布一样筋疲力尽。

  • 我已经部署了play 2.2.1 helloworld(github链接)应用程序,但它不起作用。这是helloworld应用程序的链接。应用程序在本地运行良好。 程序文件 web: play run--http.port=$PORT$PLAY_OPTS 插件。sbt公司 对数电平:=电平。警告 解析器="类型安全存储库"位于"http://repo.typesafe.com/typesafe/r

  • 当我试图在Tomcat8上运行该项目时,遇到了一个非常奇怪的错误: INFO o.s.web.context.contextLoader-根WebApplicationContext:初始化已启动。信息O.S.W.C.S.AnnotationConfigWebApplicationContext-刷新根WebApplicationContext:启动日期[Mon Jun 29 10:59:34 C

  • 第一次使用JavaFX时,我试图使用窗口对其进行测试。 我正在Mojave 10.14.5的MacOS上使用Java 8(更新211)和Eclipse。 我正在从事这个项目: 我将我认为需要的所有JavaFX jar放入构建路径中(也许我错过了一些jar?)。 我正在尝试使用以下代码使用JavaFX打开一个窗口: 代码应该没问题,因为它适用于Windows和Linux。 当我运行它时,一个java