Express Node.js服务如何禁用HTTP并使用ACM证书配置HTTPS
Express集成ACM证书实现仅HTTPS访问方案
1. 导出ACM证书文件
从ACM控制台导出对应域名的PEM格式证书文件,共需要3个文件:
- 站点证书文件,建议命名为
cert.pem - 证书链文件,建议命名为
chain.pem - 私钥文件,建议命名为
privkey.pem,导出时若设置了解密密码请妥善留存
将三个文件存放到Express项目的非公开目录,不要提交到代码仓库,Linux环境下建议给私钥文件设置600权限,仅服务运行用户可读取。
2. 修改Express服务代码
移除原有HTTP服务的监听逻辑,使用Node.js内置https模块加载证书启动服务,参考代码如下:
const express = require('express'); const https = require('https'); const fs = require('fs'); const path = require('path'); const app = express(); // 原有业务路由逻辑保持不变 app.get('/', (req, res) => { res.send('HTTPS服务访问正常'); }); // 加载ACM导出的证书配置 const httpsOptions = { cert: fs.readFileSync(path.join('/绝对路径到证书目录', 'cert.pem')), key: fs.readFileSync(path.join('/绝对路径到证书目录', 'privkey.pem')), ca: fs.readFileSync(path.join('/绝对路径到证书目录', 'chain.pem')), // 若私钥设置了解密密码,补充下行配置 // passphrase: '你的私钥解密密码' }; // 仅启动HTTPS服务,监听标准HTTPS端口443 const HTTPS_PORT = 443; https.createServer(httpsOptions, app).listen(HTTPS_PORT, () => { console.log(`HTTPS服务已启动,监听端口${HTTPS_PORT}`); }); // 注释或删除原有HTTP服务的启动代码,彻底禁用HTTP入口 // const http = require('http'); // http.createServer(app).listen(80, () => { // console.log('HTTP服务已停用') // })
3. 配置ACM自动续期同步
因为你已启用ACM自动证书管理,证书到期前会自动完成续期,你需要配置自动化脚本,将续期后的新证书、私钥同步到Node服务所在服务器的对应目录,然后重启Node服务加载新证书即可,避免证书过期导致服务异常。
验证效果
服务启动后,测试HTTP 80端口无法访问,HTTPS 443端口可正常访问,且浏览器地址栏显示安全锁标识即为配置成功。
内容的提问来源于stack exchange,提问作者Nabs
相关产品推荐
相关产品推荐

