当前位置: 首页 > article >正文

React应用部署实战:Nginx配置与性能调优

1. React应用部署前的准备工作第一次部署React应用到生产环境时我踩过不少坑。记得有个项目上线后用户反馈页面加载特别慢排查后发现是静态资源没有做任何优化。从那以后我养成了部署前必须做好三项准备工作的习惯。首先是项目打包优化。在项目根目录执行npm run build会生成build文件夹但默认配置可能不够理想。我建议在package.json中添加这些参数build: GENERATE_SOURCEMAPfalse INLINE_RUNTIME_CHUNKfalse react-scripts build这样可以禁用sourcemap生成和内联runtime chunk能显著减小打包体积。实测下来一个中型项目的构建产物能从10MB降到3MB左右。其次是环境变量配置。很多新手会直接把.env文件上传到服务器这是非常危险的做法。正确的做法是在构建时就注入环境变量REACT_APP_API_URLhttps://api.example.com npm run build最后是文件压缩。虽然Nginx可以动态压缩但我更喜欢在构建时就处理好。安装compression-webpack-plugin插件后可以生成.gz和.br格式的预压缩文件// webpack.config.js const CompressionPlugin require(compression-webpack-plugin); module.exports { plugins: [ new CompressionPlugin({ algorithm: brotliCompress, filename: [path][base].br, test: /\.(js|css|html|svg)$/, }) ] }2. Nginx基础配置详解刚开始用Nginx部署React应用时我最头疼的就是路由刷新404问题。后来才明白这是因为SPA的特殊性导致的。下面分享一套经过实战检验的基础配置server { listen 80; server_name yourdomain.com; root /var/www/react-app/build; index index.html; location / { try_files $uri $uri/ /index.html; } location /api { proxy_pass http://localhost:3000; proxy_set_header Host $host; } }这个配置有几个关键点try_files指令确保所有路由都会回退到index.html将/api请求代理到后端服务静态资源直接从build目录提供我曾经遇到过一个坑当React项目使用BrowserRouter时必须确保Nginx配置中包含try_files $uri $uri/ /index.html否则用户刷新非根路由页面就会得到404错误。这个问题在测试环境可能不会出现因为开发服务器通常已经处理了这种情况。3. 性能优化实战技巧性能优化是部署环节的重中之重。经过多次AB测试我总结出最有效的几个优化手段首先是Gzip压缩。虽然现代浏览器都支持Brotli但为了兼容性建议同时开启两种压缩gzip on; gzip_types text/plain text/css application/json application/javascript text/xml; gzip_min_length 1024; gzip_comp_level 6; brotli on; brotli_types text/plain text/css application/json application/javascript text/xml; brotli_comp_level 6;其次是缓存策略。静态资源应该设置长期缓存利用文件名哈希实现缓存失效location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { expires 1y; add_header Cache-Control public, no-transform; access_log off; }最后是HTTP/2配置。只需在listen指令后添加http2参数listen 443 ssl http2;实测表明启用HTTP/2后页面加载时间平均减少40%。有个电商项目经过这些优化首屏时间从3.2秒降到了1.8秒转化率提升了15%。4. 高级配置与安全加固当应用需要处理高并发或敏感数据时基础配置就不够用了。下面分享几个生产环境必备的高级配置首先是负载均衡。当有多个后端服务实例时upstream backend { server 127.0.0.1:3000; server 127.0.0.1:3001; keepalive 64; } location /api { proxy_pass http://backend; proxy_http_version 1.1; proxy_set_header Connection ; }其次是HTTPS配置。使用Lets Encrypt免费证书server { listen 443 ssl http2; server_name yourdomain.com; ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem; # 启用TLS 1.3 ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ssl_ciphers TLS_AES_128_GCM_SHA256:ECDHE-ECDSA-AES128-GCM-SHA256; # HSTS头 add_header Strict-Transport-Security max-age63072000 always; }最后是安全防护。建议添加这些HTTP头add_header X-Frame-Options SAMEORIGIN; add_header X-Content-Type-Options nosniff; add_header X-XSS-Protection 1; modeblock; add_header Referrer-Policy strict-origin-when-cross-origin;曾经有个项目因为没有设置X-Frame-Options导致被点击劫持攻击。加上这些防护后安全扫描工具的评分直接从C升到了A。5. 监控与故障排查部署完成后监控和日志分析同样重要。我常用的几个排查命令查看Nginx状态sudo systemctl status nginx实时监控访问日志tail -f /var/log/nginx/access.log | grep -v 200检查配置语法nginx -t性能瓶颈分析工具# 安装goaccess sudo apt install goaccess # 生成HTML报告 goaccess /var/log/nginx/access.log -o report.html --log-formatCOMBINED有个特别有用的技巧在Nginx配置中添加自定义日志格式记录前端性能指标log_format perf $remote_addr - $remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $request_time $upstream_response_time $pipe; access_log /var/log/nginx/perf.log perf;这样就能分析每个请求的耗时情况。曾经通过这个日志发现某个API响应特别慢优化后整体性能提升了30%。

相关文章:

React应用部署实战:Nginx配置与性能调优

1. React应用部署前的准备工作 第一次部署React应用到生产环境时,我踩过不少坑。记得有个项目上线后,用户反馈页面加载特别慢,排查后发现是静态资源没有做任何优化。从那以后,我养成了部署前必须做好三项准备工作的习惯。 首先是项…...

TinyBERT实战:从知识蒸馏原理到代码实现全解析

1. TinyBERT与知识蒸馏初探 第一次听说TinyBERT时,我正在为一个移动端项目发愁——客户要求部署BERT模型,但手机内存根本装不下动辄400MB的原始模型。直到发现华为诺亚方舟实验室开源的TinyBERT,这个仅有57MB的轻量模型,在GLUE基准…...

bsnes性能优化技巧:CPU、SA1和SuperFX超频配置完全手册

bsnes性能优化技巧:CPU、SA1和SuperFX超频配置完全手册 【免费下载链接】bsnes bsnes is a Super Nintendo (SNES) emulator focused on performance, features, and ease of use. 项目地址: https://gitcode.com/gh_mirrors/bs/bsnes bsnes是一款专注于性能…...

阿里HR面被问:“说下怎么设计一个招聘Agent”?”我愣了一下,从概念、核心模块和坑都娓娓道来,这波应该稳了

前些天一个研究生的师妹面了Agent岗位,最后一面。就是HR面,不过这个HR竟然问到了一个技术问题:“你可否介绍下如果你来设计一个招聘Agent,你会怎么做”。师妹当时还挺惊讶的,因为理论上这一论不会面技术的,…...

告别手动刷新!为你的Qt串口调试助手添加‘设备热插拔’自动感知功能

告别手动刷新!为你的Qt串口调试助手添加‘设备热插拔’自动感知功能 在嵌入式开发和硬件调试过程中,串口工具是不可或缺的得力助手。然而,大多数基础串口调试软件都存在一个令人困扰的痛点——当设备突然断开或新设备接入时,用户不…...

保姆级教程:用Python搞定安居客滑块验证码(附AES加密与轨迹生成源码)

Python实战:破解安居客滑块验证码的完整技术方案 滑块验证码已经成为现代网站反爬机制的重要组成部分。对于开发者而言,理解其工作原理并实现自动化解决方案,不仅能提升爬虫效率,也是技术能力的体现。本文将深入解析安居客滑块验证…...

基于MCP协议构建AI代码评审服务器:从原理到CI/CD集成实战

1. 项目概述:一个为代码评审而生的MCP服务器最近在折腾如何把代码评审这件事做得更高效、更自动化。相信很多开发团队都面临过类似的困境:代码提交后,要么是评审者时间有限,只能匆匆扫一眼;要么是评审意见过于零散&…...

哪个降低AI率工具最划算?嘎嘎降一键完成降重降AI,性价比夯到爆!

学生党的预算永远紧张。3 万字的硕士论文交给降 AI 率工具处理,市面上的价格从 60 块到 240 块不等,差了 4 倍。能不能花最少的钱把 AI 率降到学校要求的安全线以内,是很多毕业生关心的问题?这篇文章从价格 免费额度 售后保障三…...

不只是连线:用Cadence Virtuoso做PMOS/NMOS版图布局时,那些影响性能和良率的细节(以RF器件为例)

不只是连线:用Cadence Virtuoso做PMOS/NMOS版图布局时,那些影响性能和良率的细节(以RF器件为例) 在集成电路设计中,版图布局远不止是将晶体管简单连接起来的过程。特别是对于RF器件,版图的每一个细节都可能…...

排列检验的色彩力量

原文:towardsdatascience.com/the-colorful-power-of-permutation-tests-38f0490ebfba https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/4ce3dd25bad50a2c1f85e5463faedb76.png 由作者创作的鸢尾花,通过 Midjourney…...

电子认证合规护航跨境数字身份互认、国际数字身份互信

在数字中国建设与高水平对外开放协同推进的背景下,跨境贸易、金融合作与数字服务加速线上化,数字信任成为打通跨境交互壁垒的核心因素。电子认证作为网络空间信任体系的基石,其全流程合规不仅是自身服务运营的要求,更是护航跨境数…...

环绕在我们周围的数据:从体育到家庭管理

原文:towardsdatascience.com/the-data-all-around-us-from-sports-to-household-management-9ce3f2f97e4c?sourcecollection_archive---------11-----------------------#2024-09-12 https://towardsdatascience.medium.com/?sourcepost_page---byline--9ce3f2f9…...

康威定律与数据空间

原文:towardsdatascience.com/the-curse-of-conway-and-the-data-space-e3cba689a915?sourcecollection_archive---------4-----------------------#2024-10-25 现代趋势如何追溯到康威定律 https://medium.com/jvanlightly?sourcepost_page---byline--e3cba689a…...

《在自定义数据集上训练和运行 YOLOv8 模型的全面指南》

原文:towardsdatascience.com/the-comprehensive-guide-to-training-and-running-yolov8-models-on-custom-datasets-22946da259c3?sourcecollection_archive---------2-----------------------#2024-10-02 现在,通过 Python、命令行或 Google Colab 在…...

答辩 PPT 熬到凌晨?PaperXie 用 AI 把你的毕业焦虑,变成 10 分钟的从容

paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/AI PPThttps://www.paperxie.cn/ppt/createhttps://www.paperxie.cn/ppt/create 你有没有过这样的时刻:答辩前一周,论文终于定稿,转头却卡在了 PPT 上。翻遍网盘里的答辩…...

10分钟上手wired-elements:打造超萌手绘风UI界面的完整指南

10分钟上手wired-elements:打造超萌手绘风UI界面的完整指南 【免费下载链接】wired-elements Collection of custom elements that appear hand drawn. Great for wireframes or a fun look. 项目地址: https://gitcode.com/gh_mirrors/wi/wired-elements wi…...

答辩前别慌!Paperxie AI PPT,把你的毕业论文一键变成 “答辩通关券”

paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/AI PPThttps://www.paperxie.cn/ppt/createhttps://www.paperxie.cn/ppt/create 距离毕业答辩只剩一周,你的论文终稿已经反复修改了十几遍,可电脑桌面上的答辩 PPT 文件夹&#xff0…...

7个实战技巧让你轻松掌握vlayout动态布局:从入门到精通

7个实战技巧让你轻松掌握vlayout动态布局:从入门到精通 【免费下载链接】vlayout Project vlayout is a powerfull LayoutManager extension for RecyclerView, it provides a group of layouts for RecyclerView. Make it able to handle a complicate situation w…...

答辩前 3 天,我用 PaperXie 的 AI PPT 功能,把答辩 PPT 从 0 改到了能直接上台

paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/AI PPThttps://www.paperxie.cn/ppt/createhttps://www.paperxie.cn/ppt/create 凌晨两点的宿舍里,电脑屏幕的蓝光映着你布满红血丝的眼睛。文件夹里躺着写了半个月的毕业论文终稿,旁…...

从标准库到HAL库:STM32驱动TFTLCD的代码移植实战

1. 为什么需要从标准库迁移到HAL库? 最近在做一个智能家居控制面板项目时,遇到了一个典型问题:厂家提供的TFTLCD驱动代码是基于标准外设库(Standard Peripheral Library)开发的,但项目要求使用STM32CubeMX工…...

从提示词到技能笔记:构建可复用AI工作流的核心方法

1. 项目概述:从“提示词”到“技能笔记”的认知跃迁最近在折腾AI应用开发的朋友,估计没少被“提示词工程”这个词刷屏。从最初的简单指令,到如今动辄上千字的复杂结构化提示,我们与AI的交互方式正在经历一场深刻的变革。但不知道你…...

Adobe GenP 3.0终极指南:3步解锁全系列Adobe CC软件

Adobe GenP 3.0终极指南:3步解锁全系列Adobe CC软件 【免费下载链接】Adobe-GenP Adobe CC 2019/2020/2021/2022/2023 GenP Universal Patch 3.0 项目地址: https://gitcode.com/gh_mirrors/ad/Adobe-GenP 还在为Adobe Creative Cloud高昂的订阅费用而烦恼吗…...

【AI面试临阵磨枪-56】大模型服务部署:Docker、K8s、GPU 调度、推理加速

一、 面试题目在生产环境中部署大模型服务时,你是如何结合 Docker 和 K8s 实现高效治理的?特别是在 GPU 调度(如共享、切分) 和 推理加速(如 vLLM, TensorRT-LLM) 方面有哪些实战经验?二、 知识…...

打造高效愉悦的开发者工作流:从工具链配置到心流编码实践

1. 项目概述:一个面向开发者的“氛围感”编码工作流指南 最近在和一些独立开发者朋友交流时,发现一个挺有意思的现象:大家的技术栈都挺扎实,项目也能做出来,但总感觉开发过程磕磕绊绊,效率不高,…...

手把手教你用Python通过RS-232控制ITECH IT63XX电源(附完整代码)

用Python自动化控制ITECH可编程电源的工程实践指南 在硬件开发和自动化测试领域,精确控制直流电源是确保产品质量的关键环节。ITECH IT63XX系列可编程电源以其稳定性和丰富的接口选项,成为工程师实验室的常见设备。本文将带您从零开始构建一个完整的Pyth…...

PearProject梨子项目:如何快速搭建轻量级远程协作系统的完整指南

PearProject梨子项目:如何快速搭建轻量级远程协作系统的完整指南 【免费下载链接】pearProject pear,梨子,轻量级的在线项目/任务协作系统,远程办公协作 项目地址: https://gitcode.com/gh_mirrors/pe/pearProject PearPro…...

手把手教你给STM32H743的0.96寸OLED屏移植STemWin(裸机+FreeRTOS双版本)

STM32H743与0.96寸OLED的STemWin深度移植实战:裸机与RTOS双环境解析 在嵌入式图形界面开发领域,STemWin作为ST官方推出的图形库解决方案,以其高效的渲染性能和丰富的控件资源,成为STM32开发者构建人机界面的首选。本文将聚焦STM32…...

EDR-Telemetry项目实战:使用遥测生成器测试你的安全防护

EDR-Telemetry项目实战:使用遥测生成器测试你的安全防护 【免费下载链接】EDR-Telemetry This project aims to compare and evaluate the telemetry of various EDR products. 项目地址: https://gitcode.com/gh_mirrors/ed/EDR-Telemetry EDR-Telemetry是一…...

构建应用安全防护层:从沙箱隔离到供应链防御实战

1. 项目概述:从“氛围盾”到代码级防护最近在开源社区里,一个名为gomzkov/vibe-shield的项目引起了我的注意。乍一看这个标题,你可能会联想到一些科幻概念,比如“氛围护盾”或者“情绪屏障”。但作为一名长期在网络安全和系统架构…...

抖音无水印视频下载终极指南:5分钟快速上手douyin-downloader

抖音无水印视频下载终极指南:5分钟快速上手douyin-downloader 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallbac…...