[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"knowledge-\u002Fapi\u002Fknowledge\u002Fbooklet\u002Fuphold\u002Fnginx\u002Fcore":3,"knowledge-related-\u002Fknowledge\u002Fbooklet\u002Fuphold\u002Fnginx\u002Fcore":2005,"knowledge-series-\u002Fknowledge\u002Fbooklet\u002Fuphold\u002Fnginx\u002Fcore":2031},{"source":4,"connector":5,"page":6},"sqlite","better-sqlite3",{"path":7,"title":8,"description":9,"category":10,"tags":11,"date":13,"pinned":14,"draft":14,"body":15,"seo":2001,"stem":2002,"id":2003,"extension":2004},"\u002Fknowledge\u002Fbooklet\u002Fuphold\u002Fnginx\u002Fcore","核心模块与常见指令详解","深入 Nginx 的指令层，是配置落地的关键。下面按功能模块拆解，每个指令都说明含义、语法、典型示例，并点出极易踩坑的地方。","技能小册",[12],"nginx","2023-04-25",false,{"type":16,"value":17,"toc":1991},"minimark",[18,21,24,29,32,206,222,226,232,237,343,347,352,404,409,419,424,462,522,526,529,541,561,621,648,662,758,766,776,800,819,823,830,836,842,870,876,1001,1017,1024,1027,1073,1086,1090,1164,1171,1175,1182,1186,1215,1221,1238,1242,1359,1363,1406,1410,1413,1420,1423,1488,1498,1504,1512,1538,1543,1570,1576,1581,1605,1618,1637,1641,1644,1648,1710,1750,1754,1803,1819,1823,1835,1850,1856,1875,1880,1936,1945,1949,1987],[19,20,8],"h1",{"id":8},[22,23,9],"p",{},[25,26,28],"h3",{"id":27},"一核心功能模块","一、核心功能模块",[22,30,31],{},"这些指令直接决定了 Nginx 的整体行为与性能。",[33,34,35,54],"table",{},[36,37,38],"thead",{},[39,40,41,45,48,51],"tr",{},[42,43,44],"th",{},"指令",[42,46,47],{},"上下文",[42,49,50],{},"含义",[42,52,53],{},"示例",[55,56,57,81,102,128,146,164,185],"tbody",{},[39,58,59,66,69,76],{},[60,61,62],"td",{},[63,64,65],"code",{},"user",[60,67,68],{},"main",[60,70,71,72,75],{},"Worker 进程的运行用户，影响读写权限。建议用低权限用户（如 ",[63,73,74],{},"www-data","）。",[60,77,78],{},[63,79,80],{},"user www-data;",[39,82,83,88,90,97],{},[60,84,85],{},[63,86,87],{},"worker_processes",[60,89,68],{},[60,91,92,93,96],{},"Worker 进程数，推荐 ",[63,94,95],{},"auto"," 自动匹配 CPU 核心数；也支持指定数字。",[60,98,99],{},[63,100,101],{},"worker_processes auto;",[39,103,104,109,112,123],{},[60,105,106],{},[63,107,108],{},"worker_connections",[60,110,111],{},"events",[60,113,114,115,118,119,122],{},"每个 Worker 可同时打开的最大连接数。实际最大并发 = ",[63,116,117],{},"worker_processes * worker_connections"," （减去代理等占用）。需配合系统文件描述符限制 (",[63,120,121],{},"ulimit -n",")。",[60,124,125],{},[63,126,127],{},"events { worker_connections 2048; }",[39,129,130,135,138,141],{},[60,131,132],{},[63,133,134],{},"error_log",[60,136,137],{},"多种",[60,139,140],{},"错误日志路径与级别（debug, info, notice, warn, error, crit）。多上下文可用。",[60,142,143],{},[63,144,145],{},"error_log \u002Fvar\u002Flog\u002Fnginx\u002Ferror.log warn;",[39,147,148,153,156,159],{},[60,149,150],{},[63,151,152],{},"sendfile",[60,154,155],{},"http, server, location",[60,157,158],{},"开启零拷贝文件传输，直接在内核空间复制数据，大幅提升静态文件性能。",[60,160,161],{},[63,162,163],{},"sendfile on;",[39,165,166,171,173,180],{},[60,167,168],{},[63,169,170],{},"tcp_nopush",[60,172,155],{},[60,174,175,176,179],{},"在 ",[63,177,178],{},"sendfile on"," 时有效，将响应头和数据包合并发送，减少网络包数量，提高效率。",[60,181,182],{},[63,183,184],{},"tcp_nopush on;",[39,186,187,192,194,201],{},[60,188,189],{},[63,190,191],{},"keepalive_timeout",[60,193,155],{},[60,195,196,197,200],{},"长连接超时时间。第一个参数是服务器端保持超时，第二个（可选）是设置响应头 ",[63,198,199],{},"Keep-Alive: timeout="," 的值，告知客户端超时。",[60,202,203],{},[63,204,205],{},"keepalive_timeout 65 65;",[22,207,208,212,213,215,216,218,219,221],{},[209,210,211],"strong",{},"优化建议","：",[63,214,163],{}," ",[63,217,184],{}," 搭配使用，对于静态文件服务极为有效。",[63,220,191],{}," 不宜太长，避免闲置连接占用资源。",[25,223,225],{"id":224},"二location-匹配规则重中之重","二、location 匹配规则（重中之重）",[22,227,228,231],{},[63,229,230],{},"location"," 决定了请求最终由哪个块处理，规则精微，必须牢记优先级。",[233,234,236],"h4",{"id":235},"_1-匹配语法","1. 匹配语法",[33,238,239,250],{},[36,240,241],{},[39,242,243,246,248],{},[42,244,245],{},"匹配符",[42,247,53],{},[42,249,50],{},[55,251,252,270,288,306,323],{},[39,253,254,259,264],{},[60,255,256],{},[63,257,258],{},"=",[60,260,261],{},[63,262,263],{},"= \u002Fadmin",[60,265,266,269],{},[209,267,268],{},"精确匹配","，路径必须完全相等。优先级最高。",[39,271,272,277,282],{},[60,273,274],{},[63,275,276],{},"^~",[60,278,279],{},[63,280,281],{},"^~ \u002Fimages\u002F",[60,283,284,287],{},[209,285,286],{},"前缀优先","，匹配前缀后不再检查正则表达式。",[39,289,290,295,300],{},[60,291,292],{},[63,293,294],{},"~",[60,296,297],{},[63,298,299],{},"~ \\.php$",[60,301,302,305],{},[209,303,304],{},"正则匹配","，区分大小写。",[39,307,308,313,318],{},[60,309,310],{},[63,311,312],{},"~*",[60,314,315],{},[63,316,317],{},"~* \\.jpg$",[60,319,320,322],{},[209,321,304],{},"，不区分大小写。",[39,324,325,328,337],{},[60,326,327],{},"(无符号)",[60,329,330,333,334],{},[63,331,332],{}," \u002F"," 或 ",[63,335,336],{},"\u002Fstatic",[60,338,339,342],{},[209,340,341],{},"普通前缀匹配","，匹配路径的前缀部分。",[233,344,346],{"id":345},"_2-优先级顺序非常重要","2. 优先级顺序（非常重要）",[22,348,349,350,212],{},"Nginx 会按照以下顺序选择最终的 ",[63,351,230],{},[353,354,355,364,386,401],"ol",{},[356,357,358,363],"li",{},[209,359,360,361],{},"先遍历所有精确匹配 ",[63,362,258],{},"，命中后立即停止，直接使用。",[356,365,366,369,370,372,373],{},[209,367,368],{},"再遍历所有前缀匹配","（含 ",[63,371,276],{}," 和普通前缀），找到最长命中。\n",[374,375,376],"ul",{},[356,377,378,379,381,382,385],{},"如果这个最长前缀带 ",[63,380,276],{}," 修饰符，则",[209,383,384],{},"立即使用，不再检查正则","。",[356,387,388,391,392,394,395,397,398,385],{},[209,389,390],{},"按配置文件中出现的顺序","依次检查正则表达式（",[63,393,294],{}," 和 ",[63,396,312],{},"），",[209,399,400],{},"第一个匹配的正则被使用",[356,402,403],{},"若没有正则匹配，则使用第2步找到的最长前缀匹配。",[22,405,406,212],{},[209,407,408],{},"流程图简示",[410,411,416],"pre",{"className":412,"code":414,"language":415},[413],"language-text","请求进入 ─→ 是否有精确匹配(=)？ ──YES→ 使用该 location\n               │NO\n               ▼\n         找出最长前缀匹配（包括^~及无符号）\n               │\n         是否带 ^~ 修饰？ ──YES→ 使用该 location（忽略正则）\n               │NO\n               ▼\n         按出现顺序匹配正则（~ 和 ~*）\n               │\n         有命中？ ──YES→ 使用第一个命中的正则 location\n               │NO\n               ▼\n         使用之前找到的最长前缀匹配（无^~）\n","text",[63,417,414],{"__ignoreMap":418},"",[22,420,421,212],{},[209,422,423],{},"经典例子",[410,425,428],{"className":426,"code":427,"language":12,"meta":418,"style":418},"language-nginx shiki shiki-themes material-theme-lighter github-light github-dark","location = \u002F              { return 200 \"exact \u002F\"; }\nlocation \u002F                { return 200 \"prefix \u002F\"; }\nlocation \u002Fdocuments\u002F      { return 200 \"prefix \u002Fdocuments\u002F\"; }\nlocation ^~ \u002Fimages\u002F      { return 200 \"prefix ^~ images\"; }\nlocation ~ \\.(gif|jpg)$   { return 200 \"regex images\"; }\n",[63,429,430,438,444,450,456],{"__ignoreMap":418},[431,432,435],"span",{"class":433,"line":434},"line",1,[431,436,437],{},"location = \u002F              { return 200 \"exact \u002F\"; }\n",[431,439,441],{"class":433,"line":440},2,[431,442,443],{},"location \u002F                { return 200 \"prefix \u002F\"; }\n",[431,445,447],{"class":433,"line":446},3,[431,448,449],{},"location \u002Fdocuments\u002F      { return 200 \"prefix \u002Fdocuments\u002F\"; }\n",[431,451,453],{"class":433,"line":452},4,[431,454,455],{},"location ^~ \u002Fimages\u002F      { return 200 \"prefix ^~ images\"; }\n",[431,457,459],{"class":433,"line":458},5,[431,460,461],{},"location ~ \\.(gif|jpg)$   { return 200 \"regex images\"; }\n",[374,463,464,473,484,495,510],{},[356,465,466,467,470,471,385],{},"请求 ",[63,468,469],{},"\u002F"," ：命中精确 ",[63,472,258],{},[356,474,466,475,478,479,481,482,385],{},[63,476,477],{},"\u002Findex.html"," ：最长前缀是 ",[63,480,469],{},"，然后正则都不匹配，最终使用 ",[63,483,469],{},[356,485,466,486,478,489,491,492,494],{},[63,487,488],{},"\u002Fimages\u002Flogo.jpg",[63,490,281],{},"，因为有 ",[63,493,276],{}," 直接使用，不会尝试正则。",[356,496,466,497,500,501,504,505,507,508,385],{},[63,498,499],{},"\u002Fdocuments\u002Freport.pdf"," ：最长前缀 ",[63,502,503],{},"\u002Fdocuments\u002F","，无 ",[63,506,276],{},"，接着检查正则，不匹配，使用 ",[63,509,503],{},[356,511,466,512,478,515,517,518,521],{},[63,513,514],{},"\u002Fphoto.jpg",[63,516,469],{},"，继续检查正则，匹配 ",[63,519,520],{},"~ \\.(gif|jpg)$","，使用该正则 location。",[25,523,525],{"id":524},"三静态资源服务","三、静态资源服务",[22,527,528],{},"处理静态文件是 Nginx 的拿手好戏，但有几个易混淆点必须厘清。",[233,530,532,533,536,537,540],{"id":531},"_1-root-与-alias-的区别极易混淆","1. ",[63,534,535],{},"root"," 与 ",[63,538,539],{},"alias"," 的区别（极易混淆）",[374,542,543,550],{},[356,544,545,549],{},[209,546,547],{},[63,548,535],{},"：将请求 URI 附加在指定的文件系统路径之后。",[356,551,552,556,557,560],{},[209,553,554],{},[63,555,539],{},"：将匹配到的路径",[209,558,559],{},"替换","为指定路径，URI 尾部不会追加。",[33,562,563,578],{},[36,564,565],{},[39,566,567,569,572,575],{},[42,568,44],{},[42,570,571],{},"配置示例",[42,573,574],{},"请求 URI",[42,576,577],{},"实际查找的文件路径",[55,579,580,601],{},[39,581,582,586,591,596],{},[60,583,584],{},[63,585,535],{},[60,587,588],{},[63,589,590],{},"location \u002Fimages\u002F { root \u002Fdata; }",[60,592,593],{},[63,594,595],{},"\u002Fimages\u002Fcat.png",[60,597,598],{},[63,599,600],{},"\u002Fdata\u002Fimages\u002Fcat.png",[39,602,603,607,612,616],{},[60,604,605],{},[63,606,539],{},[60,608,609],{},[63,610,611],{},"location \u002Fimages\u002F { alias \u002Fdata; }",[60,613,614],{},[63,615,595],{},[60,617,618],{},[63,619,620],{},"\u002Fdata\u002Fcat.png",[22,622,623,212,626,628,629,631,632,638,639,641,642,644,645,647],{},[209,624,625],{},"关键点",[63,627,539],{}," 后面的路径直接对应匹配的 ",[63,630,230],{}," 部分，",[209,633,634,635,637],{},"末尾的 ",[63,636,469],{}," 必须一致","。若 ",[63,640,230],{}," 后带有斜杠，",[63,643,539],{}," 后面也建议带斜杠，否则可能出现路径拼接错误。",[63,646,539],{}," 也可用于非前缀匹配，但最常用于替换路径。",[233,649,651,652,655,656,655,659],{"id":650},"_2-indexautoindextry_files","2. ",[63,653,654],{},"index","、",[63,657,658],{},"autoindex",[63,660,661],{},"try_files",[374,663,664,687,717],{},[356,665,666,670,671,680,683,684,686],{},[209,667,668],{},[63,669,654],{},"：定义默认查找的首页文件，按顺序尝试。",[410,672,674],{"className":426,"code":673,"language":12,"meta":418,"style":418},"index index.html index.htm;\n",[63,675,676],{"__ignoreMap":418},[431,677,678],{"class":433,"line":434},[431,679,673],{},[681,682],"br",{},"当请求目录时（如 ",[63,685,469],{},"），会依次查找这些文件，返回第一个存在的。",[356,688,689,693,694,696,697],{},[209,690,691],{},[63,692,658],{},"：开启目录列表，当没有 ",[63,695,654],{}," 文件时显示文件清单。",[410,698,700],{"className":426,"code":699,"language":12,"meta":418,"style":418},"autoindex on;   # 开启\nautoindex_exact_size off;  # 显示更易读的文件大小\nautoindex_localtime on;    # 显示本地时间\n",[63,701,702,707,712],{"__ignoreMap":418},[431,703,704],{"class":433,"line":434},[431,705,706],{},"autoindex on;   # 开启\n",[431,708,709],{"class":433,"line":440},[431,710,711],{},"autoindex_exact_size off;  # 显示更易读的文件大小\n",[431,713,714],{"class":433,"line":446},[431,715,716],{},"autoindex_localtime on;    # 显示本地时间\n",[356,718,719,723,724,744,746,747,750,751,754,755,757],{},[209,720,721],{},[63,722,661],{},"：按顺序检查文件是否存在，以便实现前端路由、回退等功能。",[410,725,727],{"className":426,"code":726,"language":12,"meta":418,"style":418},"location \u002F {\n    try_files $uri $uri\u002F \u002Findex.html;\n}\n",[63,728,729,734,739],{"__ignoreMap":418},[431,730,731],{"class":433,"line":434},[431,732,733],{},"location \u002F {\n",[431,735,736],{"class":433,"line":440},[431,737,738],{},"    try_files $uri $uri\u002F \u002Findex.html;\n",[431,740,741],{"class":433,"line":446},[431,742,743],{},"}\n",[681,745],{},"工作流程：尝试 ",[63,748,749],{},"$uri"," 对应的文件，不存在则尝试 ",[63,752,753],{},"$uri\u002F"," 目录，都失败则内部重定向到 ",[63,756,477],{},"。常用于 SPA 应用。",[233,759,761,762,765],{"id":760},"_3-expires-缓存设置","3. ",[63,763,764],{},"expires"," 缓存设置",[22,767,768,769,394,772,775],{},"控制 ",[63,770,771],{},"Expires",[63,773,774],{},"Cache-Control"," 头，让浏览器或 CDN 缓存静态资源。",[410,777,779],{"className":426,"code":778,"language":12,"meta":418,"style":418},"location ~* \\.(jpg|jpeg|png|gif|css|js|ico|svg|woff2)$ {\n    expires 30d;\n    add_header Cache-Control \"public, immutable\";\n}\n",[63,780,781,786,791,796],{"__ignoreMap":418},[431,782,783],{"class":433,"line":434},[431,784,785],{},"location ~* \\.(jpg|jpeg|png|gif|css|js|ico|svg|woff2)$ {\n",[431,787,788],{"class":433,"line":440},[431,789,790],{},"    expires 30d;\n",[431,792,793],{"class":433,"line":446},[431,794,795],{},"    add_header Cache-Control \"public, immutable\";\n",[431,797,798],{"class":433,"line":452},[431,799,743],{},[374,801,802,808],{},[356,803,804,807],{},[63,805,806],{},"expires 30d;"," 表示 30 天后过期。",[356,809,810,811,814,815,818],{},"也可用 ",[63,812,813],{},"expires -1;"," 表示禁止缓存，",[63,816,817],{},"expires epoch;"," 强制使用 1970 时间点使缓存过期。",[25,820,822],{"id":821},"四反向代理模块","四、反向代理模块",[22,824,825,826,829],{},"Nginx 作为反向代理时，核心是 ",[63,827,828],{},"proxy_pass"," 及相关指令。",[233,831,532,833,835],{"id":832},"_1-proxy_pass-后的-uri-有无斜杠的区别重点",[63,834,828],{}," 后的 URI 有无斜杠的区别（重点）",[22,837,838,839,841],{},"这是配置反向代理时最经典的陷阱。",[63,840,828],{}," 后是否带路径，直接影响请求 URI 如何传给后端。",[374,843,844,853],{},[356,845,846,852],{},[209,847,848,849,851],{},"如果 ",[63,850,828],{}," 后没有 URI"," 或特别指定替换规则：会将完整的原始请求 URI 追加到指定地址。",[356,854,855,860,861,863,864,866,867,869],{},[209,856,848,857,859],{},[63,858,828],{}," 后带了 URI","（哪怕是单纯的一个 ",[63,862,469],{},"），Nginx 会将 ",[63,865,230],{}," 匹配的部分",[209,868,559],{},"为该 URI。",[22,871,872,873,212],{},"假设请求为 ",[63,874,875],{},"http:\u002F\u002Fexample.com\u002Fapi\u002Fusers?id=1",[33,877,878,891],{},[36,879,880],{},[39,881,882,885,888],{},[42,883,884],{},"配置",[42,886,887],{},"传递给后端的 URI",[42,889,890],{},"说明",[55,892,893,910,940,965,986],{},[39,894,895,900,905],{},[60,896,897],{},[63,898,899],{},"location \u002Fapi { proxy_pass http:\u002F\u002Fbackend; }",[60,901,902],{},[63,903,904],{},"\u002Fapi\u002Fusers?id=1",[60,906,907,909],{},[63,908,828],{}," 无URI，完整转发",[39,911,912,917,922],{},[60,913,914],{},[63,915,916],{},"location \u002Fapi { proxy_pass http:\u002F\u002Fbackend\u002F; }",[60,918,919],{},[63,920,921],{},"\u002F\u002Fusers?id=1",[60,923,924,925,928,929,932,933,935,936,939],{},"匹配 ",[63,926,927],{},"\u002Fapi","（无斜杠），剩余部分带前导斜杠 ",[63,930,931],{},"\u002Fusers","，与 ",[63,934,469],{}," 拼接成",[209,937,938],{},"双斜杠","，是经典踩坑点",[39,941,942,947,952],{},[60,943,944],{},[63,945,946],{},"location \u002Fapi\u002F { proxy_pass http:\u002F\u002Fbackend\u002F; }",[60,948,949],{},[63,950,951],{},"\u002Fusers?id=1",[60,953,924,954,957,958,961,962,964],{},[63,955,956],{},"\u002Fapi\u002F","（带斜杠），剩余部分 ",[63,959,960],{},"users"," 无前导斜杠，与 ",[63,963,469],{}," 拼接后结果正常",[39,966,967,972,977],{},[60,968,969],{},[63,970,971],{},"location \u002Fapi { proxy_pass http:\u002F\u002Fbackend\u002Fapp; }",[60,973,974],{},[63,975,976],{},"\u002Fapp\u002Fusers?id=1",[60,978,979,980,982,983],{},"替换 ",[63,981,927],{}," 成 ",[63,984,985],{},"\u002Fapp",[39,987,988,993,998],{},[60,989,990],{},[63,991,992],{},"location = \u002Fapi\u002Ftest { proxy_pass http:\u002F\u002Fbackend\u002Ftest; }",[60,994,995],{},[63,996,997],{},"\u002Ftest",[60,999,1000],{},"精确匹配，完全替换",[22,1002,1003,212,1006,1008,1009,1012,1013,1016],{},[209,1004,1005],{},"核心口诀",[63,1007,828],{}," 后面",[209,1010,1011],{},"不含路径则原样透传","，",[209,1014,1015],{},"含路径则替换 location 匹配部分","。强烈建议保持 location 后的路径与 proxy_pass 后路径的斜杠对应（同带或同不带），否则容易出现双斜杠或缺斜杠的意外结果。",[233,1018,651,1020,1023],{"id":1019},"_2-proxy_set_header-透传真实-iphost-等",[63,1021,1022],{},"proxy_set_header"," 透传真实 IP、Host 等",[22,1025,1026],{},"后端服务器通常需要客户端的真实信息，必须显式设置头信息。",[410,1028,1030],{"className":426,"code":1029,"language":12,"meta":418,"style":418},"location \u002F {\n    proxy_set_header Host $host;                              # 传递域名\n    proxy_set_header X-Real-IP $remote_addr;                  # 客户端真实IP\n    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 代理链路\n    proxy_set_header X-Forwarded-Proto $scheme;               # 原始协议\n    proxy_set_header X-Forwarded-Host $host;\n    proxy_pass http:\u002F\u002Fbackend;\n}\n",[63,1031,1032,1036,1041,1046,1051,1056,1062,1068],{"__ignoreMap":418},[431,1033,1034],{"class":433,"line":434},[431,1035,733],{},[431,1037,1038],{"class":433,"line":440},[431,1039,1040],{},"    proxy_set_header Host $host;                              # 传递域名\n",[431,1042,1043],{"class":433,"line":446},[431,1044,1045],{},"    proxy_set_header X-Real-IP $remote_addr;                  # 客户端真实IP\n",[431,1047,1048],{"class":433,"line":452},[431,1049,1050],{},"    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 代理链路\n",[431,1052,1053],{"class":433,"line":458},[431,1054,1055],{},"    proxy_set_header X-Forwarded-Proto $scheme;               # 原始协议\n",[431,1057,1059],{"class":433,"line":1058},6,[431,1060,1061],{},"    proxy_set_header X-Forwarded-Host $host;\n",[431,1063,1065],{"class":433,"line":1064},7,[431,1066,1067],{},"    proxy_pass http:\u002F\u002Fbackend;\n",[431,1069,1071],{"class":433,"line":1070},8,[431,1072,743],{},[22,1074,1075,1078,1079,1082,1083,385],{},[209,1076,1077],{},"注意","：默认 Nginx 可能会透传 Host，但很多场景需要显式指定避免后端拿到错误的 Host。如果后端需要获取客户端 IP，需配置 ",[63,1080,1081],{},"--with-http_realip_module"," 且后端信任 Nginx 传递的 ",[63,1084,1085],{},"X-Forwarded-For",[233,1087,1089],{"id":1088},"_3-超时设置","3. 超时设置",[33,1091,1092,1102],{},[36,1093,1094],{},[39,1095,1096,1098,1100],{},[42,1097,44],{},[42,1099,50],{},[42,1101,53],{},[55,1103,1104,1119,1134,1149],{},[39,1105,1106,1111,1114],{},[60,1107,1108],{},[63,1109,1110],{},"proxy_connect_timeout",[60,1112,1113],{},"与后端建立连接的超时（握手时间）",[60,1115,1116],{},[63,1117,1118],{},"proxy_connect_timeout 10s;",[39,1120,1121,1126,1129],{},[60,1122,1123],{},[63,1124,1125],{},"proxy_read_timeout",[60,1127,1128],{},"等待后端响应的超时（两次读之间间隔）",[60,1130,1131],{},[63,1132,1133],{},"proxy_read_timeout 60s;",[39,1135,1136,1141,1144],{},[60,1137,1138],{},[63,1139,1140],{},"proxy_send_timeout",[60,1142,1143],{},"向后端发送请求的超时",[60,1145,1146],{},[63,1147,1148],{},"proxy_send_timeout 60s;",[39,1150,1151,1156,1159],{},[60,1152,1153],{},[63,1154,1155],{},"proxy_buffering",[60,1157,1158],{},"开启或关闭代理缓冲",[60,1160,1161],{},[63,1162,1163],{},"proxy_buffering on;",[22,1165,1166,1167,1170],{},"合理设置超时可避免慢后端拖垮 Nginx，同时配合 ",[63,1168,1169],{},"proxy_next_upstream"," 错误处理。",[25,1172,1174],{"id":1173},"五负载均衡","五、负载均衡",[22,1176,1177,1178,1181],{},"利用 ",[63,1179,1180],{},"upstream"," 块定义后端服务器组，并通过多种策略分发流量。",[233,1183,1185],{"id":1184},"_1-upstream-块定义","1. upstream 块定义",[410,1187,1189],{"className":426,"code":1188,"language":12,"meta":418,"style":418},"upstream backend {\n    server 10.0.0.1:80 weight=3;\n    server 10.0.0.2:80;\n    server 10.0.0.3:80 backup;\n}\n",[63,1190,1191,1196,1201,1206,1211],{"__ignoreMap":418},[431,1192,1193],{"class":433,"line":434},[431,1194,1195],{},"upstream backend {\n",[431,1197,1198],{"class":433,"line":440},[431,1199,1200],{},"    server 10.0.0.1:80 weight=3;\n",[431,1202,1203],{"class":433,"line":446},[431,1204,1205],{},"    server 10.0.0.2:80;\n",[431,1207,1208],{"class":433,"line":452},[431,1209,1210],{},"    server 10.0.0.3:80 backup;\n",[431,1212,1213],{"class":433,"line":458},[431,1214,743],{},[22,1216,1217,1218,1220],{},"然后在 ",[63,1219,230],{}," 中使用：",[410,1222,1224],{"className":426,"code":1223,"language":12,"meta":418,"style":418},"location \u002F {\n    proxy_pass http:\u002F\u002Fbackend;\n}\n",[63,1225,1226,1230,1234],{"__ignoreMap":418},[431,1227,1228],{"class":433,"line":434},[431,1229,733],{},[431,1231,1232],{"class":433,"line":440},[431,1233,1067],{},[431,1235,1236],{"class":433,"line":446},[431,1237,743],{},[233,1239,1241],{"id":1240},"_2-调度策略nginx-plus-拥有更多高级策略以下为社区版","2. 调度策略（NGINX Plus 拥有更多高级策略，以下为社区版）：",[374,1243,1244,1250,1273,1304,1334,1347],{},[356,1245,1246,1249],{},[209,1247,1248],{},"轮询（默认）","：请求按顺序逐一分配。",[356,1251,1252,1257,1258],{},[209,1253,1254],{},[63,1255,1256],{},"weight","：加权轮询，性能高的机器分配更多请求。\n",[410,1259,1261],{"className":426,"code":1260,"language":12,"meta":418,"style":418},"server backend1.example.com weight=5;\nserver backend2.example.com weight=1;\n",[63,1262,1263,1268],{"__ignoreMap":418},[431,1264,1265],{"class":433,"line":434},[431,1266,1267],{},"server backend1.example.com weight=5;\n",[431,1269,1270],{"class":433,"line":440},[431,1271,1272],{},"server backend2.example.com weight=1;\n",[356,1274,1275,1280,1281],{},[209,1276,1277],{},[63,1278,1279],{},"ip_hash","：根据客户端 IP 哈希来固定后端，解决 Session 保持问题。\n",[410,1282,1284],{"className":426,"code":1283,"language":12,"meta":418,"style":418},"upstream backend {\n    ip_hash;\n    server ...\n}\n",[63,1285,1286,1290,1295,1300],{"__ignoreMap":418},[431,1287,1288],{"class":433,"line":434},[431,1289,1195],{},[431,1291,1292],{"class":433,"line":440},[431,1293,1294],{},"    ip_hash;\n",[431,1296,1297],{"class":433,"line":446},[431,1298,1299],{},"    server ...\n",[431,1301,1302],{"class":433,"line":452},[431,1303,743],{},[356,1305,1306,1311,1312],{},[209,1307,1308],{},[63,1309,1310],{},"least_conn","：把请求发给当前活跃连接数最少的服务器，适合长连接场景。\n",[410,1313,1315],{"className":426,"code":1314,"language":12,"meta":418,"style":418},"upstream backend {\n    least_conn;\n    server ...\n}\n",[63,1316,1317,1321,1326,1330],{"__ignoreMap":418},[431,1318,1319],{"class":433,"line":434},[431,1320,1195],{},[431,1322,1323],{"class":433,"line":440},[431,1324,1325],{},"    least_conn;\n",[431,1327,1328],{"class":433,"line":446},[431,1329,1299],{},[431,1331,1332],{"class":433,"line":452},[431,1333,743],{},[356,1335,1336,1342,1343,1346],{},[209,1337,1338,1341],{},[63,1339,1340],{},"fair","（第三方）","：按后端响应时间来分配，需安装 ",[63,1344,1345],{},"nginx-upstream-fair"," 模块。",[356,1348,1349,1354,1355,1358],{},[209,1350,1351],{},[63,1352,1353],{},"random","（1.15.1+）：随机选择，可加 ",[63,1356,1357],{},"two"," 参数随机选两个再从中挑最少连接，用于分布式环境。",[233,1360,1362],{"id":1361},"_3-后端健康检查","3. 后端健康检查",[374,1364,1365,1392],{},[356,1366,1367,1370,1371,1374,1375,394,1378,1381,1382,1391],{},[209,1368,1369],{},"被动检查","：Nginx 自动进行。当请求失败（连接超时、错误码等），会标记该服务器为 ",[63,1372,1373],{},"down"," 一段时间，通过 ",[63,1376,1377],{},"max_fails",[63,1379,1380],{},"fail_timeout"," 控制。\n",[410,1383,1385],{"className":426,"code":1384,"language":12,"meta":418,"style":418},"server 10.0.0.1 max_fails=3 fail_timeout=30s;\n",[63,1386,1387],{"__ignoreMap":418},[431,1388,1389],{"class":433,"line":434},[431,1390,1384],{},"\n意味着 30 秒内失败 3 次就会暂停使用 30 秒。",[356,1393,1394,1397,1398,1401,1402,1405],{},[209,1395,1396],{},"主动健康检查","：社区版不自带，需通过第三方模块（如 ",[63,1399,1400],{},"nginx_upstream_check_module","）或 Nginx Plus 实现，可定期探测后端 ",[63,1403,1404],{},"\u002Fhealth"," 端点。",[25,1407,1409],{"id":1408},"六rewrite-与重定向","六、Rewrite 与重定向",[22,1411,1412],{},"控制 URL 的重写与跳转，配合变量实现灵活规则。",[233,1414,532,1416,1419],{"id":1415},"_1-return-指令",[63,1417,1418],{},"return"," 指令",[22,1421,1422],{},"最简单直接的重定向，用于停止处理并返回状态码。",[410,1424,1426],{"className":426,"code":1425,"language":12,"meta":418,"style":418},"# 域名重定向\nserver {\n    listen 80;\n    server_name old.com;\n    return 301 http:\u002F\u002Fnew.com$request_uri;\n}\n# HTTP 跳转 HTTPS\nserver {\n    listen 80;\n    server_name example.com;\n    return 301 https:\u002F\u002F$host$request_uri;\n}\n",[63,1427,1428,1433,1438,1443,1448,1453,1457,1462,1466,1471,1477,1483],{"__ignoreMap":418},[431,1429,1430],{"class":433,"line":434},[431,1431,1432],{},"# 域名重定向\n",[431,1434,1435],{"class":433,"line":440},[431,1436,1437],{},"server {\n",[431,1439,1440],{"class":433,"line":446},[431,1441,1442],{},"    listen 80;\n",[431,1444,1445],{"class":433,"line":452},[431,1446,1447],{},"    server_name old.com;\n",[431,1449,1450],{"class":433,"line":458},[431,1451,1452],{},"    return 301 http:\u002F\u002Fnew.com$request_uri;\n",[431,1454,1455],{"class":433,"line":1058},[431,1456,743],{},[431,1458,1459],{"class":433,"line":1064},[431,1460,1461],{},"# HTTP 跳转 HTTPS\n",[431,1463,1464],{"class":433,"line":1070},[431,1465,1437],{},[431,1467,1469],{"class":433,"line":1468},9,[431,1470,1442],{},[431,1472,1474],{"class":433,"line":1473},10,[431,1475,1476],{},"    server_name example.com;\n",[431,1478,1480],{"class":433,"line":1479},11,[431,1481,1482],{},"    return 301 https:\u002F\u002F$host$request_uri;\n",[431,1484,1486],{"class":433,"line":1485},12,[431,1487,743],{},[22,1489,1490,1493,1494,1497],{},[209,1491,1492],{},"优点","：执行效率极高，比 ",[63,1495,1496],{},"if"," 安全，能快速终止请求。",[233,1499,651,1501,1419],{"id":1500},"_2-rewrite-指令",[63,1502,1503],{},"rewrite",[22,1505,1506,1509,1511],{},[63,1507,1508],{},"rewrite regex replacement [flag];",[681,1510],{},"\n用于内部重写或条件重定向，有四种 flag：",[374,1513,1514,1520,1526,1532],{},[356,1515,1516,1519],{},[63,1517,1518],{},"last","：停止当前 rewrite 指令，用新的 URI 重新开始 location 匹配（类似内部转发）。",[356,1521,1522,1525],{},[63,1523,1524],{},"break","：停止 rewrite，不再继续匹配 location，直接使用当前上下文处理。",[356,1527,1528,1531],{},[63,1529,1530],{},"redirect","：返回 302 临时重定向。",[356,1533,1534,1537],{},[63,1535,1536],{},"permanent","：返回 301 永久重定向。",[22,1539,1540,212],{},[209,1541,1542],{},"常见场景",[374,1544,1545,1553,1564],{},[356,1546,1547,212,1550],{},[209,1548,1549],{},"伪静态",[63,1551,1552],{},"rewrite ^\u002Farticle-(\\d+)\\.html$ \u002Farticle.php?id=$1 last;",[356,1554,1555,1558,1559,1561,1562,385],{},[209,1556,1557],{},"强制 HTTPS","：结合 ",[63,1560,1496],{},"，但建议优先使用 ",[63,1563,1418],{},[356,1565,1566,1569],{},[209,1567,1568],{},"路径清理","：去掉重复斜杠等。",[233,1571,761,1573,1575],{"id":1572},"_3-if-的谨慎使用",[63,1574,1496],{}," 的谨慎使用",[22,1577,1578,1580],{},[63,1579,1496],{}," 指令容易产生非预期行为，因为它不按标准的 rewrite 流程工作。常见的坑：",[374,1582,1583,1591],{},[356,1584,1585,1587,1588,1590],{},[63,1586,1496],{}," 中包含 ",[63,1589,828],{}," 可能导致未预期的变量错误。",[356,1592,1593,1594,1596,1597,1599,1600,394,1602,385],{},"尽量避免在 ",[63,1595,230],{}," 内用 ",[63,1598,1496],{}," 进行复杂的逻辑，优先使用 ",[63,1601,661],{},[63,1603,1604],{},"map",[22,1606,1607,1612,1613,333,1615,1617],{},[209,1608,1609,1610],{},"若必须使用 ",[63,1611,1496],{},"，最好仅限于 ",[63,1614,1418],{},[63,1616,1503],{}," 操作。例如：",[410,1619,1621],{"className":426,"code":1620,"language":12,"meta":418,"style":418},"if ($http_user_agent ~* \"bot\") {\n    return 403;\n}\n",[63,1622,1623,1628,1633],{"__ignoreMap":418},[431,1624,1625],{"class":433,"line":434},[431,1626,1627],{},"if ($http_user_agent ~* \"bot\") {\n",[431,1629,1630],{"class":433,"line":440},[431,1631,1632],{},"    return 403;\n",[431,1634,1635],{"class":433,"line":446},[431,1636,743],{},[25,1638,1640],{"id":1639},"七https-配置","七、HTTPS 配置",[22,1642,1643],{},"现代化 Web 标配，Nginx 能高效终结 SSL\u002FTLS。",[233,1645,1647],{"id":1646},"_1-基础证书配置","1. 基础证书配置",[410,1649,1651],{"className":426,"code":1650,"language":12,"meta":418,"style":418},"server {\n    listen 443 ssl;\n    http2 on;                                              # nginx 1.25.1+ 用独立的 http2 指令\n    server_name example.com;\n\n    ssl_certificate     \u002Fetc\u002Fnginx\u002Fssl\u002Fexample.com.crt;    # 证书文件（含中间证书）\n    ssl_certificate_key \u002Fetc\u002Fnginx\u002Fssl\u002Fexample.com.key;    # 私钥文件\n\n    # 会话缓存提升 TLS 握手性能\n    ssl_session_cache   shared:SSL:10m;\n    ssl_session_timeout 10m;\n}\n",[63,1652,1653,1657,1662,1667,1671,1677,1682,1687,1691,1696,1701,1706],{"__ignoreMap":418},[431,1654,1655],{"class":433,"line":434},[431,1656,1437],{},[431,1658,1659],{"class":433,"line":440},[431,1660,1661],{},"    listen 443 ssl;\n",[431,1663,1664],{"class":433,"line":446},[431,1665,1666],{},"    http2 on;                                              # nginx 1.25.1+ 用独立的 http2 指令\n",[431,1668,1669],{"class":433,"line":452},[431,1670,1476],{},[431,1672,1673],{"class":433,"line":458},[431,1674,1676],{"emptyLinePlaceholder":1675},true,"\n",[431,1678,1679],{"class":433,"line":1058},[431,1680,1681],{},"    ssl_certificate     \u002Fetc\u002Fnginx\u002Fssl\u002Fexample.com.crt;    # 证书文件（含中间证书）\n",[431,1683,1684],{"class":433,"line":1064},[431,1685,1686],{},"    ssl_certificate_key \u002Fetc\u002Fnginx\u002Fssl\u002Fexample.com.key;    # 私钥文件\n",[431,1688,1689],{"class":433,"line":1070},[431,1690,1676],{"emptyLinePlaceholder":1675},[431,1692,1693],{"class":433,"line":1468},[431,1694,1695],{},"    # 会话缓存提升 TLS 握手性能\n",[431,1697,1698],{"class":433,"line":1473},[431,1699,1700],{},"    ssl_session_cache   shared:SSL:10m;\n",[431,1702,1703],{"class":433,"line":1479},[431,1704,1705],{},"    ssl_session_timeout 10m;\n",[431,1707,1708],{"class":433,"line":1485},[431,1709,743],{},[1711,1712,1713],"blockquote",{},[22,1714,1715,1718,1719,1722,1723,1726,1727,1730,1731,1734,1735,1738,1739,1741,1742,1745,1746,1749],{},[209,1716,1717],{},"版本注意","：nginx 1.25.1 起，",[63,1720,1721],{},"listen"," 指令的 ",[63,1724,1725],{},"http2"," 参数已",[209,1728,1729],{},"废弃","，改用独立的 ",[63,1732,1733],{},"http2 on;"," 指令（同一 ",[63,1736,1737],{},"server"," 块内，",[63,1740,1721],{}," 只负责端口与 ",[63,1743,1744],{},"ssl","）。1.25.0 及更早版本仍需用 ",[63,1747,1748],{},"listen 443 ssl http2;"," 这种旧写法。",[233,1751,1753],{"id":1752},"_2-协议与算法优化","2. 协议与算法优化",[410,1755,1757],{"className":426,"code":1756,"language":12,"meta":418,"style":418},"ssl_protocols TLSv1.2 TLSv1.3;          # 仅启用安全协议\nssl_ciphers EECDH+AESGCM:EDH+AESGCM;    # 高强度加密套件\nssl_prefer_server_ciphers on;           # 优先使用服务器端加密套件\n\n# OCSP Stapling：减少客户端验证证书的延迟\nssl_stapling on;\nssl_stapling_verify on;\nresolver 8.8.8.8 8.8.4.4 valid=300s;\nresolver_timeout 5s;\n",[63,1758,1759,1764,1769,1774,1778,1783,1788,1793,1798],{"__ignoreMap":418},[431,1760,1761],{"class":433,"line":434},[431,1762,1763],{},"ssl_protocols TLSv1.2 TLSv1.3;          # 仅启用安全协议\n",[431,1765,1766],{"class":433,"line":440},[431,1767,1768],{},"ssl_ciphers EECDH+AESGCM:EDH+AESGCM;    # 高强度加密套件\n",[431,1770,1771],{"class":433,"line":446},[431,1772,1773],{},"ssl_prefer_server_ciphers on;           # 优先使用服务器端加密套件\n",[431,1775,1776],{"class":433,"line":452},[431,1777,1676],{"emptyLinePlaceholder":1675},[431,1779,1780],{"class":433,"line":458},[431,1781,1782],{},"# OCSP Stapling：减少客户端验证证书的延迟\n",[431,1784,1785],{"class":433,"line":1058},[431,1786,1787],{},"ssl_stapling on;\n",[431,1789,1790],{"class":433,"line":1064},[431,1791,1792],{},"ssl_stapling_verify on;\n",[431,1794,1795],{"class":433,"line":1070},[431,1796,1797],{},"resolver 8.8.8.8 8.8.4.4 valid=300s;\n",[431,1799,1800],{"class":433,"line":1468},[431,1801,1802],{},"resolver_timeout 5s;\n",[374,1804,1805,1813],{},[356,1806,1807,1812],{},[209,1808,1809],{},[63,1810,1811],{},"ssl_ciphers"," 需根据安全标准定期更新，例如禁止 RC4。",[356,1814,1815,1818],{},[209,1816,1817],{},"OCSP Stapling","：服务器在握手中附带 OCSP 响应，客户端无需单独查询，加快建立连接。",[233,1820,1822],{"id":1821},"_3-http2-开启与优势","3. HTTP\u002F2 开启与优势",[22,1824,1825,1826,1828,1829,1831,1832,1834],{},"nginx 1.25.1+ 用独立的 ",[63,1827,1733],{}," 指令（旧版本用 ",[63,1830,1721],{}," 的 ",[63,1833,1725],{}," 参数，见上文版本注意）：",[410,1836,1838],{"className":426,"code":1837,"language":12,"meta":418,"style":418},"listen 443 ssl;\nhttp2 on;\n",[63,1839,1840,1845],{"__ignoreMap":418},[431,1841,1842],{"class":433,"line":434},[431,1843,1844],{},"listen 443 ssl;\n",[431,1846,1847],{"class":433,"line":440},[431,1848,1849],{},"http2 on;\n",[22,1851,1852,1855],{},[209,1853,1854],{},"优势","：基于二进制分帧，支持多路复用（同一连接上并行请求）、头部压缩 HPACK，显著减少延迟，提升页面加载速度。但 HTTP\u002F2 必须配合 HTTPS，因此证书配置是前提。",[1711,1857,1858],{},[22,1859,1860,1862,1863,1866,1867,1870,1871,1874],{},[209,1861,1077],{},"：HTTP\u002F2 服务器推送（Server Push）已在 nginx 1.25.1 中",[209,1864,1865],{},"移除","（",[63,1868,1869],{},"http2_push"," 指令不再可用），该特性因浏览器普遍不支持及实际收益有限已被业界弃用，如需类似效果可考虑 ",[63,1872,1873],{},"Link: \u003C...>; rel=preload"," 响应头或 HTTP\u002F3。",[22,1876,1877,212],{},[209,1878,1879],{},"全站 HTTPS + HTTP\u002F2 典型配置框架",[410,1881,1883],{"className":426,"code":1882,"language":12,"meta":418,"style":418},"server {\n    listen 80;\n    server_name example.com;\n    return 301 https:\u002F\u002F$host$request_uri;\n}\nserver {\n    listen 443 ssl;\n    http2 on;\n    server_name example.com;\n    # 证书与安全配置...\n    # 业务 location 配置...\n}\n",[63,1884,1885,1889,1893,1897,1901,1905,1909,1913,1918,1922,1927,1932],{"__ignoreMap":418},[431,1886,1887],{"class":433,"line":434},[431,1888,1437],{},[431,1890,1891],{"class":433,"line":440},[431,1892,1442],{},[431,1894,1895],{"class":433,"line":446},[431,1896,1476],{},[431,1898,1899],{"class":433,"line":452},[431,1900,1482],{},[431,1902,1903],{"class":433,"line":458},[431,1904,743],{},[431,1906,1907],{"class":433,"line":1058},[431,1908,1437],{},[431,1910,1911],{"class":433,"line":1064},[431,1912,1661],{},[431,1914,1915],{"class":433,"line":1070},[431,1916,1917],{},"    http2 on;\n",[431,1919,1920],{"class":433,"line":1468},[431,1921,1476],{},[431,1923,1924],{"class":433,"line":1473},[431,1925,1926],{},"    # 证书与安全配置...\n",[431,1928,1929],{"class":433,"line":1479},[431,1930,1931],{},"    # 业务 location 配置...\n",[431,1933,1934],{"class":433,"line":1485},[431,1935,743],{},[22,1937,1938,1939,1941,1942,1944],{},"掌握这些核心模块与指令，你就拥有了解决绝大多数 Nginx 场景的弹药库。不管是静态加速、反向代理、负载均衡还是 HTTPS 配置，都能得心应手。建议在测试环境中实际演练每个指令，尤其是 ",[63,1940,230],{}," 优先级和 ",[63,1943,828],{}," 的 URI 处理，亲自看日志验证行为，印象会更加深刻。",[1946,1947,1948],"h2",{"id":1948},"参考文献",[33,1950,1951,1960],{},[36,1952,1953],{},[39,1954,1955,1958],{},[42,1956,1957],{},"资料",[42,1959,890],{},[55,1961,1962,1976],{},[39,1963,1964,1973],{},[60,1965,1966],{},[1967,1968,1972],"a",{"href":1969,"rel":1970},"https:\u002F\u002Fnginx.org\u002Fen\u002Fdocs\u002F",[1971],"nofollow","nginx 文档",[60,1974,1975],{},"官方",[39,1977,1978,1984],{},[60,1979,1980],{},[1967,1981,1983],{"href":1982},"\u002Fknowledge\u002Fbooklet\u002Fuphold","运维导读",[60,1985,1986],{},"学习路径",[1988,1989,1990],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":418,"searchDepth":440,"depth":440,"links":1992},[1993,1994,1995,1996,1997,1998,1999,2000],{"id":27,"depth":446,"text":28},{"id":224,"depth":446,"text":225},{"id":524,"depth":446,"text":525},{"id":821,"depth":446,"text":822},{"id":1173,"depth":446,"text":1174},{"id":1408,"depth":446,"text":1409},{"id":1639,"depth":446,"text":1640},{"id":1948,"depth":440,"text":1948},{"title":8,"description":9},"knowledge\u002Fbooklet\u002Fuphold\u002FNginx\u002Fcore","knowledge\u002Fknowledge\u002Fbooklet\u002Fuphold\u002FNginx\u002Fcore.md","md",{"items":2006},[2007,2011,2015,2019,2023,2027],{"path":2008,"title":2009,"description":2010,"category":10,"score":1058},"\u002Fknowledge\u002Fbooklet\u002Fuphold\u002Fnginx\u002Fse","安全基础","Nginx 作为流量的总入口，安全配置是防线第一关。以下从六个基础维度加固你的服务，既实用又立竿见影。",{"path":2012,"title":2013,"description":2014,"category":10,"score":1058},"\u002Fknowledge\u002Fbooklet\u002Fuphold\u002Fnginx\u002Fconfig","配置文件结构与语法","下面我们深入到 Nginx 的配置核心——配置文件的结构、语法和变量系统。这一部分是你驾驭 Nginx 的“语法手册”。",{"path":2016,"title":2017,"description":2018,"category":10,"score":1058},"\u002Fknowledge\u002Fbooklet\u002Fuphold\u002Fnginx\u002Fbase","Nginx 核心概念","Nginx 是一款高性能的 HTTP 和反向代理服务器。学习路径见 运维导读。它的强大并发能力与灵活的扩展性根植于少数几个核心设计。理解这些底层原理，后续的配置、调优和排障都会变得通透。",{"path":2020,"title":2021,"description":2022,"category":10,"score":1058},"\u002Fknowledge\u002Fbooklet\u002Fuphold\u002Fnginx\u002Fseror","常见故障排查思路","故障排查的关键是快速定位，而非盲目重试。下面按最常见的五种现象归类，每一种都给出清晰的排查路径和解决思路。",{"path":2024,"title":2025,"description":2026,"category":10,"score":1058},"\u002Fknowledge\u002Fbooklet\u002Fuphold\u002Fnginx\u002Fpre","性能调优基础","性能调优的目标是：用有限的资源，支撑更高的并发、更快的响应、更稳的服务。下面按优化维度，逐一拆解原理和配置要诀。",{"path":2028,"title":2029,"description":2030,"category":10,"score":1058},"\u002Fknowledge\u002Fbooklet\u002Fuphold\u002Fnginx\u002Flogger","访问日志与错误日志","日志是 Nginx 排错的“第一现场”。一个优秀的日志策略既能完整保留请求上下文，又不会撑爆磁盘。下面从格式定制、存储轮转、错误分级三个维度详细讲解。",{"series":2032,"title":12,"items":2033,"index":440,"prev":2047,"next":2048},"booklet\u002Fuphold\u002Fnginx",[2034,2036,2038,2039,2041,2043,2045],{"path":2016,"title":2017,"date":2035,"pinned":14},"2023-04-03",{"path":2012,"title":2013,"date":2037,"pinned":14},"2023-11-24",{"path":7,"title":8,"date":13,"pinned":14},{"path":2028,"title":2029,"date":2040,"pinned":14},"2020-02-29",{"path":2024,"title":2025,"date":2042,"pinned":14},"2020-07-11",{"path":2008,"title":2009,"date":2044,"pinned":14},"2024-12-02",{"path":2020,"title":2021,"date":2046,"pinned":14},"2020-09-18",{"path":2012,"title":2013,"date":2037,"pinned":14},{"path":2028,"title":2029,"date":2040,"pinned":14}]