一、环境准备与架构规划
1.1 基础环境要求
- 服务器配置:推荐2核4G以上云服务器,安装CentOS 8/Ubuntu 22.04 LTS系统
- 运行时环境:
- Node.js(建议LTS版本)+ PM2进程管理
- JDK 11+(针对Java Spring Boot应用)
- Nginx 1.18+(需包含http_ssl_module)
- 域名与安全:注册域名并配置DNS解析,准备SSL证书(推荐Let’s Encrypt)
1.2 架构设计原则
采用典型的三层架构:
客户端 → CDN边缘节点 → Nginx反向代理 → 应用服务器↓静态资源存储
优势分析:
- 动态请求与静态资源分离处理
- 通过CDN降低源站压力
- 统一入口便于安全管控
二、前端工程化部署
2.1 构建优化实践
以Vue/React项目为例:
# Vue项目构建示例npm install --productionnpm run build -- --modern # 生成现代模式代码
关键优化点:
- 启用Gzip压缩(需Nginx配置)
- 配置路由history模式回退
- 生成source map仅保留开发环境
2.2 自动化部署方案
推荐使用rsync替代简单SCP:
rsync -avz --delete -e "ssh -p 22" \dist/ root@your_server:/data/code_html/ \--exclude='*.map' --exclude='*.env*'
部署后验证:
# 检查文件完整性find /data/code_html -type f | wc -l# 测试关键路由curl -I http://your_domain/api/health
2.3 Nginx静态服务配置
生产级配置模板:
server {listen 80;server_name example.com;# 静态资源服务root /data/code_html;index index.html;# 路由回退配置location / {try_files $uri $uri/ /index.html;expires 1h; # 缓存控制add_header Cache-Control "public";}# 敏感文件防护location ~ /(\.env|\.git|backup) {deny all;return 403;}}
三、后端服务部署方案
3.1 Node.js应用部署
PM2生态配置示例:
// ecosystem.config.jsmodule.exports = {apps: [{name: "api-service",script: "dist/server.js",instances: "max",exec_mode: "cluster",env: {NODE_ENV: "production",PORT: 3001},error_file: "/var/log/api-error.log",out_file: "/var/log/api-out.log"}]};
启动命令:
pm2 start ecosystem.config.jspm2 savepm2 startup # 配置开机自启
3.2 Java应用部署
Spring Boot应用推荐使用systemd管理:
# /etc/systemd/system/springboot.service[Unit]Description=Spring Boot ApplicationAfter=syslog.target network.target[Service]User=appuserWorkingDirectory=/data/code_serverExecStart=/usr/bin/java -jar -Xms512m -Xmx1024m app.jarSuccessExitStatus=143Restart=always[Install]WantedBy=multi-user.target
操作命令:
systemctl daemon-reloadsystemctl start springbootsystemctl enable springbootjournalctl -u springboot -f # 查看日志
四、Nginx反向代理核心配置
4.1 完整配置解析
upstream node_backend {server 127.0.0.1:3001;keepalive 32;}server {listen 443 ssl http2;server_name api.example.com;ssl_certificate /path/to/fullchain.pem;ssl_certificate_key /path/to/privkey.pem;# API代理配置location /api/ {proxy_pass http://node_backend/api/;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header Host $http_host;# 超时设置proxy_connect_timeout 60s;proxy_read_timeout 300s;proxy_send_timeout 300s;# 缓冲配置proxy_buffering on;proxy_buffer_size 4k;proxy_buffers 8 16k;}# WebSocket支持location /ws/ {proxy_pass http://node_backend;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";}}
4.2 高级优化技巧
-
连接池优化:
upstream java_backend {server 127.0.0.1:8080;keepalive 64; # 保持长连接数量}
-
请求限流:
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;server {location /api/ {limit_req zone=api_limit burst=20 nodelay;# 其他配置...}}
-
A/B测试配置:
upstream backend_v1 {server 127.0.0.1:3001 weight=90;server 127.0.0.1:3002 weight=10;}
五、全球加速与安全防护
5.1 CDN集成方案
配置流程:
- 在DNS管理界面将域名CNAME至CDN提供商地址
- 在CDN控制台配置:
- 回源协议:HTTPS
- 缓存规则:
/static/*缓存7天/api/*不缓存
- HTTPS加速:启用OCSP Stapling
5.2 安全防护配置
WAF防护规则示例:
# 阻止SQL注入location ~* (union|select|insert|delete|drop|update|create|alter) {return 403;}# 防止目录遍历location ~* /(\.\.|/\.) {return 403;}# 限制请求方法if ($request_method !~ ^(GET|HEAD|POST|PUT|DELETE|OPTIONS)$ ) {return 405;}
5.3 监控告警体系
推荐监控指标:
- Nginx:
- 活跃连接数:
active connections - 每秒请求数:
requests per second - 响应状态码分布
- 活跃连接数:
- 应用层:
- 接口响应时间P99
- 错误率(5xx/4xx)
- 业务指标(如订单量)
六、持续集成与部署
6.1 CI/CD流水线设计
典型GitLab CI配置示例:
stages:- build- test- deploybuild_frontend:stage: buildscript:- cd frontend- npm install- npm run buildartifacts:paths:- frontend/dist/deploy_production:stage: deployscript:- scp -r frontend/dist/* user@server:/data/code_html/- ssh user@server "pm2 restart ecosystem.config.js"only:- main
6.2 回滚机制设计
-
版本控制:
- 前端:保留最近3个构建版本
- 后端:使用蓝绿部署或滚动更新
-
快速回滚命令:
# 前端回滚ln -sfn /data/code_html_backup/v20230801 /data/code_html# 后端回滚pm2 reload old_version_id
七、常见问题解决方案
7.1 跨域问题处理
完整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;add_header 'Content-Type' 'text/plain; charset=utf-8';add_header 'Content-Length' 0;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;}
7.2 性能优化检查清单
-
系统层:
- 文件描述符限制:
ulimit -n 65535 - 端口范围:
net.ipv4.ip_local_port_range = 1024 65535
- 文件描述符限制:
-
Nginx层:
- 启用gzip压缩:
gzip on;gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
- 启用HTTP/2:
listen 443 ssl http2;
- 启用gzip压缩:
-
应用层:
- 数据库连接池配置
- 缓存策略优化(Redis/Memcached)
通过本文的完整方案,开发者可以构建出具备高可用性、安全性和可扩展性的现代Web架构。实际部署时建议先在测试环境验证所有配置,再逐步推广到生产环境。定期进行安全审计和性能基准测试是保持系统健康的关键实践。