Node.js 不带负载平衡器的EC2实例上的AWS SSL-NodeJS
在没有负载平衡器的情况下,是否可以让EC2实例在Node.js 不带负载平衡器的EC2实例上的AWS SSL-NodeJS,node.js,amazon-web-services,ssl,amazon-ec2,Node.js,Amazon Web Services,Ssl,Amazon Ec2,在没有负载平衡器的情况下,是否可以让EC2实例在端口443上运行、侦听?我现在正在我的Node.JS应用程序中尝试,但是当我使用https://调用页面时,它不起作用。但是,如果我将其设置为端口80,那么http://一切都可以正常工作 我之前使用的是负载平衡器和路由53,但我不想再为ELB支付18美元/月,尤其是当我只有一台服务器在运行时 谢谢你的帮助可能吗?当然可以。听起来您在ELB上安装了SSL证书,现在您已经删除了ELB。您现在必须在EC2服务器上安装SSL证书。如果没有ELB或Clou
端口443
上运行、侦听?我现在正在我的Node.JS
应用程序中尝试,但是当我使用https://
调用页面时,它不起作用。但是,如果我将其设置为端口80
,那么http://
一切都可以正常工作
我之前使用的是负载平衡器
和路由53
,但我不想再为ELB支付18美元/月,尤其是当我只有一台服务器在运行时
谢谢你的帮助可能吗?当然可以。听起来您在ELB上安装了SSL证书,现在您已经删除了ELB。您现在必须在EC2服务器上安装SSL证书。如果没有ELB或CloudFront发行版,则无法使用AWS ACM SSL证书。如果您不想为这两项服务付费,您必须在其他地方获得SSL证书。您是对的,如果这只是一个实例,并且您觉得不需要为流量的大幅增加做好准备,那么您不应该为ELB付费 从高层次的角度来看,您必须经历以下步骤:
这个设置对我们来说非常有效。在这个设置中,我们可以在不使用amazon负载平衡器的情况下设置SSL 一旦你有了证书文件,就不那么难了。您甚至可以在没有Nginx的情况下完成此操作 让我们首先创建一个express Web服务器
const app = express();
例如,您可以将静态网站放在文件夹中
const wwwFolder = express.static(path.join(__dirname, '/../www'));
app.use(wwwFolder);
接下来,你基本上需要读取你的证书文件
const key = readFileSync(__dirname + '/ssl/privkey.pem', 'utf8');
const cert = readFileSync(__dirname + '/ssl/cert.pem', 'utf8');
const ca = readFileSync(__dirname + '/ssl/chain.pem', 'utf8');
const serverOptions: https.ServerOptions = { key, cert, ca };
最后,使用这些证书创建https服务器
const server = https.createServer(serverOptions, app);
server.listen(httpsPort, () => log.debug("createWebServers", `server is listening on port ${httpsPort}`));
出于安全原因,可能无法直接在端口443上侦听。例如,使用类似4201的端口,然后使用端口转发
如果使用systemd启动/停止服务,则可以在服务配置文件中定义此端口转发。一个简单的解决方案:
[Unit]
Description=my.service
After=network.target
[Service]
Type=simple
TimeoutSec=0
User=ubuntu
PermissionsStartOnly=true
ExecStartPre=/sbin/iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 4201
ExecStart=/usr/local/bin/node /home/ubuntu/project/server.js
ExecStopPost=/sbin/iptables -t nat -D PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 4201
Restart=on-failure
[Install]
WantedBy=multi-user.target
有多种方法可以创建和刷新证书文件。所以,我不会在这里详细讨论这个问题。但最重要的是,您不需要amazon证书来完成它。LetsEncrypt免费、简单,工作良好
通常我还会添加一个http服务器(不带HTTPS)并应用重定向。然后我也使用端口转发来实现这一点。因此,我在服务文件中添加了第二个端口转发规则。我有一个来自Name便宜的SSL证书,它被上传到IAM中。当我设置ELB时,我只会选择使用来自IAM的现有SSL证书。如何在EC2上安装它?我需要SSH吗@MarkBYes,您必须使用SSH连接到服务器并手动安装证书。在这种情况下,您将无法使用IAM管理证书。只有一个问题。当您谈到“您的SSL证书”时,您是指亚马逊证书吗是否可以为此使用amazon证书一些消息来源声称amazon证书只能用于AWS负载平衡器,AWS cloudfrontAWS证书管理器可以生成公共和私人证书。对公共证书进行签名,以便它们可以由客户端(如标准浏览器)进行公开验证。但是不能导出AWS公共证书。它们只能绑定到其他AWS服务(负载平衡器等)。AWS生成的私人证书可以导出,但不能公开签名。因此,您可以在客户端和服务器代码中手动安装它们以实现安全通信,但浏览器将无法验证它们。更多细节可以在这里找到:只想补充一下。当我们加密更新时,它会通过端口80进行更新。所以你也必须保持端口80打开。但是你使用AWS证书了吗?或者你是从第三方那里得到的?第三方。我们使用letsencrypt.org