用户要在 Node.js 应用中使用内置的 `https` 模块配置 HTTPS 服务,你需要准备好SSL证书文件(通常为私钥 `.key` 和证书 `.crt` 或 `.pem`),然后在创建服务器时加载它们。
下面举一个一个基本的示例:
javascript
const https = require('https');
const fs = require('fs');
const express = require('express'); // 可选,也可以直接用原生 http 处理
// 读取证书文件
const options = {
key: fs.readFileSync('/path/to/your/private.key'),
cert: fs.readFileSync('/path/to/your/certificate.crt'),
// 如果证书由中间 CA 签发,可能需要 ca 选项
// ca: fs.readFileSync('/path/to/ca-bundle.crt'),
// 如果私钥有密码,提供 passphrase
// passphrase: 'your_password'
};
// 创建 HTTPS 服务器
const app = express(); // 或者使用原生请求处理函数
app.get('/', (req, res) => {
res.send('Hello HTTPS!');
});
const server = https.createServer(options, app);
server.listen(443, () => {
console.log('HTTPS server running on port 443');
});
如果你不想使用 Express,可以直接传递请求处理函数:
javascript
const server = https.createServer(options, (req, res) => {
res.writeHead(200);
res.end('Hello Secure World\n');
});
重要说明:
1. 证书路径:确保 `fs.readFileSync` 中的路径正确,并且 Node.js 进程有读取权限。
2. 端口:通常 HTTPS 默认端口是 443,但在开发环境或非 root 用户下你可能需要使用 8443 等大于 1024 的端口。
3. 自签名证书:开发时可以生成自签名证书,但浏览器会提示不安全。生产环境请使用正规 CA 签发的SSL证书(如 Let's Encrypt)。
4. 性能:`fs.readFileSync` 是同步读取,只在启动时执行一次,不影响后续请求性能。
5. SNI:如需支持多个域名使用不同证书,可以查看 `tls.createSecureContext` 和 SNI 回调。
用户通过以上步骤,你就可以用 `https` 模块为 Node.js 应用启用 HTTPS 了。