一、环境准备与工具链选择
1.1 服务器基础环境
生产环境建议选择Linux系统(如Ubuntu LTS版本),需预先安装以下组件:
- Web服务器:Nginx(支持反向代理、负载均衡及静态资源加速)
- 运行时环境:
- Node.js(配合PM2进程管理)
- JDK(针对Java Spring Boot应用)
- 依赖管理:Git(代码版本控制)、Certbot(SSL证书自动化)
1.2 云安全防护层
注册主流云服务商的CDN加速服务(如某云厂商的全球加速网络),可获得:
- 免费SSL证书(自动续期)
- DDoS防护基础版
- Web应用防火墙(WAF)规则集
- 全球节点缓存加速
二、前端工程化部署流程
2.1 构建优化与文件处理
以Vue/React项目为例,执行标准化构建流程:
# Vue CLI项目构建npm run build -- --modern --report# React Create App构建PUBLIC_URL=/ react-scripts build
关键优化点:
- 启用现代模式构建(兼容新旧浏览器)
- 生成构建分析报告(webpack-bundle-analyzer)
- 配置.env文件区分开发/生产环境变量
2.2 文件传输与目录规划
推荐使用rsync替代scp实现增量同步:
rsync -avz --delete dist/ user@server:/var/www/html/
目录结构设计建议:
/var/www/├── html/ # 前端静态资源├── admin/ # 管理后台├── api/ # 后端服务(通过Nginx代理)└── exports/ # 文件导出接口
2.3 Nginx静态资源配置
核心配置示例:
server {listen 80;server_name example.com;# 前端路由支持(SPA应用必备)location / {try_files $uri $uri/ /index.html;expires 1h;add_header Cache-Control "public";}# 资源文件缓存策略location ~* \.(js|css|png|jpg|svg)$ {expires 7d;access_log off;}# 禁止访问敏感文件location ~ /(\.git|\.env|config\.json) {deny all;return 403;}}
三、后端服务部署方案
3.1 Node.js服务管理
使用PM2实现进程守护:
# 安装与初始化npm install -g pm2pm2 ecosystem # 生成配置文件# 启动应用(推荐使用cluster模式)pm2 start app.js -i max --name "api-service"# 开机自启配置pm2 startuppm2 save
关键配置参数:
-i max:根据CPU核心数自动扩展实例--name:指定服务名称便于管理--log:自定义日志文件路径
3.2 Java Spring Boot部署
生产环境推荐方案:
# 使用systemd管理(优于nohup)cat > /etc/systemd/system/springboot.service <<EOF[Unit]Description=Spring Boot ApplicationAfter=syslog.target network.target[Service]User=appuserWorkingDirectory=/opt/appExecStart=/usr/bin/java -jar /opt/app/app.jarSuccessExitStatus=143Restart=always[Install]WantedBy=multi-user.targetEOF# 启用服务systemctl daemon-reloadsystemctl start springbootsystemctl enable springboot
3.3 多服务协同架构
典型部署拓扑:
客户端 → CDN节点 → Nginx(SSL终止) →├── 前端静态资源└── /api/ → Node.js集群└── /admin/ → Java服务
四、Nginx高级配置实践
4.1 API网关配置
upstream node_backend {server 127.0.0.1:3001 weight=5;server 127.0.0.1:3002 weight=5;keepalive 32;}server {listen 443 ssl;server_name api.example.com;ssl_certificate /path/to/fullchain.pem;ssl_certificate_key /path/to/privkey.pem;location / {proxy_pass http://node_backend;proxy_http_version 1.1;proxy_set_header Connection "";# 超时设置proxy_connect_timeout 60s;proxy_read_timeout 60s;proxy_send_timeout 60s;# 缓冲区配置proxy_buffer_size 4k;proxy_buffers 8 16k;}}
4.2 WebSocket支持
location /ws/ {proxy_pass http://backend;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";proxy_set_header Host $host;}
4.3 安全防护配置
# 基础安全头add_header X-Frame-Options "SAMEORIGIN";add_header X-Content-Type-Options "nosniff";add_header X-XSS-Protection "1; mode=block";# 限制请求方法if ($request_method !~ ^(GET|HEAD|POST|OPTIONS)$) {return 405;}# 防SQL注入location ~* (union|select|insert|delete|update|drop) {return 403;}
五、云防护层配置要点
5.1 CDN加速设置
- 开启HTTP/2支持
- 配置智能路由(根据地域选择最优节点)
- 设置缓存规则:
- 静态资源:7天
- HTML文件:1小时
- API响应:不缓存
5.2 WAF防护规则
建议启用以下规则组:
- SQL注入防护
- XSS跨站脚本防护
- 路径遍历防护
- 非法文件上传检测
- CC攻击防护(速率限制)
5.3 监控告警设置
通过日志服务实现:
- Nginx访问日志分析
- 后端服务错误日志监控
- 异常请求模式检测
- 设置阈值告警(如5xx错误率突增)
六、部署自动化实践
6.1 CI/CD流水线示例
# GitLab CI配置示例stages:- build- deploybuild_frontend:stage: buildscript:- npm install- npm run buildartifacts:paths:- dist/deploy_production:stage: deployscript:- rsync -avz dist/ user@server:/var/www/html/- ssh user@server "pm2 restart api-service"only:- main
6.2 配置管理方案
推荐使用Ansible进行批量管理:
# playbook示例- hosts: webserverstasks:- name: Ensure Nginx is installedapt: name=nginx state=present- name: Deploy Nginx configtemplate:src: templates/nginx.conf.j2dest: /etc/nginx/sites-available/example.comnotify: Reload Nginxhandlers:- name: Reload Nginxservice: name=nginx state=reloaded
七、常见问题排查
7.1 502 Bad Gateway
可能原因:
- 后端服务未启动
- 端口配置错误
- 防火墙拦截
- 进程崩溃(查看PM2/systemd日志)
7.2 静态资源404
检查要点:
- Nginx root路径配置
- 文件权限设置(建议755目录/644文件)
- URL重写规则冲突
7.3 跨域问题
完整CORS配置示例:
location /api/ {if ($request_method = 'OPTIONS') {add_header 'Access-Control-Allow-Origin' '*';add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization';add_header 'Access-Control-Max-Age' 1728000;return 204;}add_header 'Access-Control-Allow-Origin' '*';add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization';proxy_pass http://backend;}
通过本文的完整方案,开发者可以构建出具备高可用性、安全性和性能优化的生产环境。建议根据实际业务规模调整配置参数,并定期进行安全审计和性能优化。对于大型项目,可考虑引入Kubernetes进行容器化部署,进一步提升运维效率。