在云服务器部署小程序(通常指微信小程序的 Web 端或 H5 版本)时,Nginx 和 Node.js 的典型架构是:Node.js 作为应用服务器运行后端逻辑/SSR,Nginx 作为反向X_X处理静态资源、HTTPS 和负载均衡。以下是标准配置步骤:
一、整体架构说明
用户请求 → Nginx (443/80)
├─ 静态资源(/static, /images)→ 直接返回
└─ API/动态页面(/api/*, /*)→ 转发至 Node.js (如 localhost:3000)
✅ 推荐实践:
- Nginx 负责 HTTPS、Gzip 压缩、缓存策略、限流等
- Node.js 只专注业务逻辑(Express/Koa/NestJS 等)
二、Node.js 服务配置示例(以 Express 为例)
1. server.js 基础代码
const express = require('express');
const app = express();
const port = 3000; // 内网端口,不对外暴露
// 中间件
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
// 健康检查接口(可选)
app.get('/health', (req, res) => {
res.json({ status: 'ok' });
});
// 所有其他路由由 Nginx 转发过来
app.get('*', (req, res) => {
// SSR 渲染或 API 响应
res.send('<h1>Hello from Node.js</h1>');
});
app.listen(port, '127.0.0.1', () => {
console.log(`Node.js server running on http://127.0.0.1:${port}`);
});
⚠️ 注意:绑定
127.0.0.1确保只允许本地访问,防止 Node.js 被公网直接扫描攻击。
2. 使用 PM2 管理进程(生产环境必备)
npm install -g pm2
pm2 start server.js --name mini-app
pm2 save
pm2 startup # 生成开机自启命令(按提示执行)
验证:
pm2 list
curl http://127.0.0.1:3000/health
三、Nginx 配置示例(/etc/nginx/sites-available/mini-app.conf)
# 启用 HTTPS(需先申请证书,见下文)
server {
listen 443 ssl http2;
server_name your-domain.com www.your-domain.com;
# SSL 证书路径(Let's Encrypt 示例)
ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
# 安全增强
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
# 日志
access_log /var/log/nginx/mini-app-access.log;
error_log /var/log/nginx/mini-app-error.log;
# 静态资源(前端构建产物,如 build/ 目录)
location / {
root /var/www/mini-app/build;
try_files $uri $uri/ /index.html; # SPA 路由支持
expires 1d;
add_header Cache-Control "public, no-transform";
}
# API 接口转发到 Node.js
location /api/ {
proxy_pass http://127.0.0.1:3000/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_cache_bypass $http_upgrade;
proxy_connect_timeout 60s;
proxy_read_timeout 60s;
}
# 可选:WebSocket 支持(若小程序用 WebSocket)
location /ws/ {
proxy_pass http://127.0.0.1:3000/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
}
# 拒绝访问敏感文件
location ~ /. {
deny all;
}
}
# HTTP → HTTPS 重定向
server {
listen 80;
server_name your-domain.com www.your-domain.com;
return 301 https://$server_name$request_uri;
}
启用配置并重启 Nginx
sudo nginx -t # 测试配置语法
sudo ln -s /etc/nginx/sites-available/mini-app.conf /etc/nginx/sites-enabled/
sudo systemctl restart nginx
四、SSL 证书申请(Let’s Encrypt 免费方案)
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d your-domain.com -d www.yer-domain.com
# 自动配置并重载 Nginx
✅ 自动续期已内置(通过 cron),无需手动操作。
五、小程序特殊注意事项
| 项目 | 建议 |
|---|---|
| 微信域名备案 | 小程序后台需填写已备案的域名(国内服务器必须 ICP 备案) |
| HTTPS 强制 | 微信要求所有请求必须走 HTTPS |
| CORS 跨域 | 若前后端分离,Node.js 需设置 CORS(但 Nginx X_X后通常不需要) |
| 微信登录回调 | redirect_uri 需为 https://your-domain.com/callback 且域名与小程序一致 |
| 静态资源 CDN | 可将 /static 等目录接入阿里云 OSS + CDN 提速 |
六、故障排查清单
- ❓ Node.js 未启动?→
pm2 logs mini-app - ❌ Nginx 返回 502?→ 检查 Node.js 是否监听正确 IP/端口
- 🔒 HTTPS 报错?→
openssl s_client -connect your-domain.com:443 - 🐞 路由跳转 404?→ 确认
try_files $uri $uri/ /index.html存在 - 📉 性能差?→ 开启 Nginx Gzip:
gzip on; gzip_types text/plain application/json application/javascript text/css; gzip_min_length 1000;
需要我提供:
- Docker 化部署方案(Docker Compose 一键部署)
- 配合 Vue/React 前端的完整 CI/CD 流程
- 微信登录 OAuth2 对接示例代码?
欢迎告诉我你的技术栈(如 Next.js / Nuxt / 原生 H5),我可定制更精准的配置。
云服务器