[{"data":1,"prerenderedAt":327},["ShallowReactive",2],{"site-data":3,"article-122":143,"article-show-hot-122":170,"article-show-new-122":260},{"settings":4,"categorys":35,"tree":97,"models":118,"search_model_select":128,"nav_list":130},{"changefreq":5,"changyan_app_id":6,"changyan_app_key":6,"copy":7,"description":8,"editor":9,"file":6,"guest_feedback":10,"head_html":6,"icp":11,"index_banner":12,"index_banner_bg":13,"is_excel":14,"is_watermark":10,"keywords":15,"links":16,"logo":17,"lzcms_banner":6,"lzcms_banner_link":18,"member_register_enabled":14,"qq_app_id":6,"qq_app_key":6,"qr_code":6,"search_model":19,"site_closedreason":6,"site_idea":6,"site_idea1":20,"site_idea2":21,"site_idea3":22,"site_name":23,"site_statistice":6,"site_status":14,"site_url":18,"sitemap_model":19,"stationmaster_motto":24,"stationmaster_name":25,"stationmaster_occupation":26,"stationmaster_qq":27,"stationmaster_qqnet":28,"stationmaster_qqnet_code":29,"threshold":14,"title_add":30,"watermark":6,"watermark_alpha":31,"watermark_height":32,"watermark_locate":33,"watermark_width":34},"weekly","","版权所有 © \u003Ca class=\"site_url\" href=\"https://zhl123.com\">2026 zhl123.com\u003C/a>","linux、Python、mysql、docker、k8s技术交流","layedit","0","粤ICP备15054664号-1","/uploads/images/20181109/7a86191de8b8bb60e9c6b54d8b27c5cc.jpg","#xe604","1","linux、Python、mysql、docker、k8s","{\"1\":{\"id\":\"1\",\"link_url\":\"https://linux.org\",\"logo\":\"\",\"name\":\"linux\",\"sort\":\"0\",\"status\":\"1\"}}","/uploads/images/20181109/e7305012448aed257176dd591846f50a.png","https://zhl123.com","2","学无止境\n学习，探索，研究，从不了解到了解，从无知到掌握，到灵活运用，在不断的学习中加深认识。由浅入深，由表及里。","业精于勤\n“业精于勤荒于嬉”，精深的业技靠的是勤学、刻苦努力，靠的是争分夺秒的勤学苦练才会有精深的技术。得在认真，失在随便。","工匠精神\n精益求精，注重细节，追求完美和极致，不惜花费时间精力，孜孜不倦，反复改进产品，把99%提高到99.99%。","linux","业精于勤、学无止境、工匠精神","廖地金","高级Linux运维工程师","1256636645","592958303","\u003Ca target=\"_blank\" href=\"//shang.qq.com/wpa/qunwpa?idkey=09be7d1a682073783fd636102e666393169b8a8aac8f3393da1de57bcaa821a0\">\u003Cimg border=\"0\" src=\"//pub.idqqimg.com/wpa/images/group.png\" alt=\"Linux技术\" title=\"Linux技术\">\u003C/a>"," | Python | mysql | docker | k8s 技术交流","100","300","9","500",{"0":36,"17":51,"18":60,"19":63,"20":67,"21":71,"22":76,"25":80,"26":83,"27":89,"29":94},{"children":37},{"0":38,"25":43,"26":48},[39,40,41,42],25,21,22,26,[44,45,46,47],17,18,19,20,[49,50],27,29,{"create_time":6,"description":6,"id":44,"image_url":6,"index_template":52,"is_cover":53,"is_menu":53,"keywords":6,"list_template":54,"model_code":55,"model_id":56,"model_name":57,"name":23,"parent_id":39,"seo_description":6,"seo_keywords":6,"seo_title":6,"show_template":58,"sort":53,"subtitle":6,"update_time":6,"url":59},"index",1,"list","article",2,"文章模型","show","/article/lists?category_id=17",{"create_time":6,"description":6,"id":45,"image_url":6,"index_template":52,"is_cover":53,"is_menu":53,"keywords":6,"list_template":54,"model_code":55,"model_id":56,"model_name":57,"name":61,"parent_id":39,"seo_description":6,"seo_keywords":6,"seo_title":6,"show_template":58,"sort":56,"subtitle":6,"update_time":6,"url":62},"python","/article/lists?category_id=18",{"create_time":6,"description":6,"id":46,"image_url":6,"index_template":52,"is_cover":53,"is_menu":53,"keywords":6,"list_template":54,"model_code":55,"model_id":56,"model_name":57,"name":64,"parent_id":39,"seo_description":6,"seo_keywords":6,"seo_title":6,"show_template":58,"sort":65,"subtitle":6,"update_time":6,"url":66},"容器技术",3,"/article/lists?category_id=19",{"create_time":6,"description":6,"id":47,"image_url":6,"index_template":52,"is_cover":53,"is_menu":53,"keywords":6,"list_template":54,"model_code":55,"model_id":56,"model_name":57,"name":68,"parent_id":39,"seo_description":6,"seo_keywords":6,"seo_title":6,"show_template":58,"sort":69,"subtitle":6,"update_time":6,"url":70},"负载均衡",4,"/article/lists?category_id=20",{"create_time":6,"description":6,"id":40,"image_url":6,"index_template":52,"is_cover":53,"is_menu":53,"keywords":6,"list_template":54,"model_code":55,"model_id":56,"model_name":57,"name":72,"parent_id":73,"seo_description":6,"seo_keywords":6,"seo_title":6,"show_template":58,"sort":74,"subtitle":6,"update_time":6,"url":75},"分享无价",0,5,"/article/lists?category_id=21",{"create_time":6,"description":6,"id":41,"image_url":6,"index_template":52,"is_cover":53,"is_menu":53,"keywords":6,"list_template":54,"model_code":55,"model_id":56,"model_name":57,"name":77,"parent_id":73,"seo_description":6,"seo_keywords":6,"seo_title":6,"show_template":58,"sort":78,"subtitle":6,"update_time":6,"url":79},"随笔",6,"/article/lists?category_id=22",{"create_time":6,"description":6,"id":39,"image_url":6,"index_template":52,"is_cover":53,"is_menu":53,"keywords":6,"list_template":54,"model_code":55,"model_id":56,"model_name":57,"name":81,"parent_id":73,"seo_description":6,"seo_keywords":6,"seo_title":6,"show_template":58,"sort":73,"subtitle":6,"update_time":6,"url":82},"学无止境","/article/lists?category_id=25",{"create_time":6,"description":6,"id":42,"image_url":6,"index_template":52,"is_cover":53,"is_menu":53,"keywords":6,"list_template":54,"model_code":84,"model_id":65,"model_name":85,"name":86,"parent_id":73,"seo_description":6,"seo_keywords":6,"seo_title":6,"show_template":58,"sort":87,"subtitle":6,"update_time":6,"url":88},"picture","图集模型","关于",8,"/picture/lists?category_id=26",{"create_time":6,"description":6,"id":49,"image_url":6,"index_template":52,"is_cover":53,"is_menu":73,"keywords":6,"list_template":54,"model_code":90,"model_id":53,"model_name":91,"name":92,"parent_id":42,"seo_description":6,"seo_keywords":6,"seo_title":6,"show_template":58,"sort":47,"subtitle":6,"update_time":6,"url":93},"page","单页模型","关于博主","/page/27",{"create_time":6,"description":6,"id":50,"image_url":6,"index_template":52,"is_cover":73,"is_menu":73,"keywords":6,"list_template":54,"model_id":73,"name":95,"parent_id":42,"seo_description":6,"seo_keywords":6,"seo_title":6,"show_template":58,"sort":47,"subtitle":6,"update_time":6,"url":96},"留言","/feedback",[98,108,110,112],{"children":99,"create_time":6,"description":6,"id":39,"image_url":6,"index_template":52,"is_cover":53,"is_menu":53,"keywords":6,"list_template":54,"model_code":55,"model_id":56,"model_name":57,"name":81,"parent_id":73,"seo_description":6,"seo_keywords":6,"seo_title":6,"show_template":58,"sort":73,"subtitle":6,"update_time":6,"url":82},[100,102,104,106],{"children":101,"create_time":6,"description":6,"id":44,"image_url":6,"index_template":52,"is_cover":53,"is_menu":53,"keywords":6,"list_template":54,"model_code":55,"model_id":56,"model_name":57,"name":23,"parent_id":39,"seo_description":6,"seo_keywords":6,"seo_title":6,"show_template":58,"sort":53,"subtitle":6,"update_time":6,"url":59},[],{"children":103,"create_time":6,"description":6,"id":45,"image_url":6,"index_template":52,"is_cover":53,"is_menu":53,"keywords":6,"list_template":54,"model_code":55,"model_id":56,"model_name":57,"name":61,"parent_id":39,"seo_description":6,"seo_keywords":6,"seo_title":6,"show_template":58,"sort":56,"subtitle":6,"update_time":6,"url":62},[],{"children":105,"create_time":6,"description":6,"id":46,"image_url":6,"index_template":52,"is_cover":53,"is_menu":53,"keywords":6,"list_template":54,"model_code":55,"model_id":56,"model_name":57,"name":64,"parent_id":39,"seo_description":6,"seo_keywords":6,"seo_title":6,"show_template":58,"sort":65,"subtitle":6,"update_time":6,"url":66},[],{"children":107,"create_time":6,"description":6,"id":47,"image_url":6,"index_template":52,"is_cover":53,"is_menu":53,"keywords":6,"list_template":54,"model_code":55,"model_id":56,"model_name":57,"name":68,"parent_id":39,"seo_description":6,"seo_keywords":6,"seo_title":6,"show_template":58,"sort":69,"subtitle":6,"update_time":6,"url":70},[],{"children":109,"create_time":6,"description":6,"id":40,"image_url":6,"index_template":52,"is_cover":53,"is_menu":53,"keywords":6,"list_template":54,"model_code":55,"model_id":56,"model_name":57,"name":72,"parent_id":73,"seo_description":6,"seo_keywords":6,"seo_title":6,"show_template":58,"sort":74,"subtitle":6,"update_time":6,"url":75},[],{"children":111,"create_time":6,"description":6,"id":41,"image_url":6,"index_template":52,"is_cover":53,"is_menu":53,"keywords":6,"list_template":54,"model_code":55,"model_id":56,"model_name":57,"name":77,"parent_id":73,"seo_description":6,"seo_keywords":6,"seo_title":6,"show_template":58,"sort":78,"subtitle":6,"update_time":6,"url":79},[],{"children":113,"create_time":6,"description":6,"id":42,"image_url":6,"index_template":52,"is_cover":53,"is_menu":53,"keywords":6,"list_template":54,"model_code":84,"model_id":65,"model_name":85,"name":86,"parent_id":73,"seo_description":6,"seo_keywords":6,"seo_title":6,"show_template":58,"sort":87,"subtitle":6,"update_time":6,"url":88},[114,116],{"children":115,"create_time":6,"description":6,"id":49,"image_url":6,"index_template":52,"is_cover":53,"is_menu":73,"keywords":6,"list_template":54,"model_code":90,"model_id":53,"model_name":91,"name":92,"parent_id":42,"seo_description":6,"seo_keywords":6,"seo_title":6,"show_template":58,"sort":47,"subtitle":6,"update_time":6,"url":93},[],{"children":117,"create_time":6,"description":6,"id":50,"image_url":6,"index_template":52,"is_cover":73,"is_menu":73,"keywords":6,"list_template":54,"model_id":73,"name":95,"parent_id":42,"seo_description":6,"seo_keywords":6,"seo_title":6,"show_template":58,"sort":47,"subtitle":6,"update_time":6,"url":96},[],{"1":119,"2":120,"3":121,"4":122,"5":125},{"id":53,"index_template":52,"list_template":54,"name":91,"show_template":58,"status":73,"tablename":90},{"id":56,"index_template":52,"list_template":54,"name":57,"show_template":58,"status":73,"tablename":55},{"id":65,"index_template":52,"list_template":54,"name":85,"show_template":58,"status":73,"tablename":84},{"id":69,"index_template":52,"list_template":54,"name":123,"show_template":58,"status":73,"tablename":124},"链接模型","link",{"id":74,"index_template":52,"list_template":54,"name":126,"show_template":58,"status":73,"tablename":127},"下载模型","download",[129],{"id":56,"name":57,"tablename":55},[131,137,139,141],{"children":132,"create_time":6,"description":6,"id":39,"image_url":6,"index_template":52,"is_cover":53,"is_menu":53,"keywords":6,"list_template":54,"model_code":55,"model_id":56,"model_name":57,"name":81,"parent_id":73,"seo_description":6,"seo_keywords":6,"seo_title":6,"show_template":58,"sort":73,"subtitle":6,"update_time":6,"url":82},[133,134,135,136],{"create_time":6,"description":6,"id":44,"image_url":6,"index_template":52,"is_cover":53,"is_menu":53,"keywords":6,"list_template":54,"model_code":55,"model_id":56,"model_name":57,"name":23,"parent_id":39,"seo_description":6,"seo_keywords":6,"seo_title":6,"show_template":58,"sort":53,"subtitle":6,"update_time":6,"url":59},{"create_time":6,"description":6,"id":45,"image_url":6,"index_template":52,"is_cover":53,"is_menu":53,"keywords":6,"list_template":54,"model_code":55,"model_id":56,"model_name":57,"name":61,"parent_id":39,"seo_description":6,"seo_keywords":6,"seo_title":6,"show_template":58,"sort":56,"subtitle":6,"update_time":6,"url":62},{"create_time":6,"description":6,"id":46,"image_url":6,"index_template":52,"is_cover":53,"is_menu":53,"keywords":6,"list_template":54,"model_code":55,"model_id":56,"model_name":57,"name":64,"parent_id":39,"seo_description":6,"seo_keywords":6,"seo_title":6,"show_template":58,"sort":65,"subtitle":6,"update_time":6,"url":66},{"create_time":6,"description":6,"id":47,"image_url":6,"index_template":52,"is_cover":53,"is_menu":53,"keywords":6,"list_template":54,"model_code":55,"model_id":56,"model_name":57,"name":68,"parent_id":39,"seo_description":6,"seo_keywords":6,"seo_title":6,"show_template":58,"sort":69,"subtitle":6,"update_time":6,"url":70},{"children":138,"create_time":6,"description":6,"id":40,"image_url":6,"index_template":52,"is_cover":53,"is_menu":53,"keywords":6,"list_template":54,"model_code":55,"model_id":56,"model_name":57,"name":72,"parent_id":73,"seo_description":6,"seo_keywords":6,"seo_title":6,"show_template":58,"sort":74,"subtitle":6,"update_time":6,"url":75},[],{"children":140,"create_time":6,"description":6,"id":41,"image_url":6,"index_template":52,"is_cover":53,"is_menu":53,"keywords":6,"list_template":54,"model_code":55,"model_id":56,"model_name":57,"name":77,"parent_id":73,"seo_description":6,"seo_keywords":6,"seo_title":6,"show_template":58,"sort":78,"subtitle":6,"update_time":6,"url":79},[],{"children":142,"create_time":6,"description":6,"id":42,"image_url":6,"index_template":52,"is_cover":53,"is_menu":53,"keywords":6,"list_template":54,"model_code":84,"model_id":65,"model_name":85,"name":86,"parent_id":73,"seo_description":6,"seo_keywords":6,"seo_title":6,"show_template":58,"sort":87,"subtitle":6,"update_time":6,"url":88},[],{"article":144,"breadcrumb":154,"category":158,"next":159,"prev":161,"second_categorys":164,"seo":169},{"id":145,"category_id":44,"title":146,"keywords":6,"description":147,"image_url":6,"content":148,"content_md":149,"url":150,"hits":151,"is_recommend":73,"is_top":73,"create_time":152,"update_time":153},122,"Nginx性能调优18条黄金法则：支撑10万并发的配置模板","一、概述1.1 背景介绍说实话，Nginx调优这事儿我踩过无数坑。记得2019年双11，我们电商平台流量暴涨，Nginx直接扛不住了，QPS从平时的2万飙升到8万，响应时间从50ms飙到了2秒，最后还是靠临时加机器扛过去的。那次事故之后，我花了大半年时间专门研究Nginx的性能极限，总结出了这20条黄金法则。Nginx作为目前最流行的Web服务器和反向代理，官方数据显示单机可以轻松处理10万+的并发连接。但实际生产环境中，很多同学拿到默认配置就直接上了，结果发现连1万并发都扛不住。问题不在Ngi","\u003Ch1 data-tool=\"mdnice编辑器\">\u003Cspan class=\"js_darkmode__1\">\u003Cspan leaf=\"\">一、概述\u003C/span>\u003C/span>\u003C/h1>\u003Ch3 data-tool=\"mdnice编辑器\">\u003Cspan class=\"js_darkmode__2\">\u003Cspan leaf=\"\">1.1 背景介绍\u003C/span>\u003C/span>\u003C/h3>\u003Cp data-tool=\"mdnice编辑器\" class=\"js_darkmode__3\">\u003Cspan leaf=\"\">说实话，Nginx调优这事儿我踩过无数坑。记得2019年双11，我们电商平台流量暴涨，Nginx直接扛不住了，QPS从平时的2万飙升到8万，响应时间从50ms飙到了2秒，最后还是靠临时加机器扛过去的。那次事故之后，我花了大半年时间专门研究Nginx的性能极限，总结出了这20条黄金法则。\u003C/span>\u003C/p>\u003Cp data-tool=\"mdnice编辑器\" class=\"js_darkmode__4\">\u003Cspan leaf=\"\">Nginx作为目前最流行的Web服务器和反向代理，官方数据显示单机可以轻松处理10万+的并发连接。但实际生产环境中，很多同学拿到默认配置就直接上了，结果发现连1万并发都扛不住。问题不在Nginx本身，而在于配置。\u003C/span>\u003C/p>\u003Ch3 data-tool=\"mdnice编辑器\">\u003Cspan class=\"js_darkmode__5\">\u003Cspan leaf=\"\">1.2 技术特点\u003C/span>\u003C/span>\u003C/h3>\u003Cp data-tool=\"mdnice编辑器\" class=\"js_darkmode__6\">\u003Cspan leaf=\"\">Nginx采用事件驱动的异步非阻塞架构，这跟传统的Apache每个连接一个进程/线程的模式完全不同。打个比方：Apache像是银行柜台，每个客户都需要一个柜员全程服务；Nginx则像是叫号系统，一个柜员可以同时处理多个客户的不同阶段任务。\u003C/span>\u003C/p>\u003Cp data-tool=\"mdnice编辑器\" class=\"js_darkmode__7\">\u003Cspan leaf=\"\">核心优势：\u003C/span>\u003C/p>\u003Cul class=\"list-paddingleft-1 js_darkmode__8\">\u003Cli>\u003Csection class=\"js_darkmode__9\">\u003Cspan leaf=\"\">内存占用低：处理10000个非活跃HTTP keep-alive连接仅需2.5MB内存\u003C/span>\u003C/section>\u003C/li>\u003Cli>\u003Csection class=\"js_darkmode__10\">\u003Cspan leaf=\"\">事件驱动：基于epoll/kqueue，不会因为连接数增加而线性增长CPU消耗\u003C/span>\u003C/section>\u003C/li>\u003Cli>\u003Csection class=\"js_darkmode__11\">\u003Cspan leaf=\"\">模块化设计：只加载需要的模块，减少资源浪费\u003C/span>\u003C/section>\u003C/li>\u003Cli>\u003Csection class=\"js_darkmode__12\">\u003Cspan leaf=\"\">热部署：配置修改无需重启，平滑reload\u003C/span>\u003C/section>\u003C/li>\u003C/ul>\u003Ch3 data-tool=\"mdnice编辑器\">\u003Cspan class=\"js_darkmode__13\">\u003Cspan leaf=\"\">1.3 适用场景\u003C/span>\u003C/span>\u003C/h3>\u003Cul class=\"list-paddingleft-1 js_darkmode__14\">\u003Cli>\u003Csection class=\"js_darkmode__15\">\u003Cspan leaf=\"\">高并发静态资源服务（图片、CSS、JS、视频）\u003C/span>\u003C/section>\u003C/li>\u003Cli>\u003Csection class=\"js_darkmode__16\">\u003Cspan leaf=\"\">反向代理和负载均衡\u003C/span>\u003C/section>\u003C/li>\u003Cli>\u003Csection class=\"js_darkmode__17\">\u003Cspan leaf=\"\">API网关\u003C/span>\u003C/section>\u003C/li>\u003Cli>\u003Csection class=\"js_darkmode__18\">\u003Cspan leaf=\"\">SSL/TLS终结点\u003C/span>\u003C/section>\u003C/li>\u003Cli>\u003Csection class=\"js_darkmode__19\">\u003Cspan leaf=\"\">缓存服务器\u003C/span>\u003C/section>\u003C/li>\u003Cli>\u003Csection class=\"js_darkmode__20\">\u003Cspan leaf=\"\">WebSocket代理\u003C/span>\u003C/section>\u003C/li>\u003C/ul>\u003Ch3 data-tool=\"mdnice编辑器\">\u003Cspan class=\"js_darkmode__21\">\u003Cspan leaf=\"\">1.4 环境要求\u003C/span>\u003C/span>\u003C/h3>\u003Csection data-tool=\"mdnice编辑器\">\u003Ctable class=\"layui-table\">\u003Cthead>\u003Ctr>\u003Cth class=\"js_darkmode__22\" style=\"text-align: left;\">\u003Csection>\u003Cspan leaf=\"\">组件\u003C/span>\u003C/section>\u003C/th>\u003Cth class=\"js_darkmode__23\" style=\"text-align: left;\">\u003Csection>\u003Cspan leaf=\"\">版本\u003C/span>\u003C/section>\u003C/th>\u003Cth class=\"js_darkmode__24\" style=\"text-align: left;\">\u003Csection>\u003Cspan leaf=\"\">说明\u003C/span>\u003C/section>\u003C/th>\u003C/tr>\u003C/thead>\u003Ctbody>\u003Ctr class=\"js_darkmode__25\">\u003Ctd class=\"js_darkmode__26\">\u003Csection>\u003Cspan leaf=\"\">操作系统\u003C/span>\u003C/section>\u003C/td>\u003Ctd class=\"js_darkmode__27\">\u003Csection>\u003Cspan leaf=\"\">Rocky Linux 9.4 / Ubuntu 24.04 LTS\u003C/span>\u003C/section>\u003C/td>\u003Ctd class=\"js_darkmode__28\">\u003Csection>\u003Cspan leaf=\"\">内核版本建议5.15+\u003C/span>\u003C/section>\u003C/td>\u003C/tr>\u003Ctr class=\"js_darkmode__29\">\u003Ctd class=\"js_darkmode__30\">\u003Csection>\u003Cspan leaf=\"\">Nginx\u003C/span>\u003C/section>\u003C/td>\u003Ctd class=\"js_darkmode__31\">\u003Csection>\u003Cspan leaf=\"\">1.26.2 / 1.27.0\u003C/span>\u003C/section>\u003C/td>\u003Ctd class=\"js_darkmode__32\">\u003Csection>\u003Cspan leaf=\"\">mainline版本功能更新，stable版本更稳定\u003C/span>\u003C/section>\u003C/td>\u003C/tr>\u003Ctr class=\"js_darkmode__33\">\u003Ctd class=\"js_darkmode__34\">\u003Csection>\u003Cspan leaf=\"\">CPU\u003C/span>\u003C/section>\u003C/td>\u003Ctd class=\"js_darkmode__35\">\u003Csection>\u003Cspan leaf=\"\">8核+\u003C/span>\u003C/section>\u003C/td>\u003Ctd class=\"js_darkmode__36\">\u003Csection>\u003Cspan leaf=\"\">Nginx worker数量与CPU核心数相关\u003C/span>\u003C/section>\u003C/td>\u003C/tr>\u003Ctr class=\"js_darkmode__37\">\u003Ctd class=\"js_darkmode__38\">\u003Csection>\u003Cspan leaf=\"\">内存\u003C/span>\u003C/section>\u003C/td>\u003Ctd class=\"js_darkmode__39\">\u003Csection>\u003Cspan leaf=\"\">16GB+\u003C/span>\u003C/section>\u003C/td>\u003Ctd class=\"js_darkmode__40\">\u003Csection>\u003Cspan leaf=\"\">主要用于连接缓冲和缓存\u003C/span>\u003C/section>\u003C/td>\u003C/tr>\u003Ctr class=\"js_darkmode__41\">\u003Ctd class=\"js_darkmode__42\">\u003Csection>\u003Cspan leaf=\"\">网络\u003C/span>\u003C/section>\u003C/td>\u003Ctd class=\"js_darkmode__43\">\u003Csection>\u003Cspan leaf=\"\">万兆网卡\u003C/span>\u003C/section>\u003C/td>\u003Ctd class=\"js_darkmode__44\">\u003Csection>\u003Cspan leaf=\"\">千兆网卡在高并发下会成为瓶颈\u003C/span>\u003C/section>\u003C/td>\u003C/tr>\u003Ctr class=\"js_darkmode__45\">\u003Ctd class=\"js_darkmode__46\">\u003Csection>\u003Cspan leaf=\"\">磁盘\u003C/span>\u003C/section>\u003C/td>\u003Ctd class=\"js_darkmode__47\">\u003Csection>\u003Cspan leaf=\"\">NVMe SSD\u003C/span>\u003C/section>\u003C/td>\u003Ctd class=\"js_darkmode__48\">\u003Csection>\u003Cspan leaf=\"\">日志写入和缓存需要高IOPS\u003C/span>\u003C/section>\u003C/td>\u003C/tr>\u003C/tbody>\u003C/table>\u003C/section>\u003Ch2 data-tool=\"mdnice编辑器\">\u003Cspan class=\"js_darkmode__49\">\u003Cspan leaf=\"\">二、详细步骤\u003C/span>\u003C/span>\u003C/h2>\u003Ch3 data-tool=\"mdnice编辑器\">\u003Cspan class=\"js_darkmode__50\">\u003Cspan leaf=\"\">2.1 准备工作\u003C/span>\u003C/span>\u003C/h3>\u003Ch4 data-tool=\"mdnice编辑器\">\u003Cspan class=\"js_darkmode__51\">\u003Cspan leaf=\"\">2.1.1 系统内核参数调优\u003C/span>\u003C/span>\u003C/h4>\u003Cp data-tool=\"mdnice编辑器\" class=\"js_darkmode__52\">\u003Cspan leaf=\"\">在动Nginx配置之前，得先把操作系统底子打好。很多人忽略了这一步，结果Nginx配得再好也白搭。\u003C/span>\u003C/p>\u003Cpre data-tool=\"mdnice编辑器\" class=\"js_darkmode__53\">\u003Cspan data-cacheurl=\"\" data-remoteid=\"\" data-lazy-bgimg=\"https://mmbiz.qpic.cn/mmbiz_svg/vtnuMBibofcZATzCe7PsSEpeUhObicFUoIgKXw8XWhGkQeLA9oicBia3S3ZQ1g7RJVRSenCN4eaibW2NjdOeU8RXhs6Tic8eSNEMxt/640?wx_fmt=svg&amp;from=appmsg\" class=\"js_darkmode__bg__0 js_darkmode__54\" data-fail=\"0\">\u003C/span>\u003Ccode class=\"js_darkmode__55\">\u003Cspan class=\"js_darkmode__56\"># /etc/sysctl.conf 追加以下内容\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan class=\"js_darkmode__57\"># 文件描述符限制\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">fs.file-max = 2097152\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">fs.nr_open = 2097152\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan class=\"js_darkmode__58\"># TCP连接相关\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">net.core.somaxconn = 65535\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">net.core.netdev_max_backlog = 65535\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">net.ipv4.tcp_max_syn_backlog = 65535\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan class=\"js_darkmode__59\"># TIME_WAIT优化（这个参数救过我无数次）\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">net.ipv4.tcp_tw_reuse = 1\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">net.ipv4.tcp_fin_timeout = 15\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">net.ipv4.tcp_max_tw_buckets = 262144\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan class=\"js_darkmode__60\"># TCP keepalive\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">net.ipv4.tcp_keepalive_time = 600\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">net.ipv4.tcp_keepalive_intvl = 30\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">net.ipv4.tcp_keepalive_probes = 3\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan class=\"js_darkmode__61\"># 网络缓冲区\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">net.core.rmem_max = 16777216\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">net.core.wmem_max = 16777216\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">net.ipv4.tcp_rmem = 4096 87380 16777216\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">net.ipv4.tcp_wmem = 4096 65536 16777216\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan class=\"js_darkmode__62\"># 本地端口范围\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">net.ipv4.ip_local_port_range = 1024 65535\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003C/code>\u003C/pre>\u003Cp data-tool=\"mdnice编辑器\" class=\"js_darkmode__63\">\u003Cspan leaf=\"\">应用配置：\u003C/span>\u003C/p>\u003Cpre data-tool=\"mdnice编辑器\" class=\"js_darkmode__64\">\u003Cspan data-cacheurl=\"\" data-remoteid=\"\" data-lazy-bgimg=\"https://mmbiz.qpic.cn/mmbiz_svg/vtnuMBibofcZATzCe7PsSEpeUhObicFUoIgKXw8XWhGkQeLA9oicBia3S3ZQ1g7RJVRSenCN4eaibW2NjdOeU8RXhs6Tic8eSNEMxt/640?wx_fmt=svg&amp;from=appmsg\" class=\"js_darkmode__bg__1 js_darkmode__65\" data-fail=\"0\">\u003C/span>\u003Ccode class=\"js_darkmode__66\">\u003Cspan leaf=\"\">sysctl -p\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003C/code>\u003C/pre>\u003Ch4 data-tool=\"mdnice编辑器\">\u003Cspan class=\"js_darkmode__67\">\u003Cspan leaf=\"\">2.1.2 文件描述符限制\u003C/span>\u003C/span>\u003C/h4>\u003Cp data-tool=\"mdnice编辑器\" class=\"js_darkmode__68\">\u003Cspan leaf=\"\">这是个老生常谈的问题了，但每次接手新项目还是会遇到。Nginx报\"Too many open files\"错误，十有八九就是这个没配好。\u003C/span>\u003C/p>\u003Cpre data-tool=\"mdnice编辑器\" class=\"js_darkmode__69\">\u003Cspan data-cacheurl=\"\" data-remoteid=\"\" data-lazy-bgimg=\"https://mmbiz.qpic.cn/mmbiz_svg/vtnuMBibofcZATzCe7PsSEpeUhObicFUoIgKXw8XWhGkQeLA9oicBia3S3ZQ1g7RJVRSenCN4eaibW2NjdOeU8RXhs6Tic8eSNEMxt/640?wx_fmt=svg&amp;from=appmsg\" class=\"js_darkmode__bg__2 js_darkmode__70\" data-fail=\"0\">\u003C/span>\u003Ccode class=\"js_darkmode__71\">\u003Cspan class=\"js_darkmode__72\"># /etc/security/limits.conf\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">* soft nofile 1048576\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">* hard nofile 1048576\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">nginx soft nofile 1048576\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">nginx hard nofile 1048576\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan class=\"js_darkmode__73\"># /etc/systemd/system/nginx.service.d/override.conf\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">[Service]\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">LimitNOFILE=1048576\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003C/code>\u003C/pre>\u003Ch3 data-tool=\"mdnice编辑器\">\u003Cspan class=\"js_darkmode__74\">\u003Cspan leaf=\"\">2.2 核心配置\u003C/span>\u003C/span>\u003C/h3>\u003Ch4 data-tool=\"mdnice编辑器\">\u003Cspan class=\"js_darkmode__75\">\u003Cspan leaf=\"\">法则1：worker进程数量配置\u003C/span>\u003C/span>\u003C/h4>\u003Cpre data-tool=\"mdnice编辑器\" class=\"js_darkmode__76\">\u003Cspan data-cacheurl=\"\" data-remoteid=\"\" data-lazy-bgimg=\"https://mmbiz.qpic.cn/mmbiz_svg/vtnuMBibofcZATzCe7PsSEpeUhObicFUoIgKXw8XWhGkQeLA9oicBia3S3ZQ1g7RJVRSenCN4eaibW2NjdOeU8RXhs6Tic8eSNEMxt/640?wx_fmt=svg&amp;from=appmsg\" class=\"js_darkmode__bg__3 js_darkmode__77\" data-fail=\"0\">\u003C/span>\u003Ccode class=\"js_darkmode__78\">\u003Cspan leaf=\"\"># 自动检测CPU核心数，省心省力\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">worker_processes auto;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\"># 或者手动指定，建议等于CPU核心数\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\"># worker_processes 8;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\"># CPU亲和性绑定，减少CPU缓存失效\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">worker_cpu_affinity auto;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003C/code>\u003C/pre>\u003Cp data-tool=\"mdnice编辑器\" class=\"js_darkmode__79\">\u003Cstrong class=\"js_darkmode__80\">踩坑记录\u003C/strong>\u003Cspan leaf=\"\">：早期我喜欢把worker_processes设成CPU核心数的2倍，觉得这样能处理更多请求。结果发现这是典型的过度优化，多出来的worker进程反而增加了上下文切换开销，QPS不升反降。\u003C/span>\u003C/p>\u003Ch4 data-tool=\"mdnice编辑器\">\u003Cspan class=\"js_darkmode__81\">\u003Cspan leaf=\"\">法则2：worker连接数配置\u003C/span>\u003C/span>\u003C/h4>\u003Cpre data-tool=\"mdnice编辑器\" class=\"js_darkmode__82\">\u003Cspan data-cacheurl=\"\" data-remoteid=\"\" data-lazy-bgimg=\"https://mmbiz.qpic.cn/mmbiz_svg/vtnuMBibofcZATzCe7PsSEpeUhObicFUoIgKXw8XWhGkQeLA9oicBia3S3ZQ1g7RJVRSenCN4eaibW2NjdOeU8RXhs6Tic8eSNEMxt/640?wx_fmt=svg&amp;from=appmsg\" class=\"js_darkmode__bg__4 js_darkmode__83\" data-fail=\"0\">\u003C/span>\u003Ccode class=\"js_darkmode__84\">\u003Cspan leaf=\"\">events {\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; # 每个worker的最大连接数\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; # 理论最大并发 = worker_processes * worker_connections\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; worker_connections 65535;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; # 使用epoll事件模型（Linux 2.6+必选）\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; use epoll;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; # 允许一个worker进程同时接受多个新连接\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; multi_accept on;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; # 互斥锁，高并发场景建议关闭\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; accept_mutex off;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">}\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003C/code>\u003C/pre>\u003Ch4 data-tool=\"mdnice编辑器\">\u003Cspan class=\"js_darkmode__85\">\u003Cspan leaf=\"\">法则3：文件描述符缓存\u003C/span>\u003C/span>\u003C/h4>\u003Cpre data-tool=\"mdnice编辑器\" class=\"js_darkmode__86\">\u003Cspan data-cacheurl=\"\" data-remoteid=\"\" data-lazy-bgimg=\"https://mmbiz.qpic.cn/mmbiz_svg/vtnuMBibofcZATzCe7PsSEpeUhObicFUoIgKXw8XWhGkQeLA9oicBia3S3ZQ1g7RJVRSenCN4eaibW2NjdOeU8RXhs6Tic8eSNEMxt/640?wx_fmt=svg&amp;from=appmsg\" class=\"js_darkmode__bg__5 js_darkmode__87\" data-fail=\"0\">\u003C/span>\u003Ccode class=\"js_darkmode__88\">\u003Cspan leaf=\"\"># main context\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">worker_rlimit_nofile 1048576;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003C/code>\u003C/pre>\u003Ch4 data-tool=\"mdnice编辑器\">\u003Cspan class=\"js_darkmode__89\">\u003Cspan leaf=\"\">法则4：sendfile零拷贝\u003C/span>\u003C/span>\u003C/h4>\u003Cpre data-tool=\"mdnice编辑器\" class=\"js_darkmode__90\">\u003Cspan data-cacheurl=\"\" data-remoteid=\"\" data-lazy-bgimg=\"https://mmbiz.qpic.cn/mmbiz_svg/vtnuMBibofcZATzCe7PsSEpeUhObicFUoIgKXw8XWhGkQeLA9oicBia3S3ZQ1g7RJVRSenCN4eaibW2NjdOeU8RXhs6Tic8eSNEMxt/640?wx_fmt=svg&amp;from=appmsg\" class=\"js_darkmode__bg__6 js_darkmode__91\" data-fail=\"0\">\u003C/span>\u003Ccode class=\"js_darkmode__92\">\u003Cspan leaf=\"\">http {\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; # 开启sendfile，避免用户态和内核态之间的数据拷贝\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; sendfile on;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; # 配合sendfile使用，减少网络报文段数量\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; tcp_nopush on;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; # 禁用Nagle算法，减少延迟\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; tcp_nodelay on;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">}\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003C/code>\u003C/pre>\u003Cp data-tool=\"mdnice编辑器\" class=\"js_darkmode__93\">\u003Cstrong class=\"js_darkmode__94\">原理解释\u003C/strong>\u003Cspan leaf=\"\">：传统文件发送需要经历\"磁盘-&gt;内核缓冲区-&gt;用户缓冲区-&gt;socket缓冲区\"四次拷贝。sendfile直接在内核态完成\"磁盘-&gt;socket缓冲区\"的数据传输，理论上可以提升30%-40%的吞吐量。\u003C/span>\u003C/p>\u003Ch4 data-tool=\"mdnice编辑器\">\u003Cspan class=\"js_darkmode__95\">\u003Cspan leaf=\"\">法则5：超时配置\u003C/span>\u003C/span>\u003C/h4>\u003Cpre data-tool=\"mdnice编辑器\" class=\"js_darkmode__96\">\u003Cspan data-cacheurl=\"\" data-remoteid=\"\" data-lazy-bgimg=\"https://mmbiz.qpic.cn/mmbiz_svg/vtnuMBibofcZATzCe7PsSEpeUhObicFUoIgKXw8XWhGkQeLA9oicBia3S3ZQ1g7RJVRSenCN4eaibW2NjdOeU8RXhs6Tic8eSNEMxt/640?wx_fmt=svg&amp;from=appmsg\" class=\"js_darkmode__bg__7 js_darkmode__97\" data-fail=\"0\">\u003C/span>\u003Ccode class=\"js_darkmode__98\">\u003Cspan leaf=\"\">http {\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; # 客户端请求头超时\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; client_header_timeout 15s;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; # 客户端请求体超时\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; client_body_timeout 15s;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; # 响应超时\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; send_timeout 15s;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; # keepalive超时\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; keepalive_timeout 65s;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; # keepalive请求数量限制\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; keepalive_requests 10000;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">}\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003C/code>\u003C/pre>\u003Cp data-tool=\"mdnice编辑器\" class=\"js_darkmode__99\">\u003Cstrong class=\"js_darkmode__100\">踩坑记录\u003C/strong>\u003Cspan leaf=\"\">：曾经有个项目，上传大文件总是失败。排查半天发现是client_body_timeout设成了10秒，但大文件上传需要更长时间。生产环境这个值建议根据实际业务调整，不要一刀切。\u003C/span>\u003C/p>\u003Ch4 data-tool=\"mdnice编辑器\">\u003Cspan class=\"js_darkmode__101\">\u003Cspan leaf=\"\">法则6：缓冲区配置\u003C/span>\u003C/span>\u003C/h4>\u003Cpre data-tool=\"mdnice编辑器\" class=\"js_darkmode__102\">\u003Cspan data-cacheurl=\"\" data-remoteid=\"\" data-lazy-bgimg=\"https://mmbiz.qpic.cn/mmbiz_svg/vtnuMBibofcZATzCe7PsSEpeUhObicFUoIgKXw8XWhGkQeLA9oicBia3S3ZQ1g7RJVRSenCN4eaibW2NjdOeU8RXhs6Tic8eSNEMxt/640?wx_fmt=svg&amp;from=appmsg\" class=\"js_darkmode__bg__8 js_darkmode__103\" data-fail=\"0\">\u003C/span>\u003Ccode class=\"js_darkmode__104\">\u003Cspan leaf=\"\">http {\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; # 客户端请求体缓冲区\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; client_body_buffer_size 128k;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; client_max_body_size 100m;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; # 请求头缓冲区\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; client_header_buffer_size 4k;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; large_client_header_buffers 4 32k;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; # 代理缓冲区\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; proxy_buffer_size 64k;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; proxy_buffers 8 128k;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; proxy_busy_buffers_size 256k;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">}\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003C/code>\u003C/pre>\u003Ch4 data-tool=\"mdnice编辑器\">\u003Cspan class=\"js_darkmode__105\">\u003Cspan leaf=\"\">法则7：Gzip压缩\u003C/span>\u003C/span>\u003C/h4>\u003Cpre data-tool=\"mdnice编辑器\" class=\"js_darkmode__106\">\u003Cspan data-cacheurl=\"\" data-remoteid=\"\" data-lazy-bgimg=\"https://mmbiz.qpic.cn/mmbiz_svg/vtnuMBibofcZATzCe7PsSEpeUhObicFUoIgKXw8XWhGkQeLA9oicBia3S3ZQ1g7RJVRSenCN4eaibW2NjdOeU8RXhs6Tic8eSNEMxt/640?wx_fmt=svg&amp;from=appmsg\" class=\"js_darkmode__bg__9 js_darkmode__107\" data-fail=\"0\">\u003C/span>\u003Ccode class=\"js_darkmode__108\">\u003Cspan leaf=\"\">http {\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; gzip on;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; gzip_vary on;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; gzip_proxied any;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; # 压缩级别1-9，建议4-6，太高CPU消耗大\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; gzip_comp_level 5;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; # 最小压缩长度，太小的文件压缩反而浪费CPU\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; gzip_min_length 1024;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; # 压缩类型\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; gzip_types\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; text/plain\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; text/css\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; text/javascript\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; application/javascript\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; application/json\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; application/xml\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; application/xml+rss\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; image/svg+xml;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; # 预压缩文件支持\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; gzip_static on;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">}\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003C/code>\u003C/pre>\u003Cp data-tool=\"mdnice编辑器\" class=\"js_darkmode__109\">\u003Cstrong class=\"js_darkmode__110\">性能对比\u003C/strong>\u003Cspan leaf=\"\">：\u003C/span>\u003C/p>\u003Csection data-tool=\"mdnice编辑器\">\u003Ctable class=\"layui-table\">\u003Cthead>\u003Ctr>\u003Cth class=\"js_darkmode__111\" style=\"text-align: left;\">\u003Csection>\u003Cspan leaf=\"\">压缩级别\u003C/span>\u003C/section>\u003C/th>\u003Cth class=\"js_darkmode__112\" style=\"text-align: left;\">\u003Csection>\u003Cspan leaf=\"\">压缩率\u003C/span>\u003C/section>\u003C/th>\u003Cth class=\"js_darkmode__113\" style=\"text-align: left;\">\u003Csection>\u003Cspan leaf=\"\">CPU消耗\u003C/span>\u003C/section>\u003C/th>\u003Cth class=\"js_darkmode__114\" style=\"text-align: left;\">\u003Csection>\u003Cspan leaf=\"\">适用场景\u003C/span>\u003C/section>\u003C/th>\u003C/tr>\u003C/thead>\u003Ctbody>\u003Ctr class=\"js_darkmode__115\">\u003Ctd class=\"js_darkmode__116\">\u003Csection>\u003Cspan leaf=\"\">1\u003C/span>\u003C/section>\u003C/td>\u003Ctd class=\"js_darkmode__117\">\u003Csection>\u003Cspan leaf=\"\">低\u003C/span>\u003C/section>\u003C/td>\u003Ctd class=\"js_darkmode__118\">\u003Csection>\u003Cspan leaf=\"\">最低\u003C/span>\u003C/section>\u003C/td>\u003Ctd class=\"js_darkmode__119\">\u003Csection>\u003Cspan leaf=\"\">CPU受限环境\u003C/span>\u003C/section>\u003C/td>\u003C/tr>\u003Ctr class=\"js_darkmode__120\">\u003Ctd class=\"js_darkmode__121\">\u003Csection>\u003Cspan leaf=\"\">4-5\u003C/span>\u003C/section>\u003C/td>\u003Ctd class=\"js_darkmode__122\">\u003Csection>\u003Cspan leaf=\"\">中\u003C/span>\u003C/section>\u003C/td>\u003Ctd class=\"js_darkmode__123\">\u003Csection>\u003Cspan leaf=\"\">中等\u003C/span>\u003C/section>\u003C/td>\u003Ctd class=\"js_darkmode__124\">\u003Csection>\u003Cspan leaf=\"\">通用场景（推荐）\u003C/span>\u003C/section>\u003C/td>\u003C/tr>\u003Ctr class=\"js_darkmode__125\">\u003Ctd class=\"js_darkmode__126\">\u003Csection>\u003Cspan leaf=\"\">9\u003C/span>\u003C/section>\u003C/td>\u003Ctd class=\"js_darkmode__127\">\u003Csection>\u003Cspan leaf=\"\">高\u003C/span>\u003C/section>\u003C/td>\u003Ctd class=\"js_darkmode__128\">\u003Csection>\u003Cspan leaf=\"\">最高\u003C/span>\u003C/section>\u003C/td>\u003Ctd class=\"js_darkmode__129\">\u003Csection>\u003Cspan leaf=\"\">带宽极其昂贵\u003C/span>\u003C/section>\u003C/td>\u003C/tr>\u003C/tbody>\u003C/table>\u003C/section>\u003Ch4 data-tool=\"mdnice编辑器\">\u003Cspan class=\"js_darkmode__130\">\u003Cspan leaf=\"\">法则8：静态文件缓存\u003C/span>\u003C/span>\u003C/h4>\u003Cpre data-tool=\"mdnice编辑器\" class=\"js_darkmode__131\">\u003Cspan data-cacheurl=\"\" data-remoteid=\"\" data-lazy-bgimg=\"https://mmbiz.qpic.cn/mmbiz_svg/vtnuMBibofcZATzCe7PsSEpeUhObicFUoIgKXw8XWhGkQeLA9oicBia3S3ZQ1g7RJVRSenCN4eaibW2NjdOeU8RXhs6Tic8eSNEMxt/640?wx_fmt=svg&amp;from=appmsg\" class=\"js_darkmode__bg__10 js_darkmode__132\" data-fail=\"0\">\u003C/span>\u003Ccode class=\"js_darkmode__133\">\u003Cspan leaf=\"\">http {\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; # 打开文件缓存\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; open_file_cache max=100000 inactive=60s;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; open_file_cache_valid 60s;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; open_file_cache_min_uses 2;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; open_file_cache_errors on;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">}\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">server {\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; location ~* \\.(jpg|jpeg|png|gif|ico|css|js|woff2)$ {\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; expires 30d;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; add_header Cache-Control \"public, immutable\";\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; access_log off;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; }\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">}\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003C/code>\u003C/pre>\u003Ch4 data-tool=\"mdnice编辑器\">\u003Cspan class=\"js_darkmode__134\">\u003Cspan leaf=\"\">法则9：日志优化\u003C/span>\u003C/span>\u003C/h4>\u003Cpre data-tool=\"mdnice编辑器\" class=\"js_darkmode__135\">\u003Cspan data-cacheurl=\"\" data-remoteid=\"\" data-lazy-bgimg=\"https://mmbiz.qpic.cn/mmbiz_svg/vtnuMBibofcZATzCe7PsSEpeUhObicFUoIgKXw8XWhGkQeLA9oicBia3S3ZQ1g7RJVRSenCN4eaibW2NjdOeU8RXhs6Tic8eSNEMxt/640?wx_fmt=svg&amp;from=appmsg\" class=\"js_darkmode__bg__11 js_darkmode__136\" data-fail=\"0\">\u003C/span>\u003Ccode class=\"js_darkmode__137\">\u003Cspan leaf=\"\">http {\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; # 使用缓冲写入，减少磁盘IO\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; access_log /var/log/nginx/access.log main buffer=64k flush=5s;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; # 或者对于高并发场景，考虑关闭access log\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; # access_log off;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; # 错误日志级别\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; error_log /var/log/nginx/error.log warn;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">}\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003C/code>\u003C/pre>\u003Cp data-tool=\"mdnice编辑器\" class=\"js_darkmode__138\">\u003Cstrong class=\"js_darkmode__139\">血泪教训\u003C/strong>\u003Cspan leaf=\"\">：生产环境日志不要开debug级别！我曾经为了排查问题临时开了debug，结果磁盘一会儿就满了，服务直接挂掉。\u003C/span>\u003C/p>\u003Ch4 data-tool=\"mdnice编辑器\">\u003Cspan class=\"js_darkmode__140\">\u003Cspan leaf=\"\">法则10：SSL/TLS优化\u003C/span>\u003C/span>\u003C/h4>\u003Cpre data-tool=\"mdnice编辑器\" class=\"js_darkmode__141\">\u003Cspan data-cacheurl=\"\" data-remoteid=\"\" data-lazy-bgimg=\"https://mmbiz.qpic.cn/mmbiz_svg/vtnuMBibofcZATzCe7PsSEpeUhObicFUoIgKXw8XWhGkQeLA9oicBia3S3ZQ1g7RJVRSenCN4eaibW2NjdOeU8RXhs6Tic8eSNEMxt/640?wx_fmt=svg&amp;from=appmsg\" class=\"js_darkmode__bg__12 js_darkmode__142\" data-fail=\"0\">\u003C/span>\u003Ccode class=\"js_darkmode__143\">\u003Cspan leaf=\"\">http {\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; # SSL会话缓存\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; ssl_session_cache shared:SSL:50m;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; ssl_session_timeout 1d;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; ssl_session_tickets on;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; # SSL协议版本\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; ssl_protocols TLSv1.2 TLSv1.3;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; # 优先使用服务器端加密套件\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; ssl_prefer_server_ciphers off;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; # TLS 1.3加密套件\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; # OCSP Stapling\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; ssl_stapling on;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; ssl_stapling_verify on;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; resolver 8.8.8.8 8.8.4.4 valid=300s;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">}\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003C/code>\u003C/pre>\u003Ch4 data-tool=\"mdnice编辑器\">\u003Cspan class=\"js_darkmode__144\">\u003Cspan leaf=\"\">法则11：HTTP/2配置\u003C/span>\u003C/span>\u003C/h4>\u003Cpre data-tool=\"mdnice编辑器\" class=\"js_darkmode__145\">\u003Cspan data-cacheurl=\"\" data-remoteid=\"\" data-lazy-bgimg=\"https://mmbiz.qpic.cn/mmbiz_svg/vtnuMBibofcZATzCe7PsSEpeUhObicFUoIgKXw8XWhGkQeLA9oicBia3S3ZQ1g7RJVRSenCN4eaibW2NjdOeU8RXhs6Tic8eSNEMxt/640?wx_fmt=svg&amp;from=appmsg\" class=\"js_darkmode__bg__13 js_darkmode__146\" data-fail=\"0\">\u003C/span>\u003Ccode class=\"js_darkmode__147\">\u003Cspan leaf=\"\">server {\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; listen 443 ssl;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; http2 on;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; # HTTP/2推送（Nginx 1.25.1+）\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; # 注意：主流浏览器已逐步废弃Server Push\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">}\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003C/code>\u003C/pre>\u003Ch4 data-tool=\"mdnice编辑器\">\u003Cspan class=\"js_darkmode__148\">\u003Cspan leaf=\"\">法则12：连接复用优化\u003C/span>\u003C/span>\u003C/h4>\u003Cpre data-tool=\"mdnice编辑器\" class=\"js_darkmode__149\">\u003Cspan data-cacheurl=\"\" data-remoteid=\"\" data-lazy-bgimg=\"https://mmbiz.qpic.cn/mmbiz_svg/vtnuMBibofcZATzCe7PsSEpeUhObicFUoIgKXw8XWhGkQeLA9oicBia3S3ZQ1g7RJVRSenCN4eaibW2NjdOeU8RXhs6Tic8eSNEMxt/640?wx_fmt=svg&amp;from=appmsg\" class=\"js_darkmode__bg__14 js_darkmode__150\" data-fail=\"0\">\u003C/span>\u003Ccode class=\"js_darkmode__151\">\u003Cspan leaf=\"\">upstream backend {\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; server 10.0.0.1:8080;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; server 10.0.0.2:8080;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; # 与后端保持的连接数\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; keepalive 300;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; # 单个连接最大请求数\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; keepalive_requests 10000;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; # 连接超时\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; keepalive_timeout 60s;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">}\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">server {\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; location /api/ {\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; proxy_pass http://backend;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; # 必须使用HTTP/1.1才能使用keepalive\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; proxy_http_version 1.1;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; proxy_set_header Connection \"\";\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; }\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">}\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003C/code>\u003C/pre>\u003Cp data-tool=\"mdnice编辑器\" class=\"js_darkmode__152\">\u003Cstrong class=\"js_darkmode__153\">这条救命配置\u003C/strong>\u003Cspan leaf=\"\">：很多人配了upstream的keepalive但不生效，99%是因为没加\u003C/span>\u003Ccode class=\"js_darkmode__154\">\u003Cspan leaf=\"\">proxy_set_header Connection \"\"\u003C/span>\u003C/code>\u003Cspan leaf=\"\">。默认情况下Nginx会把Connection头设成close，导致每次请求都新建连接。\u003C/span>\u003C/p>\u003Ch4 data-tool=\"mdnice编辑器\">\u003Cspan class=\"js_darkmode__155\">\u003Cspan leaf=\"\">法则13：负载均衡算法选择\u003C/span>\u003C/span>\u003C/h4>\u003Cpre data-tool=\"mdnice编辑器\" class=\"js_darkmode__156\">\u003Cspan data-cacheurl=\"\" data-remoteid=\"\" data-lazy-bgimg=\"https://mmbiz.qpic.cn/mmbiz_svg/vtnuMBibofcZATzCe7PsSEpeUhObicFUoIgKXw8XWhGkQeLA9oicBia3S3ZQ1g7RJVRSenCN4eaibW2NjdOeU8RXhs6Tic8eSNEMxt/640?wx_fmt=svg&amp;from=appmsg\" class=\"js_darkmode__bg__15 js_darkmode__157\" data-fail=\"0\">\u003C/span>\u003Ccode class=\"js_darkmode__158\">\u003Cspan leaf=\"\">upstream backend {\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; # 最少连接数算法，推荐\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; least_conn;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; # 或者IP哈希（需要会话保持时使用）\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; # ip_hash;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; # 或者一致性哈希\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; # hash $request_uri consistent;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; server 10.0.0.1:8080 weight=3;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; server 10.0.0.2:8080 weight=2;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; server 10.0.0.3:8080 weight=1 backup;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">}\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003C/code>\u003C/pre>\u003Ch4 data-tool=\"mdnice编辑器\">\u003Cspan class=\"js_darkmode__159\">\u003Cspan leaf=\"\">法则14：健康检查\u003C/span>\u003C/span>\u003C/h4>\u003Cpre data-tool=\"mdnice编辑器\" class=\"js_darkmode__160\">\u003Cspan data-cacheurl=\"\" data-remoteid=\"\" data-lazy-bgimg=\"https://mmbiz.qpic.cn/mmbiz_svg/vtnuMBibofcZATzCe7PsSEpeUhObicFUoIgKXw8XWhGkQeLA9oicBia3S3ZQ1g7RJVRSenCN4eaibW2NjdOeU8RXhs6Tic8eSNEMxt/640?wx_fmt=svg&amp;from=appmsg\" class=\"js_darkmode__bg__16 js_darkmode__161\" data-fail=\"0\">\u003C/span>\u003Ccode class=\"js_darkmode__162\">\u003Cspan leaf=\"\">upstream backend {\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; server 10.0.0.1:8080 max_fails=3 fail_timeout=30s;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; server 10.0.0.2:8080 max_fails=3 fail_timeout=30s;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">}\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003C/code>\u003C/pre>\u003Cp data-tool=\"mdnice编辑器\" class=\"js_darkmode__163\">\u003Cspan leaf=\"\">开源版Nginx的健康检查比较弱，只能被动检测。如果需要主动健康检查，建议：\u003C/span>\u003C/p>\u003Cul class=\"list-paddingleft-1 js_darkmode__164\">\u003Cli>\u003Csection class=\"js_darkmode__165\">\u003Cspan leaf=\"\">使用Nginx Plus（商业版）\u003C/span>\u003C/section>\u003C/li>\u003Cli>\u003Csection class=\"js_darkmode__166\">\u003Cspan leaf=\"\">使用第三方模块nginx_upstream_check_module\u003C/span>\u003C/section>\u003C/li>\u003Cli>\u003Csection class=\"js_darkmode__167\">\u003Cspan leaf=\"\">使用OpenResty\u003C/span>\u003C/section>\u003C/li>\u003C/ul>\u003Ch4 data-tool=\"mdnice编辑器\">\u003Cspan class=\"js_darkmode__168\">\u003Cspan leaf=\"\">法则15：请求限流\u003C/span>\u003C/span>\u003C/h4>\u003Cpre data-tool=\"mdnice编辑器\" class=\"js_darkmode__169\">\u003Cspan data-cacheurl=\"\" data-remoteid=\"\" data-lazy-bgimg=\"https://mmbiz.qpic.cn/mmbiz_svg/vtnuMBibofcZATzCe7PsSEpeUhObicFUoIgKXw8XWhGkQeLA9oicBia3S3ZQ1g7RJVRSenCN4eaibW2NjdOeU8RXhs6Tic8eSNEMxt/640?wx_fmt=svg&amp;from=appmsg\" class=\"js_darkmode__bg__17 js_darkmode__170\" data-fail=\"0\">\u003C/span>\u003Ccode class=\"js_darkmode__171\">\u003Cspan leaf=\"\">http {\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; # 定义限流区域\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; limit_req_zone $binary_remote_addr zone=api_limit:10m rate=100r/s;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; limit_conn_zone $binary_remote_addr zone=conn_limit:10m;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">}\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">server {\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; location /api/ {\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; # 请求速率限制\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; limit_req zone=api_limit burst=200 nodelay;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; # 并发连接限制\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; limit_conn conn_limit 50;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; # 限流返回码\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; limit_req_status 429;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; limit_conn_status 429;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; }\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">}\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003C/code>\u003C/pre>\u003Ch4 data-tool=\"mdnice编辑器\">\u003Cspan class=\"js_darkmode__172\">\u003Cspan leaf=\"\">法则16：proxy优化\u003C/span>\u003C/span>\u003C/h4>\u003Cpre data-tool=\"mdnice编辑器\" class=\"js_darkmode__173\">\u003Cspan data-cacheurl=\"\" data-remoteid=\"\" data-lazy-bgimg=\"https://mmbiz.qpic.cn/mmbiz_svg/vtnuMBibofcZATzCe7PsSEpeUhObicFUoIgKXw8XWhGkQeLA9oicBia3S3ZQ1g7RJVRSenCN4eaibW2NjdOeU8RXhs6Tic8eSNEMxt/640?wx_fmt=svg&amp;from=appmsg\" class=\"js_darkmode__bg__18 js_darkmode__174\" data-fail=\"0\">\u003C/span>\u003Ccode class=\"js_darkmode__175\">\u003Cspan leaf=\"\">location /api/ {\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; proxy_pass http://backend;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; # 连接超时\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; proxy_connect_timeout 5s;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; proxy_send_timeout 60s;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; proxy_read_timeout 60s;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; # 失败重试\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; proxy_next_upstream error timeout http_502 http_503;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; proxy_next_upstream_tries 3;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; proxy_next_upstream_timeout 10s;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; # 请求头传递\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; proxy_set_header Host $host;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; proxy_set_header X-Real-IP $remote_addr;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; proxy_set_header X-Forwarded-Proto $scheme;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">}\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003C/code>\u003C/pre>\u003Ch4 data-tool=\"mdnice编辑器\">\u003Cspan class=\"js_darkmode__176\">\u003Cspan leaf=\"\">法则17：缓存配置\u003C/span>\u003C/span>\u003C/h4>\u003Cpre data-tool=\"mdnice编辑器\" class=\"js_darkmode__177\">\u003Cspan data-cacheurl=\"\" data-remoteid=\"\" data-lazy-bgimg=\"https://mmbiz.qpic.cn/mmbiz_svg/vtnuMBibofcZATzCe7PsSEpeUhObicFUoIgKXw8XWhGkQeLA9oicBia3S3ZQ1g7RJVRSenCN4eaibW2NjdOeU8RXhs6Tic8eSNEMxt/640?wx_fmt=svg&amp;from=appmsg\" class=\"js_darkmode__bg__19 js_darkmode__178\" data-fail=\"0\">\u003C/span>\u003Ccode class=\"js_darkmode__179\">\u003Cspan leaf=\"\">http {\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; # 定义缓存路径\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; proxy_cache_path /var/cache/nginx levels=1:2\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; keys_zone=api_cache:100m\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; max_size=10g\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; inactive=60m\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; use_temp_path=off;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">}\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">server {\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; location /api/public/ {\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; proxy_pass http://backend;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; proxy_cache api_cache;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; proxy_cache_valid 200 10m;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; proxy_cache_valid 404 1m;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; proxy_cache_use_stale error timeout updating;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; proxy_cache_lock on;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; add_header X-Cache-Status $upstream_cache_status;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; }\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">}\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003C/code>\u003C/pre>\u003Ch4 data-tool=\"mdnice编辑器\">\u003Cspan class=\"js_darkmode__180\">\u003Cspan leaf=\"\">法则18：安全加固\u003C/span>\u003C/span>\u003C/h4>\u003Cpre data-tool=\"mdnice编辑器\" class=\"js_darkmode__181\">\u003Cspan data-cacheurl=\"\" data-remoteid=\"\" data-lazy-bgimg=\"https://mmbiz.qpic.cn/mmbiz_svg/vtnuMBibofcZATzCe7PsSEpeUhObicFUoIgKXw8XWhGkQeLA9oicBia3S3ZQ1g7RJVRSenCN4eaibW2NjdOeU8RXhs6Tic8eSNEMxt/640?wx_fmt=svg&amp;from=appmsg\" class=\"js_darkmode__bg__20 js_darkmode__182\" data-fail=\"0\">\u003C/span>\u003Ccode class=\"js_darkmode__183\">\u003Cspan leaf=\"\">http {\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; # 隐藏版本号\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; server_tokens off;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; # 安全响应头\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; add_header X-Frame-Options \"SAMEORIGIN\" always;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; add_header X-Content-Type-Options \"nosniff\" always;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; add_header X-XSS-Protection \"1; mode=block\" always;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; add_header Referrer-Policy \"strict-origin-when-cross-origin\" always;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">}\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">server {\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; # 禁止访问隐藏文件\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; location ~ /\\. {\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; deny all;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; access_log off;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; &nbsp; &nbsp; log_not_found off;\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">&nbsp; &nbsp; }\u003C/span>\u003Cspan leaf=\"\">\u003Cbr>\u003C/span>\u003Cspan leaf=\"\">}\u003C/span>\u003C/code>\u003C/pre>","# 一、概述\n\n### 1.1 背景介绍\n\n说实话，Nginx调优这事儿我踩过无数坑。记得2019年双11，我们电商平台流量暴涨，Nginx直接扛不住了，QPS从平时的2万飙升到8万，响应时间从50ms飙到了2秒，最后还是靠临时加机器扛过去的。那次事故之后，我花了大半年时间专门研究Nginx的性能极限，总结出了这20条黄金法则。\n\nNginx作为目前最流行的Web服务器和反向代理，官方数据显示单机可以轻松处理10万+的并发连接。但实际生产环境中，很多同学拿到默认配置就直接上了，结果发现连1万并发都扛不住。问题不在Nginx本身，而在于配置。\n\n### 1.2 技术特点\n\nNginx采用事件驱动的异步非阻塞架构，这跟传统的Apache每个连接一个进程/线程的模式完全不同。打个比方：Apache像是银行柜台，每个客户都需要一个柜员全程服务；Nginx则像是叫号系统，一个柜员可以同时处理多个客户的不同阶段任务。\n\n核心优势：\n\n- 内存占用低：处理10000个非活跃HTTP keep-alive连接仅需2.5MB内存\n- 事件驱动：基于epoll/kqueue，不会因为连接数增加而线性增长CPU消耗\n- 模块化设计：只加载需要的模块，减少资源浪费\n- 热部署：配置修改无需重启，平滑reload\n\n### 1.3 适用场景\n\n- 高并发静态资源服务（图片、CSS、JS、视频）\n- 反向代理和负载均衡\n- API网关\n- SSL/TLS终结点\n- 缓存服务器\n- WebSocket代理\n\n### 1.4 环境要求\n\n组件\n\n版本\n\n说明\n\n操作系统\n\nRocky Linux 9.4 / Ubuntu 24.04 LTS\n\n内核版本建议5.15+\n\nNginx\n\n1.26.2 / 1.27.0\n\nmainline版本功能更新，stable版本更稳定\n\nCPU\n\n8核+\n\nNginx worker数量与CPU核心数相关\n\n内存\n\n16GB+\n\n主要用于连接缓冲和缓存\n\n网络\n\n万兆网卡\n\n千兆网卡在高并发下会成为瓶颈\n\n磁盘\n\nNVMe SSD\n\n日志写入和缓存需要高IOPS\n\n## 二、详细步骤\n\n### 2.1 准备工作\n\n#### 2.1.1 系统内核参数调优\n\n在动Nginx配置之前，得先把操作系统底子打好。很多人忽略了这一步，结果Nginx配得再好也白搭。\n\n```\n# /etc/sysctl.conf 追加以下内容# 文件描述符限制fs.file-max = 2097152fs.nr_open = 2097152# TCP连接相关net.core.somaxconn = 65535net.core.netdev_max_backlog = 65535net.ipv4.tcp_max_syn_backlog = 65535# TIME_WAIT优化（这个参数救过我无数次）net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_fin_timeout = 15net.ipv4.tcp_max_tw_buckets = 262144# TCP keepalivenet.ipv4.tcp_keepalive_time = 600net.ipv4.tcp_keepalive_intvl = 30net.ipv4.tcp_keepalive_probes = 3# 网络缓冲区net.core.rmem_max = 16777216net.core.wmem_max = 16777216net.ipv4.tcp_rmem = 4096 87380 16777216net.ipv4.tcp_wmem = 4096 65536 16777216# 本地端口范围net.ipv4.ip_local_port_range = 1024 65535\n```\n\n应用配置：\n\n```\nsysctl -p\n```\n\n#### 2.1.2 文件描述符限制\n\n这是个老生常谈的问题了，但每次接手新项目还是会遇到。Nginx报\"Too many open files\"错误，十有八九就是这个没配好。\n\n```\n# /etc/security/limits.conf* soft nofile 1048576* hard nofile 1048576nginx soft nofile 1048576nginx hard nofile 1048576# /etc/systemd/system/nginx.service.d/override.conf[Service]LimitNOFILE=1048576\n```\n\n### 2.2 核心配置\n\n#### 法则1：worker进程数量配置\n\n```\n# 自动检测CPU核心数，省心省力worker_processes auto;# 或者手动指定，建议等于CPU核心数# worker_processes 8;# CPU亲和性绑定，减少CPU缓存失效worker_cpu_affinity auto;\n```\n\n**踩坑记录**\n：早期我喜欢把worker_processes设成CPU核心数的2倍，觉得这样能处理更多请求。结果发现这是典型的过度优化，多出来的worker进程反而增加了上下文切换开销，QPS不升反降。\n\n#### 法则2：worker连接数配置\n\n```\nevents {    # 每个worker的最大连接数    # 理论最大并发 = worker_processes * worker_connections    worker_connections 65535;    # 使用epoll事件模型（Linux 2.6+必选）    use epoll;    # 允许一个worker进程同时接受多个新连接    multi_accept on;    # 互斥锁，高并发场景建议关闭    accept_mutex off;}\n```\n\n#### 法则3：文件描述符缓存\n\n```\n# main contextworker_rlimit_nofile 1048576;\n```\n\n#### 法则4：sendfile零拷贝\n\n```\nhttp {    # 开启sendfile，避免用户态和内核态之间的数据拷贝    sendfile on;    # 配合sendfile使用，减少网络报文段数量    tcp_nopush on;    # 禁用Nagle算法，减少延迟    tcp_nodelay on;}\n```\n\n**原理解释**\n：传统文件发送需要经历\"磁盘->内核缓冲区->用户缓冲区->socket缓冲区\"四次拷贝。sendfile直接在内核态完成\"磁盘->socket缓冲区\"的数据传输，理论上可以提升30%-40%的吞吐量。\n\n#### 法则5：超时配置\n\n```\nhttp {    # 客户端请求头超时    client_header_timeout 15s;    # 客户端请求体超时    client_body_timeout 15s;    # 响应超时    send_timeout 15s;    # keepalive超时    keepalive_timeout 65s;    # keepalive请求数量限制    keepalive_requests 10000;}\n```\n\n**踩坑记录**\n：曾经有个项目，上传大文件总是失败。排查半天发现是client_body_timeout设成了10秒，但大文件上传需要更长时间。生产环境这个值建议根据实际业务调整，不要一刀切。\n\n#### 法则6：缓冲区配置\n\n```\nhttp {    # 客户端请求体缓冲区    client_body_buffer_size 128k;    client_max_body_size 100m;    # 请求头缓冲区    client_header_buffer_size 4k;    large_client_header_buffers 4 32k;    # 代理缓冲区    proxy_buffer_size 64k;    proxy_buffers 8 128k;    proxy_busy_buffers_size 256k;}\n```\n\n#### 法则7：Gzip压缩\n\n```\nhttp {    gzip on;    gzip_vary on;    gzip_proxied any;    # 压缩级别1-9，建议4-6，太高CPU消耗大    gzip_comp_level 5;    # 最小压缩长度，太小的文件压缩反而浪费CPU    gzip_min_length 1024;    # 压缩类型    gzip_types        text/plain        text/css        text/javascript        application/javascript        application/json        application/xml        application/xml+rss        image/svg+xml;    # 预压缩文件支持    gzip_static on;}\n```\n\n**性能对比**\n：\n\n压缩级别\n\n压缩率\n\nCPU消耗\n\n适用场景\n\n1\n\n低\n\n最低\n\nCPU受限环境\n\n4-5\n\n中\n\n中等\n\n通用场景（推荐）\n\n9\n\n高\n\n最高\n\n带宽极其昂贵\n\n#### 法则8：静态文件缓存\n\n```\nhttp {    # 打开文件缓存    open_file_cache max=100000 inactive=60s;    open_file_cache_valid 60s;    open_file_cache_min_uses 2;    open_file_cache_errors on;}server {    location ~* \\.(jpg|jpeg|png|gif|ico|css|js|woff2)$ {        expires 30d;        add_header Cache-Control \"public, immutable\";        access_log off;    }}\n```\n\n#### 法则9：日志优化\n\n```\nhttp {    # 使用缓冲写入，减少磁盘IO    access_log /var/log/nginx/access.log main buffer=64k flush=5s;    # 或者对于高并发场景，考虑关闭access log    # access_log off;    # 错误日志级别    error_log /var/log/nginx/error.log warn;}\n```\n\n**血泪教训**\n：生产环境日志不要开debug级别！我曾经为了排查问题临时开了debug，结果磁盘一会儿就满了，服务直接挂掉。\n\n#### 法则10：SSL/TLS优化\n\n```\nhttp {    # SSL会话缓存    ssl_session_cache shared:SSL:50m;    ssl_session_timeout 1d;    ssl_session_tickets on;    # SSL协议版本    ssl_protocols TLSv1.2 TLSv1.3;    # 优先使用服务器端加密套件    ssl_prefer_server_ciphers off;    # TLS 1.3加密套件    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;    # OCSP Stapling    ssl_stapling on;    ssl_stapling_verify on;    resolver 8.8.8.8 8.8.4.4 valid=300s;}\n```\n\n#### 法则11：HTTP/2配置\n\n```\nserver {    listen 443 ssl;    http2 on;    # HTTP/2推送（Nginx 1.25.1+）    # 注意：主流浏览器已逐步废弃Server Push}\n```\n\n#### 法则12：连接复用优化\n\n```\nupstream backend {    server 10.0.0.1:8080;    server 10.0.0.2:8080;    # 与后端保持的连接数    keepalive 300;    # 单个连接最大请求数    keepalive_requests 10000;    # 连接超时    keepalive_timeout 60s;}server {    location /api/ {        proxy_pass http://backend;        # 必须使用HTTP/1.1才能使用keepalive        proxy_http_version 1.1;        proxy_set_header Connection \"\";    }}\n```\n\n**这条救命配置**\n：很多人配了upstream的keepalive但不生效，99%是因为没加\n`\nproxy_set_header Connection \"\"\n`\n。默认情况下Nginx会把Connection头设成close，导致每次请求都新建连接。\n\n#### 法则13：负载均衡算法选择\n\n```\nupstream backend {    # 最少连接数算法，推荐    least_conn;    # 或者IP哈希（需要会话保持时使用）    # ip_hash;    # 或者一致性哈希    # hash $request_uri consistent;    server 10.0.0.1:8080 weight=3;    server 10.0.0.2:8080 weight=2;    server 10.0.0.3:8080 weight=1 backup;}\n```\n\n#### 法则14：健康检查\n\n```\nupstream backend {    server 10.0.0.1:8080 max_fails=3 fail_timeout=30s;    server 10.0.0.2:8080 max_fails=3 fail_timeout=30s;}\n```\n\n开源版Nginx的健康检查比较弱，只能被动检测。如果需要主动健康检查，建议：\n\n- 使用Nginx Plus（商业版）\n- 使用第三方模块nginx_upstream_check_module\n- 使用OpenResty\n\n#### 法则15：请求限流\n\n```\nhttp {    # 定义限流区域    limit_req_zone $binary_remote_addr zone=api_limit:10m rate=100r/s;    limit_conn_zone $binary_remote_addr zone=conn_limit:10m;}server {    location /api/ {        # 请求速率限制        limit_req zone=api_limit burst=200 nodelay;        # 并发连接限制        limit_conn conn_limit 50;        # 限流返回码        limit_req_status 429;        limit_conn_status 429;    }}\n```\n\n#### 法则16：proxy优化\n\n```\nlocation /api/ {    proxy_pass http://backend;    # 连接超时    proxy_connect_timeout 5s;    proxy_send_timeout 60s;    proxy_read_timeout 60s;    # 失败重试    proxy_next_upstream error timeout http_502 http_503;    proxy_next_upstream_tries 3;    proxy_next_upstream_timeout 10s;    # 请求头传递    proxy_set_header Host $host;    proxy_set_header X-Real-IP $remote_addr;    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    proxy_set_header X-Forwarded-Proto $scheme;}\n```\n\n#### 法则17：缓存配置\n\n```\nhttp {    # 定义缓存路径    proxy_cache_path /var/cache/nginx levels=1:2        keys_zone=api_cache:100m        max_size=10g        inactive=60m        use_temp_path=off;}server {    location /api/public/ {        proxy_pass http://backend;        proxy_cache api_cache;        proxy_cache_valid 200 10m;        proxy_cache_valid 404 1m;        proxy_cache_use_stale error timeout updating;        proxy_cache_lock on;        add_header X-Cache-Status $upstream_cache_status;    }}\n```\n\n#### 法则18：安全加固\n\n```\nhttp {    # 隐藏版本号    server_tokens off;    # 安全响应头    add_header X-Frame-Options \"SAMEORIGIN\" always;    add_header X-Content-Type-Options \"nosniff\" always;    add_header X-XSS-Protection \"1; mode=block\" always;    add_header Referrer-Policy \"strict-origin-when-cross-origin\" always;}server {    # 禁止访问隐藏文件    location ~ /\\. {        deny all;        access_log off;        log_not_found off;    }}\n```","/article/122",337,"2026-01-12 11:11:50","2026-01-12 11:12:28",[155,156,157],{"id":39,"name":81,"url":82},{"id":44,"name":23,"url":59},{"id":145,"name":146,"url":150},{"create_time":6,"description":6,"id":44,"image_url":6,"index_template":52,"is_cover":53,"is_menu":53,"keywords":6,"list_template":54,"model_code":55,"model_id":56,"model_name":57,"name":23,"parent_id":39,"seo_description":6,"seo_keywords":6,"seo_title":6,"show_template":58,"sort":53,"subtitle":6,"update_time":6,"url":59},{"title":160,"url":59},"返回列表",{"title":162,"url":163},"用 Prometheus Recording Rules 把告警噪声砍掉 70%(二)","/article/120",[165,166,167,168],{"create_time":6,"description":6,"id":44,"image_url":6,"index_template":52,"is_cover":53,"is_menu":53,"keywords":6,"list_template":54,"model_code":55,"model_id":56,"model_name":57,"name":23,"parent_id":39,"seo_description":6,"seo_keywords":6,"seo_title":6,"show_template":58,"sort":53,"subtitle":6,"update_time":6,"url":59},{"create_time":6,"description":6,"id":45,"image_url":6,"index_template":52,"is_cover":53,"is_menu":53,"keywords":6,"list_template":54,"model_code":55,"model_id":56,"model_name":57,"name":61,"parent_id":39,"seo_description":6,"seo_keywords":6,"seo_title":6,"show_template":58,"sort":56,"subtitle":6,"update_time":6,"url":62},{"create_time":6,"description":6,"id":46,"image_url":6,"index_template":52,"is_cover":53,"is_menu":53,"keywords":6,"list_template":54,"model_code":55,"model_id":56,"model_name":57,"name":64,"parent_id":39,"seo_description":6,"seo_keywords":6,"seo_title":6,"show_template":58,"sort":65,"subtitle":6,"update_time":6,"url":66},{"create_time":6,"description":6,"id":47,"image_url":6,"index_template":52,"is_cover":53,"is_menu":53,"keywords":6,"list_template":54,"model_code":55,"model_id":56,"model_name":57,"name":68,"parent_id":39,"seo_description":6,"seo_keywords":6,"seo_title":6,"show_template":58,"sort":69,"subtitle":6,"update_time":6,"url":70},{"description":147,"keywords":6,"title":146},[171,180,189,198,207,216,225,234,243,251],{"id":172,"category_id":44,"title":173,"keywords":174,"description":175,"image_url":6,"url":176,"hits":177,"is_recommend":73,"is_top":73,"create_time":178,"update_time":179},101,"开启 HTTPS 并获得 ssllabs 满分的过程","开启,获得,满分,过程","准备工作确保你要申请证书的域名都解析到了这台服务器上，且能直接通过域名访问。使用官网推荐的CertBot获取证书。在CertBot官网选择一下环境(比如我选Nginx on Ubuntu 17.04)就可以看到入门教程了。安装CertBot12345apt-get updateapt-get install software-properties-commonadd-apt-repository ppa:certbot/certbotapt-get updateapt-get","/article/101",18546,"2019-11-26 16:12:11","2019-11-26 16:23:16",{"id":181,"category_id":44,"title":182,"keywords":183,"description":184,"image_url":6,"url":185,"hits":186,"is_recommend":73,"is_top":73,"create_time":187,"update_time":188},113,"在CentOS 7中添加命令自动补全功能","命令自动补全,centos","在CentOS 7中，默认情况下并不会安装命令补全包，需要手动安装才能使用命令补全功能。以下是在CentOS 7中安装命令补全包的方法：1. bash-completion：这是一个针对Bash shell的命令补全软件包，可以提供对系统命令、用户自定义命令和文件路径的自动补全功能。可以通过以下命令安装：```sudo yum install bash-completion```安装完成后，需要在/etc/profile配置文件中添加以下内容：```if [ -f /etc/bash_compl","/article/113",14948,"2023-05-16 10:54:01","2023-05-16 10:57:28",{"id":190,"category_id":44,"title":191,"keywords":192,"description":193,"image_url":6,"url":194,"hits":195,"is_recommend":53,"is_top":73,"create_time":196,"update_time":197},94,"Centos7 安装 openvas ","openvas,开放式漏洞评估系统，installing openvas centos-7","一、描述OpenVAS，即开放式漏洞评估系统，是一个用于评估目标漏洞的杰出框架。功能十分强大，最重要的是，它是“开源”的——就是免费的意思啦～它与著名的Nessus“本是同根生”，在Nessus商业化之后仍然坚持开源，号称“当前最好用的开源漏洞扫描工具”。最新版的Kali Linux(kali 3.0)不再自带OpenVAS了，所以我们要自己部署OpenVAS漏洞检测系统。其核心部件是一个服务器，包括一套网络漏洞测试程序，可以检测远程系统和应用程序中的安全问题。但是它的最常用用途是检测目标网络或","/article/94",14690,"2019-01-14 17:43:42","2019-01-14 18:16:36",{"id":199,"category_id":44,"title":200,"keywords":201,"description":202,"image_url":6,"url":203,"hits":204,"is_recommend":73,"is_top":73,"create_time":205,"update_time":206},99,"Centos7 利用iptables防止nmap工具防端口扫描","iptables","一、Nmap介绍       Nmap（NetworkMapper）是一款开放源代码的网络探测和安全审核工具。它用于快速扫描一个网络和一台主机开放的端口，还能使用TCP/IP协议栈特征探测远程主机的操作系统类型。nmap支持很多扫描技术，例如：UDP、TCPconnect()、TCPSYN(半开扫描)、ftp代理(bounce攻击)、反向标志、ICMP、FIN、ACK扫描、圣诞树(XmasTree)、SYN扫描和null扫描。Nmap最初是用于Unix系统","/article/99",14415,"2019-07-09 21:27:00","2019-07-09 21:57:53",{"id":208,"category_id":46,"title":209,"keywords":210,"description":211,"image_url":6,"url":212,"hits":213,"is_recommend":73,"is_top":73,"create_time":214,"update_time":215},61,"Docker 推荐的启动方式","推荐,启动,方式","# cat DockerfileFROM openjdk:8-alpineWORKDIR /ADD ./target/*.jar app.jarEXPOSE 9999COPY docker-entrypoint.sh /RUN chmod +x /docker-entrypoint.shENTRYPOINT [“/docker-entrypoint.sh”]CMD [“java”,”-server”,”-Duser.timezone=GMT+08″,”-jar”,”/app.jar”]# cat","/article/61",14347,"2018-10-22 13:55:47","2018-10-22 13:56:10",{"id":217,"category_id":44,"title":218,"keywords":219,"description":220,"image_url":6,"url":221,"hits":222,"is_recommend":73,"is_top":73,"create_time":223,"update_time":224},107,"Acme.sh 给 SSL 证书自动续期失败的解决方法","HTTP/1.1 200 OK,Server: Bayou Tech Web Srv 1.0,Content-Encoding: none,Content-Length: 5,Content-Type","一、Acme.sh 自动续期失败的症状问题描述如下，续期的时候，提示如下错误：root@dc:~# \"/data/acme.sh\"/acme.sh --cron --home \"/data/acme.sh\" &gt; /dev/null[Sun Nov 10 23:52:17 CST 2020] Error, can not get domain token entry example.com[Sun Nov 10 23:52:17 CST 2020] Please check log file","/article/107",12618,"2021-09-03 10:44:18","2021-09-03 10:46:23",{"id":226,"category_id":44,"title":227,"keywords":228,"description":229,"image_url":6,"url":230,"hits":231,"is_recommend":53,"is_top":73,"create_time":232,"update_time":233},93,"ELK+Filebeat+Kafka+ZooKeeper 构建海量日志分析平台","Filebeat,Kafka","一、说明1.Filebeat是一个日志文件托运工具，在你的服务器上安装客户端后，filebeat会监控日志目录或者指定的日志文件，追踪读取这些文件（追踪文件的变化，不停的读）2.Kafka是一种高吞吐量的分布式发布订阅消息系统，它可以处理消费者规模的网站中的所有动作流数据3.Logstash是一根具备实时数据传输能力的管道，负责将数据信息从管道的输入端传输到管道的输出端；与此同时这根管道还可以让你根据自己的需求在中间加上滤网，Logstash提供里很多功能强大的滤网以满足你的各种应用场景4.El","/article/93",12190,"2018-12-24 16:40:08","2018-12-26 11:53:38",{"id":235,"category_id":46,"title":236,"keywords":237,"description":238,"image_url":6,"url":239,"hits":240,"is_recommend":53,"is_top":73,"create_time":241,"update_time":242},81,"kubernetes 1.12.1 高可用安装之部署Dashboard","安装Dashboard","创建Dashboard需要CoreDNS部署成功之后再安装Dashboard。[root@master01 ~]# wget https://zhl123.com/download/k8s/Dashboard.tgz[root@master01 ~]# tar xf Dashboard.tgz[root@master01 ~]# kubectl create -f Dashboard/[root@master01 Dashboard]# kubectl get svc -n kube-syste","/article/81",12037,"2018-10-26 09:54:41","2018-10-26 16:59:19",{"id":244,"category_id":44,"title":245,"keywords":6,"description":246,"image_url":6,"url":247,"hits":248,"is_recommend":73,"is_top":73,"create_time":249,"update_time":250},100,"用 Nginx 给 Cookie 增加 Secure 和 HttpOnly","在 nginx 的 location 中配置12# 只支持 proxy 模式下设置，SameSite 不需要可删除，如果想更安全可以把 SameSite 设置为 Strictproxy_cookie_path / \"/; httponly; secure; SameSite=Lax\";示例1234567891011121314151617181920212223242526server {    listen 443 ssl http2;    server_name www.zhl123.cn","/article/100",11848,"2019-11-26 16:10:57","2019-11-26 16:23:45",{"id":252,"category_id":44,"title":253,"keywords":254,"description":255,"image_url":6,"url":256,"hits":257,"is_recommend":73,"is_top":73,"create_time":258,"update_time":259},41,"Tomcat 安全配置与性能优化","tomcat，性能优化","1. JVM&nbsp;1.1. 使用 Server JRE 替代JDK。&nbsp;服务器上不要安装JDK，请使用 Server JRE. 服务器上根本不需要编译器，代码应该在Release服务器上完成编译打包工作。&nbsp;理由：一旦服务器被控制，可以防止在其服务器上编译其他恶意代码并植入到你的程序中。&nbsp;1.2. JAVA_OPTS&nbsp;export JAVA_OPTS=\"-server -Xms512m -Xmx4096m &nbsp;-XX:PermSize=64M -","/article/41",11623,"2016-09-01 17:06:36","2018-10-18 17:06:58",[261,269,270,278,284,292,300,308,317,326],{"id":262,"category_id":40,"title":263,"keywords":6,"description":264,"image_url":6,"url":265,"hits":266,"is_recommend":73,"is_top":73,"create_time":267,"update_time":268},123,"Agent Skill 精选集：最值得收藏的 Agent Skills Top 10","如果你正在用 Claude Code 或 Codex，一定对&nbsp;Agent Skills&nbsp;不陌生。通过安装&nbsp;Agent Skills，你可以让这些 AI 助手变得更强——不用每次都解释你的需求，它们直接就知道该怎么做。最近有人在 GitHub 上做了一个采样调查，统计了哪些 Skills 的质量最佳和最受欢迎。我整理了这份&nbsp;Top 10 榜单，加上使用场景和适合人群，帮你快速找到最有用的那几个。Top 10 最受欢迎的 Agent Skills1. Skil","/article/123",270,"2026-01-19 18:49:12","2026-01-19 18:52:01",{"id":145,"category_id":44,"title":146,"keywords":6,"description":147,"image_url":6,"url":150,"hits":151,"is_recommend":73,"is_top":73,"create_time":152,"update_time":153},{"id":271,"category_id":46,"title":272,"keywords":6,"description":273,"image_url":6,"url":274,"hits":275,"is_recommend":73,"is_top":73,"create_time":276,"update_time":277},121,"Docker 镜像优化与安全扫描：将镜像体积压缩 70%","1. 适用场景 & 前置条件项目要求适用场景容器化应用镜像体积过大（> 500MB），构建时间长（> 10分钟），存在安全漏洞（CVE高危）OSRHEL/CentOS 7.9+ 或 Ubuntu 20.04+内核Linux Kernel 3.10+软件版本Docker 20.10+ 或 Podman 3.0+，Trivy 0.40+（安全扫描工具）资源规格2C4G（最小）/ 4C8G（推荐），磁盘 50GB+（存储镜像与缓存）网络可访问 Docker Hub/阿里云镜像仓库（","/article/121",309,"2026-01-06 11:54:35","2026-01-06 12:01:59",{"id":279,"category_id":44,"title":162,"keywords":6,"description":280,"image_url":6,"url":163,"hits":281,"is_recommend":73,"is_top":73,"create_time":282,"update_time":283},120,"五、故障排查和监控5.1 故障排查◆ 5.1.1 日志查看# 查看 Prometheus 日志中的规则评估错误journalctl -u prometheus | grep -i&nbsp;\"rule\"&nbsp;|&nbsp;tail&nbsp;-50# 查看规则评估耗时curl -s http://localhost:9090/api/v1/rules | jq&nbsp;'.data.groups[].rules[] | select(.health != \"ok\")'# Kubernet",282,"2026-01-06 11:53:50","2026-01-06 11:54:33",{"id":285,"category_id":44,"title":286,"keywords":6,"description":287,"image_url":6,"url":288,"hits":289,"is_recommend":73,"is_top":73,"create_time":290,"update_time":291},119,"用 Prometheus Recording Rules 把告警噪声砍掉 70%(一)","一、概述1.1 背景介绍在大规模微服务架构下，Prometheus 告警系统往往会陷入一个尴尬的境地：告警太多，运维团队开始选择性忽略；告警太少，真正的故障又可能漏掉。我在某电商平台负责监控体系建设时，团队每天要处理超过 2000 条告警，其中 70% 以上是重复的、关联的或者短暂抖动产生的噪声。Recording Rules 是 Prometheus 提供的预计算机制，可以将复杂的查询表达式预先计算并存储为新的时间序列。通过合理设计 Recording Rules，我们不仅能显著降低 Prom","/article/119",301,"2026-01-06 11:51:58","2026-01-06 11:53:45",{"id":293,"category_id":44,"title":294,"keywords":6,"description":295,"image_url":6,"url":296,"hits":297,"is_recommend":73,"is_top":73,"create_time":298,"update_time":299},118,"GitOps 落地实践：ArgoCD + Kustomize 实现声明式基础设施管理(二)","四、最佳实践和注意事项4.1 最佳实践4.1.1 性能优化优化点一：减少 Git 轮询频率# argocd-cm ConfigMapapiVersion:&nbsp;v1kind:&nbsp;ConfigMapmetadata:&nbsp;&nbsp;name:&nbsp;argocd-cm&nbsp;&nbsp;namespace:&nbsp;argocddata:&nbsp;&nbsp;timeout.reconciliation:&nbsp;300s&nbsp;&nbsp;# 默认 180","/article/118",305,"2026-01-06 11:49:00","2026-01-06 11:49:34",{"id":301,"category_id":44,"title":302,"keywords":6,"description":303,"image_url":6,"url":304,"hits":305,"is_recommend":73,"is_top":73,"create_time":306,"update_time":307},117,"GitOps 落地实践：ArgoCD + Kustomize 实现声明式基础设施管理(一)","一、概述1.1 背景介绍GitOps 作为云原生时代的运维范式，将 Git 作为基础设施和应用配置的单一事实来源，通过声明式配置和自动化同步机制，实现了配置管理的版本控制、审计追溯和快速回滚。ArgoCD 作为 CNCF 毕业项目，提供了完整的 GitOps 工作流，支持多集群管理、RBAC 权限控制、SSO 集成等企业级特性。结合 Kustomize 的配置管理能力，能够优雅地解决多环境配置差异、敏感信息管理、配置复用等问题。在传统的 CI/CD 流程中，往往由 CI 工具直接执行 kubec","/article/117",310,"2026-01-06 11:45:03","2026-01-06 11:48:56",{"id":309,"category_id":40,"title":310,"keywords":311,"description":312,"image_url":6,"url":313,"hits":314,"is_recommend":73,"is_top":73,"create_time":315,"update_time":316},116,"运维部门年度2025工作总结与2026工作规划应该如何写？","运维部门年度2025工作总结,2026工作规划","2025年，运维部在公司“数字化转型深化”战略引领下，以“稳定为基、效率为纲、安全为盾、创新为翼”为核心导向，全面支撑核心业务系统运行、推动技术架构迭代、强化团队能力建设。 全年实现核心业务系统可用性99.985%，较2024年提升0.02个百分点；故障平均恢复时间（MTTR）从42分钟压缩至29分钟，下降31%；云资源成本同比降低16.8%，自动化运维覆盖率从65%提升至83%，未发生重大生产安全事故，圆满完成年度目标。现将全年工作及2026年规划汇报如下：2025年核心工作成果（数","/article/116",297,"2026-01-06 11:20:58","2026-01-06 11:44:04",{"id":318,"category_id":40,"title":319,"keywords":320,"description":321,"image_url":6,"url":322,"hits":323,"is_recommend":73,"is_top":73,"create_time":324,"update_time":325},115,"Kubernetes 100个常用命令","100 个 Kubectl 命令","这篇文章是关于使用 Kubectl 进行 Kubernetes 诊断的指南。列出了 100 个 Kubectl 命令，这些命令对于诊断 Kubernetes 集群中的问题非常有用。这些问题包括但不限于：•&nbsp;集群信息•&nbsp;Pod 诊断•&nbsp;服务诊断•&nbsp;部署诊断•&nbsp;网络诊断•&nbsp;持久卷和持久卷声明诊断•&nbsp;资源使用情况•&nbsp;安全和授权•&nbsp;节点故障排除•&nbsp;其他诊断命令：文章还提到了许多其他命令，如资源扩展和自动扩","/article/115",3642,"2023-11-02 14:09:30","2023-11-02 14:10:05",{"id":181,"category_id":44,"title":182,"keywords":183,"description":184,"image_url":6,"url":185,"hits":186,"is_recommend":73,"is_top":73,"create_time":187,"update_time":188},1784716028274]