[英]Listen for HTTPS requests to port 3000 on EC2 for nodejs express app
我有一个 nodejs 应用程序,它使用 express 来监听 3000 次请求,如下所示:
var express = require('express');
var app = express();
app.listen(3000, function () {
console.log('Running on port 3000')
});
当我使用 ngrok 在本地运行服务器时,这适用于 HTTPS 请求。 但是在 EC2 上运行 nodejs 应用程序时,我无法通过 HTTPS 访问此端口。 我的实例设置的安全组如下:
我可以在普通 HTTP 上访问端口 3000,但不能在 HTTPS 上访问端口,有人知道我哪里出错了吗?
MattTheHack,默认情况下,我相信 Express 通过 HTTP 服务器进行侦听。 您可以在这里做两件事,第一件事是将您的 node express 应用程序部署为 HTTPS 服务器,这需要正确的密钥才能进行设置。
类似于以下内容:
var express = require('express')
var fs = require('fs')
var https = require('https')
var app = express()
app.get('/', function (req, res) {
res.send('hello world')
})
https.createServer({
key: fs.readFileSync('server.key'),
cert: fs.readFileSync('server.cert')
}, app)
.listen(3000, function () {
console.log('Example app listening on port 3000! Go to https://localhost:3000/')
})
这不是真正推荐的,因为节点正在解密所有 HTTPS 流量。
推荐的解决方案是将 NGINX 或其他一些路由工具也放在服务器上。 然后,您可以将 NGINX 视为代理并允许 NGINX 为您进行解密。 您的节点应用程序仍然可以作为 HTTP 服务器侦听端口 3000,而 NGINX 只是将 HTTPS 端口 443 流量重定向到 localhost:3000
配置文件
http {
server {
listen 443 ssl;
ssl_certificate "PATH_TO_CERT";
ssl_certificate_key "PATH_TO_CERT_KEY";
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
}
我肯定会推荐第二种方法! 祝你好运!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.