为何部署在Elastic Beanstalk的NodeJS服务器在80端口接收HTTPS流量?
为什么你的Node.js服务器能响应HTTPS流量?
这其实是**Elastic Beanstalk的Classic Load Balancer(CLB)**在幕后帮你搞定了HTTPS的加密解密工作,你的Node.js服务器本身确实只处理HTTP流量,但整个请求链路是这样运作的:
- 外部用户发起HTTPS请求到你的CLB的443端口
- CLB先完成SSL/TLS握手,把加密的HTTPS流量解密成普通HTTP流量
- CLB再把解密后的HTTP请求转发到你部署在EC2实例上的Node.js服务器(监听80端口)
- 你的服务器处理HTTP请求后,把响应返回给CLB
- CLB再把响应重新加密成HTTPS格式,返回给用户
所以从用户的角度看,整个连接是HTTPS的,但你的服务器全程只和HTTP流量打交道~
另外补充两个小细节:
- Elastic Beanstalk在配置CLB时,默认会帮你设置好HTTPS监听规则(只要你提供了有效的SSL证书,比如AWS Certificate Manager里的免费证书),自动完成443到后端HTTP端口的转发。
- 你的代码里有个小不一致:服务器监听的是80端口,但控制台输出的是
http://127.0.0.1:8081/,不过这不影响Beanstalk的部署,它会自动检测你的应用实际监听的端口并调整转发配置。
附上你的代码:
var http = require("http"); http.createServer(function (request, response) { response.writeHead(200, {'Content-Type': 'text/plain'}); response.end('Hello World\n'); }).listen(80); console.log('Server running at http://127.0.0.1:8081/');
内容的提问来源于stack exchange,提问作者CodyBugstein
相关产品推荐
相关产品推荐

