在 AWS NLB SSL 终止的情况下,请求通常会始终转发到 EC2 实例的 443 端口上。这是由于在 NLB 配置中,目标组中的目标端口设置为 443。要解决这个问题,您需要更新您的 NLB 配置以将目标端口更改为您希望请求转发到的端口。
以下是一个以 Node.js 为例的代码示例,展示了如何通过 NLB 进行 HTTP 和 HTTPS 请求转发:
const http = require('http');
const https = require('https');
const fs = require('fs');
const options = {
key: fs.readFileSync('key.pem'),
cert: fs.readFileSync('cert.pem')
};
const requestHandler = (request, response) => {
let body = [];
request.on('data', (chunk) => {
body.push(chunk);
}).on('end', () => {
body = Buffer.concat(body).toString();
console.log(body);
response.end('Hello Node.js Server!');
});
};
const httpServer = http.createServer(requestHandler);
httpServer.listen(80, (err) => {
if (err) {
return console.log('Error starting HTTP server:', err);
}
console.log('HTTP server is listening on Port 80.');
});
const httpsServer = https.createServer(options, requestHandler);
httpsServer.listen(443, (err) => {
if (err) {
return console.log('Error starting HTTPS server:', err);
}
console.log('HTTPS server is listening on Port 443.');
});
在这个示例中,我们创建了一个 HTTP 和一个 HTTPS 服务器,并将它们分别绑定到端口 80 和 443。当请求发送到 NLB 时,它会根据目标组的配置将请求转发到服务器的相应端口上。
因此,在您的 NLB 配置中将目标端口设置为相应的端口(例如 80 或 8080)即可解决请求一直转发到 443 端口上的问题。