You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为NodeJS服务器添加SSL(HTTPS)并改造现有Express代码

将Express服务器切换为HTTPS运行的修改方案

步骤1:准备SSL证书

确保你拥有SSL证书文件:通常包含cert.pem(公钥证书)和key.pem(私钥)。可以通过免费的Let's Encrypt获取生产环境证书,或者用OpenSSL生成自签名证书用于本地测试。将这两个文件放在项目的某个目录下,比如./ssl/。

步骤2:修改代码实现HTTPS服务

以下是修改后的完整代码,关键改动已标注:

const pino = require('pino')
const { Boom } = require('@hapi/boom')
const fs = require('fs')
const chalk = require('chalk')
require('dotenv/config')
const express = require('express')
const socket = require("socket.io");
const { toDataURL } = require('qrcode')
const mysql = require('mysql');
require('dotenv').config();
const request = require('request');
const { smsg } = require('./app_node/lib/myf')
// 新增:引入Node.js内置的https模块
const https = require('https');

const app = express()
const host = process.env.HOST
// 新增:可在.env中配置HTTPS端口,默认用443(HTTPS标准端口)
const httpsPort = parseInt(process.env.HTTPS_PORT) || 443
// 新增:读取SSL证书文件
const sslOptions = {
  cert: fs.readFileSync(process.env.SSL_CERT_PATH || './ssl/cert.pem'),
  key: fs.readFileSync(process.env.SSL_KEY_PATH || './ssl/key.pem')
}

app.use(express.urlencoded({ extended: true }))
app.use(express.json())

// 修改:用https.createServer创建服务器,替代原来的app.listen
const ser = https.createServer(sslOptions, app).listen(httpsPort, host, () => {
    console.log(`Server is listening on https://${host}:${httpsPort}`)
})
// Socket.IO依然依附在HTTPS服务器上,无需额外改动
const io = socket(ser);

补充说明

  • 如果使用自签名证书,浏览器会提示不安全,这是正常现象,仅用于开发测试;生产环境必须使用受信任的CA颁发的证书。
  • 可以把证书路径、HTTPS端口配置在.env文件中:
    HOST=0.0.0.0
    HTTPS_PORT=443
    SSL_CERT_PATH=./ssl/fullchain.pem
    SSL_KEY_PATH=./ssl/privkey.pem
    
  • 如果需要同时支持HTTP和HTTPS,可以保留原来的app.listen()(监听80端口),同时创建HTTPS服务器,不过生产环境建议将HTTP请求重定向到HTTPS。

内容的提问来源于stack exchange,提问作者Dimas Cornellya Agatta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 13:34:38