如何公开访问包含SSL重定向的AWS EC2实例?

问题描述 投票:0回答:2

我有一个NodeExpress服务器运行在EC2实例上,该实例由Elastic Beanstalk维护(单实例无负载均衡器).我正在努力实现一个正确的SSL重定向,并与EC2一起工作。

SSL重定向如下。

const httpsOptions = {
  key: fs.readFileSync('/local/ssl/key.pem'),
  cert: fs.readFileSync('/local/ssl/cert.pem'),
  passphrase: '*****'
}

http.createServer(function (req, res) {
  let httpsHost = req.headers.host.replace('8081', '8443');
  res.writeHead(301, { "Location": "https://" + httpsHost + req.url });
  res.end();
}).listen(8081);

https.createServer(httpsOptions, app).listen(8443)

这在本地工作得很好,但当我部署到EC2实例并尝试访问网站时,我得到的是:

enter image description here

这也是我的入站规则的图片

enter image description here

我的端口配置不正确吗?我不能使用80端口和443端口,因为它需要root权限,我不会用root权限运行我的服务器。

node.js amazon-web-services amazon-ec2 https amazon-elastic-beanstalk
2个回答
1
投票

当我试图通过443端口访问你的主机时,我得到一个响应,这意味着主机可以访问。当我尝试在8443端口访问你的服务器时,我收到 "Connection timed out",这可能是由错误的防火墙(即安全组)设置引起的。

你的服务器实例监听端口8443和8081,但在你的安全组规则中配置了443和80端口。如果你不能像你写的那样使用44380,请编辑入站规则,允许来自84438081端口的流量。


1
投票

通过端口转发解决了这个问题。

检查当前的IP表。

sudo iptables -t nat -L

删除最后一个条目

sudo iptables -t nat -D PREROUTING 1

根据需要设置重定向,在我的案例中。

sudo iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 8443
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8081

这样就可以把所有443的流量都发到8443,把所有80的流量发到8081。

© www.soinside.com 2019 - 2024. All rights reserved.