奋斗
努力

云服务器部署小程序时Nginx和Node.js应该如何配置?

云计算

在云服务器部署小程序(通常指微信小程序的 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),我可定制更精准的配置。

未经允许不得转载:云服务器 » 云服务器部署小程序时Nginx和Node.js应该如何配置?