我有一个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实例并尝试访问网站时,我得到的是:
这也是我的入站规则的图片
我的端口配置不正确吗?我不能使用80端口和443端口,因为它需要root权限,我不会用root权限运行我的服务器。
当我试图通过443端口访问你的主机时,我得到一个响应,这意味着主机可以访问。当我尝试在8443端口访问你的服务器时,我收到 "Connection timed out",这可能是由错误的防火墙(即安全组)设置引起的。
你的服务器实例监听端口8443和8081,但在你的安全组规则中配置了443和80端口。如果你不能像你写的那样使用44380,请编辑入站规则,允许来自84438081端口的流量。
通过端口转发解决了这个问题。
检查当前的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。