如何使用域和SSL在AWS上设置Node.js应用程序

时间:2017-11-26 19:37:57

标签: amazon-web-services amazon-ec2 amazon-cloudfront devops

如果我在错误的类别中发布此内容,请原谅。

我在端口3000上的EC2实例上运行了node.js应用程序。

使用我的域设置https的最佳方法是什么,以便用户访问时 https://www.my-domain.com他们实际上正在点击my-ec2-instance.com:3000

我实际上最终将客户端放在了cloudfront上,而cloudfront管理员使用我的域设置了SSL,所以当我转到https://my-domain.com时,客户端服务很好,但是我无法向我的服务器发出http请求EC2实例因为起源不同。浏览器会阻止http请求。

我也试过让节点服务器交付我的客户端,你可以在这里看到它:http://34.223.222.234:3020/

然后我设置Route53重新路由到IP地址,你可以在这里看到它: http://myonlinetesting.com:3020/

但是Route53不允许我添加端口号作为IP的一部分来重新路由到。最重要的是,我仍然需要设置SSL,以便用户可以转到https://myonlinetesting.com。我还需要将http流量重新路由到https,以便用户始终使用https。

根据您的经验,完成这样的Web应用程序设置的最佳方法是什么?您是否为客户端提供cloundfront服务并在EC2实例上托管服务器?或者你只是在中间有一个负载均衡器,这样你就可以完成SSL?当您不需要负载均衡器时,这似乎是浪费资源。或者您的应用程序是否在EC2实例上运行,并且当用户转到https://yourdomain.com时,能够以某种方式将流量路由到your-ec2-instace.com:3000?

我在不知道最好的方法是什么的情况下朝不同方向拉我的头。任何反馈将不胜感激。

2 个答案:

答案 0 :(得分:0)

您无法将域名指向特定端口。域名指向整个服务器,而不是该服务器上的特定端口。默认HTTP端口为80,默认HTTPS端口为443。因此,如果您希望用户能够访问您的网站而无需指定3020这样的端口号,那么您需要将您的网站配置为在默认的HTTP / HTTPS端口上运行。或者将操作系统配置为将这些默认端口转发到应用程序实际运行的端口(例如,通过iptables)。

对于SSL,由于您没有使用负载均衡器或CDN,因此您需要直接在服务器上安装SSL证书。您可以使用Let's Encrypt免费执行此操作。

答案 1 :(得分:0)

希望这会有所帮助:

<VirtualHost *:80>
    ServerName yourdomain.com

    <Location "/">
        ProxyPreserveHost On
        ProxyPass http://localhost:3000/
        ProxyPassReverse http://localhost:3000/
    </Location>
</VirtualHost> 

考虑nodejs app正在端口3000上运行