一旦您有了证书文件,就没有那么难了。你甚至可以在没有 Nginx 的情况下做到这一点。
让我们首先创建一个快速网络服务器
const app = express();
例如,您可以将静态网站放在文件夹中。
const wwwFolder = express.static(path.join(__dirname, '/../www'));
app.use(wwwFolder);
接下来,y你基本上需要阅读你的证书文件
const key = readFileSync(__dirname + '/ssl/privkey.pem', 'utf8');
const cert = readFileSync(__dirname + '/ssl/cert.pem', 'utf8');
const ca = readFileSync(__dirname + '/ssl/chain.pem', 'utf8');
const serverOptions: https.ServerOptions = { key, cert, ca };
最后,您使用这些证书创建一个 https 服务器。
const server = https.createServer(serverOptions, app);
server.listen(httpsPort, () => log.debug("createWebServers", `server is listening on port ${httpsPort}`));
出于安全原因,可能无法直接在端口 443 上侦听。相反,例如使用 4201 之类的端口,然后使用端口转发。
如果您使用 systemd 启动/停止您的服务,则可以在您的服务配置文件中定义此端口转发。一个简单的解决方案:
[Unit]
Description=my.service
After=network.target
[Service]
Type=simple
TimeoutSec=0
User=ubuntu
PermissionsStartOnly=true
ExecStartPre=/sbin/iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 4201
ExecStart=/usr/local/bin/node /home/ubuntu/project/server.js
ExecStopPost=/sbin/iptables -t nat -D PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 4201
Restart=on-failure
[Install]
WantedBy=multi-user.target
有多种方法可以创建和刷新您的证书文件。所以,我不会在这里详细介绍。但最重要的是,您不需要亚马逊证书来完成它。 LetsEncrypt 既免费又简单,而且运行良好。
通常我还会添加一个 http 服务器(没有 HTTPS)并应用重定向。然后我也为此使用端口转发。所以,我在服务文件中添加了第二个端口转发规则。