如何在 Node.js 中开启 HTTPS 服务器?
介绍如何在 Node.js 中配置和启动一个 HTTPS 服务器。
要在 Node.js 中开启 HTTPS 服务器,主要方法包括使用内置模块、第三方库或其他工具。下面从面试角度提供完整实现步䠀。
一、使用内置 https 模块(推荐做法)
这种方式直接利用 Node.js 的核心功能。
- 生成自签名密钥和证书
使用 OpenSSL 工具创建私钥和证书文件:
openssl genrsa -out server.key 2048 openssl req -new -key server.key -out server.csr openssl x509 -req -sha256 -days 365 -in server.csr -signkey server.key -out server.crt
这将生成
server.key
(私钥)和server.crt
(证书)文件。 - 在 Node.js 脚本中启用 HTTPS
使用
https.createServer()
创建服务器。需传入密钥和证书选项:const https = require('https'); const fs = require('fs'); const options = { key: fs.readFileSync('server.key'), // 加载私钥 cert: fs.readFileSync('server.crt') // 加载证书 }; const server = https.createServer(options, (req, res) => { res.writeHead(200, { 'Content-Type': 'text/html' }); res.end('<h1>HTTPS Server Running</h1>'); }); server.listen(443, () => { console.log('Server is running on https://localhost:443'); });
关键点:
options
对象中包含文件路径,默认为当前目录,可扩展至端口定制。
二、配合 Express 框架
若使用 Express,可以封装内置 HTTPS:
- 安装依赖
先安装 Express:
npm install express
- 实现步骤
在 app.js 或入口文件中:
const express = require('express'); const https = require('https'); const fs = require('fs'); const app = express(); app.get('/', (req, res) => { res.send('Hello from Express HTTPS server'); }); const httpsServer = https.createServer( { key: fs.readFileSync('server.key'), cert: fs.readFileSync('server.crt') }, app ); httpsServer.listen(443);
这个方法保持路由设置简便,但须确保正确导入 SSL 文件。
三、使用第三方工具快速启动
对本地开发,工具有效简化过程:
- http-server 命令行工具
- 全局安装:
npm install http-server -g
- 启动 HTTPS:
http-server -S
(自动生成证书) 或http-server -S -C cert.pem -K key.pem
(指定证书)。这会启用浏览器可访问的 HTTPS 服务。
- 全局安装:
- local-ssl-proxy 更简单方案
- 全局安装:
npm install -g local-ssl-proxy
- 运行:
local-ssl-proxy --source 8443 --target 8080
(示例端口映射)。无需手动证书。
- 全局安装:
四、其他注意事项
- 证书生效:自签名证书会被浏览器警告,点击忽略,或使用信任机构颁发的证书。
- 端口选择:系统权限需求导致默认端口443(HTTPS)需要 admin/sudo;改用8443或8000避免。
- 框架扩展法:如使用 Rejoice,配置在
rejoice.server.https
选项中。