我使用express nodejs模块来创建应用程序服务器。该应用程序可通过https和http访问
我想阻止http端点。
我已启用自动证书管理。我的问题是,如果我想使用通过acm生成的证书,我如何在我的nodejs代码中使用密钥和证书。
您可以创建一个HTTPS服务器,并像这样传递私钥和证书:
const fs = require('fs');
const https = require('https');
const express = require('express');
const app = express();
const options = {
key: fs.readFileSync('path/to/key', 'utf8'),
cert: fs.readFileSync('path/to/cert', 'utf8'),
};
const httpsServer = https.createServer(options, app);
httpsServer.listen(8443);
如果你根本不想响应HTTP请求,那就不要创建HTTP服务器。如果您想将用户转发到HTTPS,您可以添加这样的内容:
const http = require('http');
app.use('*', (req, res, next) => {
if (!req.secure) {
const [ host ] = req.headers.host.split(':');
return res.redirect(`https://${host}:8443${req.url}`);
}
return next();
});
const httpServer = http.createServer(app);
httpServer.listen(8000);
或者您可以在反向代理级别处理此问题。例如:对于Nginx:
server {
listen 80 default_server;
server_name _;
return 301 https://$host$request_uri;
}
}