对于小型企业而言,用一台 Linux 服务器同时承载小程序 API 服务和静态企业网站,是性价比极高的方案。核心思路是利用 Nginx 作为反向X_X网关,根据域名或路径将流量智能分发到不同的后端服务。
以下是一套完整、可落地的实施方案:
1. 架构设计逻辑
我们将采用 Nginx + 应用容器/进程 的架构模式:
- 静态资源层:由 Nginx 直接提供(速度快,节省 CPU)。
- API 服务层:由 Node.js/Python/Go 等语言编写的后端程序运行,Nginx 负责转发请求。
- 域名策略:
www.yourdomain.com-> 指向静态网站目录。api.yourdomain.com-> 转发至后端 API 服务端口。- (或者)
yourdomain.com/api/*-> 转发至后端 API 服务端口(适合不想买两个域名的情况,但推荐分离域名以规范 CORS)。
2. 具体实施步骤
第一步:环境准备与基础安装
假设服务器已安装 Ubuntu/CentOS,我们需要安装必要的软件:
# 安装 Nginx (Web 服务器)
sudo apt update && sudo apt install nginx -y
# 安装 Node.js (假设你的后端是 Node.js,如果是 Python 请换 pip)
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt install nodejs -y
# 安装 PM2 (用于管理后端进程,生产环境必备)
sudo npm install -g pm2
第二步:部署静态企业网站
将企业网站的 HTML/CSS/JS 文件上传到服务器的指定目录(例如 /var/www/html):
sudo mkdir -p /var/www/html
sudo cp -r ./dist/* /var/www/html/ # 假设你有一个构建好的 dist 目录
sudo chown -R www-data:www-data /var/www/html
第三步:部署小程序 API 服务
将后端代码上传并启动:
# 创建项目目录
sudo mkdir -p /opt/myapp
cd /opt/myapp
# ... 上传代码 ...
# 使用 PM2 启动服务 (监听 3000 端口)
pm2 start server.js --name api-service
pm2 save
pm2 startup
第四步:配置 Nginx (核心环节)
这是实现“兼顾”的关键。编辑 Nginx 配置文件(通常在 /etc/nginx/sites-available/default 或新建一个文件):
server {
listen 80;
server_name www.yourdomain.com yourdomain.com; # 静态网站域名
root /var/www/html;
index index.html;
# 静态资源优化
location / {
try_files $uri $uri/ =404;
# 可选:开启 gzip 压缩
gzip on;
gzip_types text/plain text/css application/json application/javascript;
}
}
server {
listen 80;
server_name api.yourdomain.com; # API 专用子域名
# 转发给本地运行的 API 服务
location / {
proxy_pass http://127.0.0.1:3000; # 对应 PM2 启动的端口
# 关键配置:传递真实 IP 和 Host 头,防止后端获取不到用户信息
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 处理 WebSocket (如果小程序有长连接需求)
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
# 建议添加超时设置,防止小程序请求过长被切断
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
注意:如果你只有单个域名且不想解析子域名,可以将第二个
server块改为location /api/的路径匹配模式,但为了安全和规范,强烈建议使用子域名。
第五步:测试与生效
- 检查配置语法:
sudo nginx -t - 重载 Nginx:
sudo systemctl reload nginx - 重要:确保防火墙放行了 80 (HTTP) 和 443 (HTTPS) 端口。
sudo ufw allow 'Nginx Full' sudo ufw enable
3. 关键优化与注意事项
A. 强制 HTTPS (必须做)
小程序强制要求接口必须是 HTTPS。你需要申请 SSL 证书并配置 Nginx。推荐使用 Certbot (Let’s Encrypt) 免费自动化管理:
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d www.yourdomain.com -d api.yourdomain.com
Certbot 会自动修改 Nginx 配置并重载,后续证书过期也会自动续期。
B. 性能与安全加固
- CORS 跨域问题:虽然使用了子域名隔离,但前端(小程序)调用
api.xxx.com时,后端代码仍需正确设置Access-Control-Allow-Origin头,或者在 Nginx 中统一配置:add_header Access-Control-Allow-Origin *; # 生产环境建议指定具体域名 - 数据库连接:如果数据库也在同一台机器上,确保只允许
localhost连接,不要开放数据库端口到公网,防止被暴力破解。 - 进程守护:务必使用
PM2或Systemd管理后端服务,一旦服务崩溃能自动重启。
C. 监控与维护
- 日志分析:查看 Nginx 访问日志 (
/var/log/nginx/access.log) 监控流量和错误。 - 资源监控:安装
htop或nmon实时观察 CPU 和内存占用。 - 备份:编写简单的 Shell 脚本,每天自动备份数据库和代码目录到云存储(如 AWS S3 或阿里云 OSS)。
总结
通过 Nginx 反向X_X 将流量按域名拆分,配合 PM2 管理后端进程,你可以在一台低成本服务器上完美实现“静态网站展示 + 小程序高并发 API 支持”。这种方案不仅节省了服务器成本,还简化了运维复杂度,非常适合小型企业起步阶段。
轻量云Cloud