若依前后端分离版部署实战:Nginx反向代理+生产环境优化配置
若依前后端分离版生产环境部署全攻略Nginx调优与安全实践第一次将若依框架部署到生产环境时我遇到了前端资源加载缓慢、后端接口频繁超时的问题。经过多次实战调优终于总结出一套兼顾性能与安全的部署方案。本文将分享从基础部署到深度优化的完整路径特别适合已经完成本地开发但缺乏生产环境经验的团队。1. 生产环境基础架构设计若依前后端分离架构的核心在于解耦前端资源与后端服务。典型的生产环境部署采用三层结构前端静态资源由Nginx直接托管后端Java服务独立运行Nginx同时承担反向代理和负载均衡的角色。这种架构的优势在于资源隔离静态资源与动态API分离部署避免相互干扰弹性扩展前后端可独立横向扩展安全增强通过Nginx实现请求过滤和流量控制在硬件资源配置上建议2核4G及以上配置的云服务器单独的数据盘用于存放日志和备份至少10Mbps的公网带宽2. Nginx核心配置实战2.1 反向代理基础配置修改nginx.conf中的server块实现基础路由分离server { listen 80; server_name yourdomain.com; # 前端静态资源 location / { root /opt/project/ruoyi-ui; index index.html; try_files $uri $uri/ /index.html; } # 后端API代理 location /prod-api/ { proxy_pass http://127.0.0.1:8080/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }关键参数说明try_files确保前端路由正常跳转proxy_set_header传递真实客户端IP路径中的/prod-api/需与前端请求基地址一致2.2 性能优化配置在http上下文中添加以下优化参数http { # 文件传输优化 sendfile on; tcp_nopush on; tcp_nodelay on; # 连接超时控制 keepalive_timeout 65; client_header_timeout 15; client_body_timeout 15; send_timeout 25; # 缓冲控制 client_body_buffer_size 128k; client_max_body_size 10m; # 压缩配置 gzip on; gzip_min_length 1k; gzip_comp_level 4; gzip_types text/plain application/javascript application/x-javascript text/css; }优化效果对比配置项默认值优化值提升效果keepalive_timeout75s65s减少连接占用时间gzip_comp_level14压缩率提升30%tcp_nodelayoffon减少小包延迟3. HTTPS安全部署方案3.1 证书申请与配置使用Lets Encrypt免费证书# 安装certbot sudo apt install certbot python3-certbot-nginx # 获取证书需提前解析域名 sudo certbot --nginx -d yourdomain.com # 设置自动续期 sudo certbot renew --dry-runNginx的SSL配置示例server { listen 443 ssl; server_name yourdomain.com; ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem; # 安全协议配置 ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384; ssl_prefer_server_ciphers on; ssl_session_timeout 1d; ssl_session_cache shared:SSL:50m; # HSTS增强安全 add_header Strict-Transport-Security max-age63072000 always; }3.2 安全防护配置在server块中添加安全头add_header X-Frame-Options SAMEORIGIN; add_header X-Content-Type-Options nosniff; add_header X-XSS-Protection 1; modeblock; add_header Content-Security-Policy default-src self;常见攻击防护策略DDoS防护限制单个IP的请求频率limit_req_zone $binary_remote_addr zoneone:10m rate30r/m;SQL注入防护过滤特殊字符set $block_sql_injections 0; if ($query_string ~ union.*select.*\() { set $block_sql_injections 1; } if ($block_sql_injections 1) { return 403; }4. 高级性能调优技巧4.1 静态资源优化配置独立的静态资源服务server { listen 80; server_name static.yourdomain.com; location / { root /opt/project/ruoyi-ui/static; expires 365d; access_log off; add_header Cache-Control public; } }前端构建优化建议配置webpack的chunk splitting开启资源hash命名使用CDN加速静态资源4.2 后端服务优化若依Java服务启动参数nohup java -server \ -Xms2048m -Xmx2048m \ -XX:UseG1GC \ -XX:MaxGCPauseMillis200 \ -XX:ParallelGCThreads4 \ -XX:ConcGCThreads2 \ -jar ruoyi-admin.jar /dev/null 21 JVM参数对比测试参数组合平均响应时间GC停顿时间内存占用默认参数320ms450ms1.2GBG1GC优化280ms210ms1.5GB并行GC堆调优260ms180ms1.8GB4.3 监控与日志方案Nginx日志格式化log_format main $remote_addr - $remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $request_time $upstream_response_time;日志分析工具推荐GoAccess实时流量分析goaccess /var/log/nginx/access.log -o report.html --log-formatCOMBINEDELK Stack分布式日志系统PrometheusGrafana性能监控看板5. 常见问题排查指南问题1前端页面刷新后404检查Nginx的try_files配置确认Vue路由模式是否为history验证静态资源路径是否正确问题2接口请求跨域确保Nginx代理路径配置一致检查后端CORS配置验证HTTPS环境下协议一致性问题3上传文件大小限制# Nginx配置调整 client_max_body_size 50m; # Spring Boot配置调整 spring.servlet.multipart.max-file-size50MB spring.servlet.multipart.max-request-size50MB问题4Redis连接超时检查requirepass配置一致性验证bind地址是否为0.0.0.0确认防火墙规则放行6379端口在最近一次客户现场部署中我们发现当并发用户超过500时默认的Nginx worker配置会出现请求堆积。通过调整以下参数解决了问题worker_processes auto; worker_connections 4096; multi_accept on;
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2509547.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!