在 CentOS 上配置 Node.js 应用程序的 SSL 证书,可以按照以下步骤进行操作。本文将介绍如何获取 SSL 证书(使用 Let’s Encrypt 是一种常见且免费的选择),以及如何在 Node.js 应用中配置 HTTPS 服务器。
更新系统包
首先,确保你的 CentOS 系统是最新的:
sudo yum update -y
安装 Node.js
CentOS 默认的软件仓库中的 Node.js 版本可能较旧,建议使用 NodeSource 提供的安装脚本安装最新版本的 Node.js。
例如,安装 Node.js 16.x:
curl -sL https://rpm.nodesource.com/setup_16.x | sudo bash -
sudo yum install -y nodejs
验证安装:
node -v
npm -v
安装 Certbot
Certbot 是一个用于获取和管理 Let’s Encrypt 证书的工具。
sudo yum install epel-release -y
sudo yum install certbot python3-certbot-nginx -y
注意:如果你使用的是其他 web 服务器(如 Apache),请安装相应的 Certbot 插件,例如
python3-certbot-apache
。
假设你使用的是 Nginx 作为反向代理来处理 HTTPS 请求,并将流量转发到 Node.js 应用。
配置 Nginx 反向代理
编辑 Nginx 配置文件,通常位于 /etc/nginx/nginx.conf
或 /etc/nginx/conf.d/default.conf
。
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
location / {
proxy_pass http://localhost:3000; # Node.js 应用监听的端口
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
保存并退出编辑器,然后测试 Nginx 配置:
sudo nginx -t
如果配置正确,重新加载 Nginx:
sudo systemctl reload nginx
获取证书
使用 Certbot 获取 SSL 证书:
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
Certbot 会自动配置 Nginx 并请求证书。按照提示操作,通常需要输入邮箱地址,并选择是否设置自动续期。
验证证书
确保证书已正确安装:
sudo openssl s_client -connect yourdomain.com:443 -servername yourdomain.com
检查输出中是否有 Verify return code: 0 (OK)
,表示证书有效。
在你的 Node.js 应用中,添加 HTTPS 服务器的代码。以下是一个简单的示例:
const https = require('https');
const fs = require('fs');
const express = require('express');
const app = express();
// 读取 SSL 证书文件
const options = {
key: fs.readFileSync('/etc/letsencrypt/live/yourdomain.com/privkey.pem'),
cert: fs.readFileSync('/etc/letsencrypt/live/yourdomain.com/fullchain.pem')
};
// 定义路由
app.get('/', (req, res) => {
res.send('Hello, HTTPS!');
});
// 启动 HTTPS 服务器
https.createServer(options, app).listen(3000, () => {
console.log('HTTPS Server running on port 3000');
});
注意:确保 Node.js 应用监听的端口(如 3000)与 Nginx 配置中的
proxy_pass
一致。
Certbot 会自动为 Let’s Encrypt 证书设置续期任务。你可以手动测试续期过程:
sudo certbot renew --dry-run
如果没有问题,Certbot 会自动续期证书。确保系统的 cron 任务或 systemd 定时任务中包含 Certbot 的续期脚本。
为了更好地管理 Node.js 应用,可以使用 PM2。
安装 PM2
sudo npm install pm2 -g
启动 Node.js 应用
pm2 start app.js --name myapp
设置 PM2 开机自启
pm2 startup
保存当前进程列表
pm2 save
通过以上步骤,你可以在 CentOS 上成功配置 Node.js 应用的 SSL 证书,并确保其通过 HTTPS 安全地提供服务。使用 Certbot 获取和管理证书简化了整个过程,而 Nginx 作为反向代理则提高了性能和安全性。如果有任何问题,请检查相关服务的日志文件以获取更多信息。