是否可以运行EC2实例,在没有port 443
的情况下在load balancer
上进行聆听?我现在正在我的Node.JS
应用中尝试,但是当我使用https://
调用页面时,它无效。但是,如果我将其设置为port 80
,则http://
一切正常。
我之前使用load balancer
和route53
工作了,但我不想再为ELB支付18美元/月,特别是当我只有一台服务器正在运行时。
感谢您的帮助
答案 0 :(得分:8)
有可能吗?当然是。听起来你在ELB上安装了SSL证书,现在你已经删除了ELB。您现在必须在EC2服务器上安装SSL证书。没有ELB或CloudFront分配,您无法使用AWS ACM SSL证书。如果您不想为这些服务付费,您必须在其他地方获得SSL证书。
答案 1 :(得分:6)
你是对的,如果它只是一个实例而你觉得你不需要为大量的流量增加做好准备,你就不应该付钱ELB。
从高级别的角度来看,您必须完成以下步骤:
答案 2 :(得分:0)
在我们的项目中,我们使用:
这个东西正在t2.medium实例上运行。
您对在项目中使用nginx有何看法?
答案 3 :(得分:0)
一旦你有了证书文件,就没有那么难了。你甚至可以在没有 Nginx 的情况下做到这一点。
让我们首先创建一个快速的网络服务器
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
有多种方法可以创建和刷新您的证书文件。所以,我不会在这里详细介绍。但最重要的是,您不需要亚马逊证书来完成它。 LetsEncrypt 免费且简单,而且运行良好。
通常我还会添加一个 http 服务器(没有 HTTPS)并应用重定向。然后我也为此使用端口转发。所以,我在服务文件中添加了第二个端口转发规则。