[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"knowledge-\u002Fapi\u002Fknowledge\u002Fbooklet\u002Fuphold\u002Fnginx\u002Fseror":3,"knowledge-related-\u002Fknowledge\u002Fbooklet\u002Fuphold\u002Fnginx\u002Fseror":1203,"knowledge-series-\u002Fknowledge\u002Fbooklet\u002Fuphold\u002Fnginx\u002Fseror":1226},{"source":4,"connector":5,"page":6},"sqlite","better-sqlite3",{"path":7,"title":8,"description":9,"category":10,"tags":11,"date":14,"pinned":15,"draft":15,"body":16,"seo":1199,"stem":1200,"id":1201,"extension":1202},"\u002Fknowledge\u002Fbooklet\u002Fuphold\u002Fnginx\u002Fseror","常见故障排查思路","故障排查的关键是快速定位，而非盲目重试。下面按最常见的五种现象归类，每一种都给出清晰的排查路径和解决思路。","技能小册",[12,13],"nginx","seror","2020-09-18",false,{"type":17,"value":18,"toc":1187},"minimark",[19,22,54,56,61,70,80,88,93,234,250,254,261,267,277,281,380,389,393,400,406,409,415,420,574,578,585,604,609,742,751,755,762,767,873,878,915,918,926,929,1019,1025,1029,1111,1114,1118,1130,1133,1183],[20,21,8],"h1",{"id":8},[23,24,25],"blockquote",{},[26,27,28,29,33,34,38,39,42,43,48,49,53],"p",{},"本文文件名为 ",[30,31,32],"code",{},"seror.md","（service error 缩写），对应本目录学习路径中「阶段 10：调优与安全」的",[35,36,37],"strong",{},"故障排查","部分；姊妹篇 ",[30,40,41],{},"se.md"," 为",[44,45,47],"a",{"href":46},"\u002Fknowledge\u002Fbooklet\u002Fuphold\u002Fnginx\u002Fse","安全基础","。核心概念见 ",[44,50,52],{"href":51},"\u002Fknowledge\u002Fbooklet\u002Fuphold\u002Fnginx\u002Fbase","Nginx 核心概念","。",[26,55,9],{},[57,58,60],"h3",{"id":59},"一502-bad-gateway","一、502 Bad Gateway",[26,62,63,66,69],{},[35,64,65],{},"现象",[67,68],"br",{},"\n浏览器显示 502 Bad Gateway，错误日志常见记录：",[71,72,77],"pre",{"className":73,"code":75,"language":76},[74],"language-text","upstream prematurely closed connection while reading response header from upstream\n","text",[30,78,75],{"__ignoreMap":79},"",[26,81,82,85,87],{},[35,83,84],{},"含义",[67,86],{},"\nNginx 作为反向代理时，能连接上后端服务器，但后端没有返回有效的 HTTP 响应（比如进程崩溃、端口未监听、返回了无法解析的垃圾数据）。",[26,89,90],{},[35,91,92],{},"排查步骤",[94,95,96,171,179,191,219],"ol",{},[97,98,99,102,168,170],"li",{},[35,100,101],{},"后端服务是否存活？",[71,103,107],{"className":104,"code":105,"language":106,"meta":79,"style":79},"language-bash shiki shiki-themes material-theme-lighter github-light github-dark","# 检查后端端口是否在监听\nnetstat -tlnp | grep \u003C后端端口>\n# 直接 curl 后端地址，看是否返回正常\ncurl -v http:\u002F\u002F127.0.0.1:8080\u002F\n","bash",[30,108,109,118,150,156],{"__ignoreMap":79},[110,111,114],"span",{"class":112,"line":113},"line",1,[110,115,117],{"class":116},"sutJx","# 检查后端端口是否在监听\n",[110,119,121,125,129,133,136,139,143,147],{"class":112,"line":120},2,[110,122,124],{"class":123},"sbgvK","netstat",[110,126,128],{"class":127},"stzsN"," -tlnp",[110,130,132],{"class":131},"smGrS"," |",[110,134,135],{"class":123}," grep",[110,137,138],{"class":131}," \u003C",[110,140,142],{"class":141},"s_sjI","后端端",[110,144,146],{"class":145},"su5hD","口",[110,148,149],{"class":131},">\n",[110,151,153],{"class":112,"line":152},3,[110,154,155],{"class":116},"# 直接 curl 后端地址，看是否返回正常\n",[110,157,159,162,165],{"class":112,"line":158},4,[110,160,161],{"class":123},"curl",[110,163,164],{"class":127}," -v",[110,166,167],{"class":141}," http:\u002F\u002F127.0.0.1:8080\u002F\n",[67,169],{},"若直接访问后端就报错或连接拒绝，说明问题不在 Nginx，是应用服务挂了或未启动。",[97,172,173,176,178],{},[35,174,175],{},"后端是否有语法错误或异常退出？",[67,177],{},"\n查看后端日志（PHP-FPM、Gunicorn、Node.js 进程）。PHP-FPM 超时、内存溢出、脚本致命错误等都会导致 502。",[97,180,181,184,186,187,190],{},[35,182,183],{},"Nginx 与后端协议不匹配",[67,185],{},"\n例如设置了 ",[30,188,189],{},"proxy_http_version 1.1"," 但后端不支持，或后端要求 HTTP\u002F1.0。可尝试强制 HTTP\u002F1.0。",[97,192,193,196,198,199,202,203],{},[35,194,195],{},"后端响应头过大",[67,197],{},"\n如果后端返回的响应头超过 ",[30,200,201],{},"proxy_buffer_size"," 的限制（默认 4k 或 8k），Nginx 会直接中断并返回 502。可增大：",[71,204,207],{"className":205,"code":206,"language":12,"meta":79,"style":79},"language-nginx shiki shiki-themes material-theme-lighter github-light github-dark","proxy_buffer_size 16k;\nproxy_buffers 4 32k;\n",[30,208,209,214],{"__ignoreMap":79},[110,210,211],{"class":112,"line":113},[110,212,213],{},"proxy_buffer_size 16k;\n",[110,215,216],{"class":112,"line":120},[110,217,218],{},"proxy_buffers 4 32k;\n",[97,220,221,224,226,227,230,231,53],{},[35,222,223],{},"PHP-FPM 进程数耗尽",[67,225],{},"\n当所有子进程都在处理请求时，新请求会等待，如果配合了超时，可能直接 502。调整 ",[30,228,229],{},"pm.max_children"," 并观察 ",[30,232,233],{},"pm.status_path",[26,235,236,239,241,242,245,246,249],{},[35,237,238],{},"快速验证",[67,240],{},"\n用 ",[30,243,244],{},"curl -v https:\u002F\u002Fyourdomain"," 看响应信息，同时 ",[30,247,248],{},"tail -f \u002Fvar\u002Flog\u002Fnginx\u002Ferror.log","，对照上游地址和状态。",[57,251,253],{"id":252},"二504-gateway-timeout","二、504 Gateway Timeout",[26,255,256,258,260],{},[35,257,65],{},[67,259],{},"\n浏览器显示 504 Gateway Time-out，错误日志类似：",[71,262,265],{"className":263,"code":264,"language":76},[74],"upstream timed out (110: Connection timed out) while reading response header from upstream\n",[30,266,264],{"__ignoreMap":79},[26,268,269,271,273,274,53],{},[35,270,84],{},[67,272],{},"\nNginx 在指定的时间内没有从后端收到完整的响应。根本原因是",[35,275,276],{},"后端处理耗时 > Nginx 等待的超时时间",[26,278,279],{},[35,280,92],{},[94,282,283,335,368,374],{},[97,284,285,288,289,292,293,313,315,316,325,327,328,331,332,53],{},[35,286,287],{},"确认超时配置是否过短","\n查看当前 ",[30,290,291],{},"proxy_read_timeout","（默认 60s）：",[71,294,296],{"className":205,"code":295,"language":12,"meta":79,"style":79},"location \u002F {\n    proxy_read_timeout 60s;\n}\n",[30,297,298,303,308],{"__ignoreMap":79},[110,299,300],{"class":112,"line":113},[110,301,302],{},"location \u002F {\n",[110,304,305],{"class":112,"line":120},[110,306,307],{},"    proxy_read_timeout 60s;\n",[110,309,310],{"class":112,"line":152},[110,311,312],{},"}\n",[67,314],{},"如果后端任务本身就需要长时间运行（例如报表导出、大数据查询），适当调大此值：",[71,317,319],{"className":205,"code":318,"language":12,"meta":79,"style":79},"proxy_read_timeout 300s;\n",[30,320,321],{"__ignoreMap":79},[110,322,323],{"class":112,"line":113},[110,324,318],{},[67,326],{},"同时可调整 ",[30,329,330],{},"proxy_connect_timeout"," 和 ",[30,333,334],{},"proxy_send_timeout",[97,336,337,340,341,344,345,365,367],{},[35,338,339],{},"检查后端应用响应时间","\n在 Nginx 访问日志中启用 ",[30,342,343],{},"$upstream_response_time","，观察哪类请求耗时高：",[71,346,348],{"className":205,"code":347,"language":12,"meta":79,"style":79},"log_format timing '$remote_addr - $request_time '\n                  'upstream=$upstream_response_time '\n                  'status=$status';\n",[30,349,350,355,360],{"__ignoreMap":79},[110,351,352],{"class":112,"line":113},[110,353,354],{},"log_format timing '$remote_addr - $request_time '\n",[110,356,357],{"class":112,"line":120},[110,358,359],{},"                  'upstream=$upstream_response_time '\n",[110,361,362],{"class":112,"line":152},[110,363,364],{},"                  'status=$status';\n",[67,366],{},"统计慢请求，针对性优化数据库查询、接口逻辑或第三方调用。",[97,369,370,373],{},[35,371,372],{},"后端服务健康状态","\n即使连接建立，后端可能因高负载而无法在短时间内生成响应。查看应用服务器的 CPU\u002F内存\u002F线程。",[97,375,376,379],{},[35,377,378],{},"网络延迟","\n如果后端部署在不同机房，检查网络 RTT，在超时设置中预留余量。",[26,381,382,385,386,53],{},[35,383,384],{},"注意","：不要盲目调高超时去掩盖应用性能问题，正确处理是：",[35,387,388],{},"优化慢接口 + 适当超时 + 异步化长耗时任务",[57,390,392],{"id":391},"三403-forbidden","三、403 Forbidden",[26,394,395,397,399],{},[35,396,65],{},[67,398],{},"\n页面返回 403 Forbidden，错误日志常见：",[71,401,404],{"className":402,"code":403,"language":76},[74],"directory index of \"\u002Fdata\u002Fwww\u002F\" is forbidden\n",[30,405,403],{"__ignoreMap":79},[26,407,408],{},"或",[71,410,413],{"className":411,"code":412,"language":76},[74],"open() \"\u002Fdata\u002Fwww\u002Findex.html\" failed (13: Permission denied)\n",[30,414,412],{"__ignoreMap":79},[26,416,417],{},[35,418,419],{},"原因归类与解决",[94,421,422,460,533,558],{},[97,423,424,431,433,434,437,438,441,442,445,446,449,450,452,455,456,459],{},[35,425,426,427,430],{},"目录缺少索引文件且 ",[30,428,429],{},"autoindex"," 未开启",[67,432],{},"\n当请求的是目录（如 ",[30,435,436],{},"\u002F","），但该目录下没有 ",[30,439,440],{},"index"," 指令指定的文件（",[30,443,444],{},"index.html",", ",[30,447,448],{},"index.php"," 等），又禁用了目录列表，Nginx 默认返回 403。",[67,451],{},[35,453,454],{},"解决","：添加索引文件或开启 ",[30,457,458],{},"autoindex on;","（仅限非敏感目录）。",[97,461,462,465,467,468,471,472,493,495,496,499,500,530,532],{},[35,463,464],{},"文件系统权限问题",[67,466],{},"\nNginx 的 worker 进程运行用户（如 ",[30,469,470],{},"www-data","）无权读取请求的文件或目录。",[71,473,475],{"className":104,"code":474,"language":106,"meta":79,"style":79},"# 检查文件权限和属主\nls -l \u002Fdata\u002Fwww\u002Findex.html\n",[30,476,477,482],{"__ignoreMap":79},[110,478,479],{"class":112,"line":113},[110,480,481],{"class":116},"# 检查文件权限和属主\n",[110,483,484,487,490],{"class":112,"line":120},[110,485,486],{"class":123},"ls",[110,488,489],{"class":127}," -l",[110,491,492],{"class":141}," \u002Fdata\u002Fwww\u002Findex.html\n",[67,494],{},"确保对该用户有 ",[35,497,498],{},"读权限","（目录需有执行权限 x，文件需有读权限 r）。修正：",[71,501,503],{"className":104,"code":502,"language":106,"meta":79,"style":79},"chown -R www-data:www-data \u002Fdata\u002Fwww\nchmod 755 \u002Fdata\u002Fwww\n",[30,504,505,519],{"__ignoreMap":79},[110,506,507,510,513,516],{"class":112,"line":113},[110,508,509],{"class":123},"chown",[110,511,512],{"class":127}," -R",[110,514,515],{"class":141}," www-data:www-data",[110,517,518],{"class":141}," \u002Fdata\u002Fwww\n",[110,520,521,524,528],{"class":112,"line":120},[110,522,523],{"class":123},"chmod",[110,525,527],{"class":526},"srdBf"," 755",[110,529,518],{"class":141},[67,531],{},"同时检查父目录权限，整个路径都需要对 worker 用户至少可执行。",[97,534,535,541,543,544,547,548,551,552,241,554,557],{},[35,536,537,540],{},[30,538,539],{},"deny"," 规则误伤",[67,542],{},"\n前面配置的 ",[30,545,546],{},"allow\u002Fdeny"," 或 ",[30,549,550],{},"deny all"," 覆盖了正常 IP。",[67,553],{},[30,555,556],{},"curl -v"," 观察请求，并在日志中看来源 IP 是否正确（是否经过了代理导致 IP 变化）。",[97,559,560,563,565,566,569,570,573],{},[35,561,562],{},"文件系统 ACL 或 SELinux",[67,564],{},"\n在 CentOS\u002FRHEL 上，SELinux 可能阻止访问非标准 Web 目录。可临时 ",[30,567,568],{},"setenforce 0"," 测试，若恢复正常则调整上下文 ",[30,571,572],{},"chcon -R -t httpd_sys_content_t \u002Fdata\u002Fwww"," 或直接使用标准目录。",[57,575,577],{"id":576},"四404-与-location-匹配问题","四、404 与 location 匹配问题",[26,579,580,582,584],{},[35,581,65],{},[67,583],{},"\n明明文件存在，但访问返回 404 Not Found。",[26,586,587,590,592,593,596,597,547,600,603],{},[35,588,589],{},"根本原因",[67,591],{},"\n请求 URI 没有按预想被正确的 ",[30,594,595],{},"location"," 处理，最终用错了 ",[30,598,599],{},"root",[30,601,602],{},"alias"," 路径。",[26,605,606],{},[35,607,608],{},"排查思路",[94,610,611,651,696,724],{},[97,612,613,616,617,620,621,624,625,644,646,647,650],{},[35,614,615],{},"验证 location 匹配是否正确","\n在错误日志启用 ",[30,618,619],{},"debug"," 级别（针对特定 IP），观察 location 匹配过程，或通过 ",[30,622,623],{},"add_header"," 回应测试：",[71,626,628],{"className":205,"code":627,"language":12,"meta":79,"style":79},"location \u002Fapp {\n    add_header X-Location \"app block\";\n}\n",[30,629,630,635,640],{"__ignoreMap":79},[110,631,632],{"class":112,"line":113},[110,633,634],{},"location \u002Fapp {\n",[110,636,637],{"class":112,"line":120},[110,638,639],{},"    add_header X-Location \"app block\";\n",[110,641,642],{"class":112,"line":152},[110,643,312],{},[67,645],{},"然后用 ",[30,648,649],{},"curl -I http:\u002F\u002Fdomain\u002Fapp\u002F"," 查看返回的头部，确认命中了哪个块。",[97,652,653,662],{},[35,654,655,656,658,659,661],{},"区分 ",[30,657,599],{}," 与 ",[30,660,602],{}," 误用",[663,664,665,678],"ul",{},[97,666,667,670,671,674,675,53],{},[30,668,669],{},"root \u002Fdata\u002Fwww;"," 加上请求 ",[30,672,673],{},"\u002Fimages\u002F1.jpg"," 查找的实际路径是 ",[30,676,677],{},"\u002Fdata\u002Fwww\u002Fimages\u002F1.jpg",[97,679,680,670,683,674,685,53,688,690,691,693,694,53],{},[30,681,682],{},"alias \u002Fdata\u002Fwww;",[30,684,673],{},[30,686,687],{},"\u002Fdata\u002Fwww\u002F1.jpg",[67,689],{},"\n请严格按照前面核心模块章节的对比检查配置。注意 alias 末尾要带 ",[30,692,436],{},"，如果 location 也带 ",[30,695,436],{},[97,697,698,701,702,705,706,709,710,709,713,716,717,720,721,723],{},[35,699,700],{},"正则优先级覆盖","\n如果定义了多个 location，写了正则，可能某个宽泛的正则先匹配而忽略了更准确的普通前缀。回顾 ",[35,703,704],{},"location 优先级","：",[30,707,708],{},"="," > ",[30,711,712],{},"^~",[30,714,715],{},"~ 或 ~*"," > 前缀。若无意中定义了 ",[30,718,719],{},"~ \\.php$"," 匹配，可能把图片请求都传给 PHP，导致 404。调整匹配顺序或使用 ",[30,722,712],{}," 阻止正则。",[97,725,726,729,730,733,734,737,738,741],{},[35,727,728],{},"try_files 路径错误","\n如果 ",[30,731,732],{},"try_files"," 写了 ",[30,735,736],{},"$uri \u002Findex.html","，但 ",[30,739,740],{},"\u002Findex.html"," 的实际路径拼接后不存在，也会产生 404。检查 root 指令继承关系。",[26,743,744,746,747,750],{},[35,745,238],{},"：在配置中临时开启 ",[30,748,749],{},"error_log \u002Ftmp\u002Fnginx-debug.log debug;"," 并触发请求，查看文件路径。",[57,752,754],{"id":753},"五重定向循环","五、重定向循环",[26,756,757,759,761],{},[35,758,65],{},[67,760],{},"\n浏览器报 “ERR_TOO_MANY_REDIRECTS”，地址栏不断在两个 URL 间跳转。",[26,763,764],{},[35,765,766],{},"常见原因与解决",[94,768,769,790,844,865],{},[97,770,771,774,776,777,779,705,782,785,786,789],{},[35,772,773],{},"HTTP 到 HTTPS 的死循环",[67,775],{},"\n反向代理 Nginx 后面如果还有一个 Nginx 或 CDN 处理 HTTPS，前端 Nginx 发出 HTTP 请求，后端又跳转回 HTTPS，形成循环。",[67,778],{},[35,780,781],{},"检查",[30,783,784],{},"proxy_set_header X-Forwarded-Proto $scheme;"," 是否被正确设置，并且后端应用信任该头。对于 WordPress 等，可能需要配置 ",[30,787,788],{},"$_SERVER['HTTPS'] = 'on'"," 基于该头。",[97,791,792,798,828,830,831,834,835,837,839,840,843],{},[35,793,794,797],{},[30,795,796],{},"return 301"," 的递归",[71,799,801],{"className":205,"code":800,"language":12,"meta":79,"style":79},"server {\n    listen 80;\n    server_name example.com;\n    return 301 http:\u002F\u002Fwww.example.com$request_uri;\n}\n",[30,802,803,808,813,818,823],{"__ignoreMap":79},[110,804,805],{"class":112,"line":113},[110,806,807],{},"server {\n",[110,809,810],{"class":112,"line":120},[110,811,812],{},"    listen 80;\n",[110,814,815],{"class":112,"line":152},[110,816,817],{},"    server_name example.com;\n",[110,819,820],{"class":112,"line":158},[110,821,822],{},"    return 301 http:\u002F\u002Fwww.example.com$request_uri;\n",[110,824,826],{"class":112,"line":825},5,[110,827,312],{},[67,829],{},"如果 ",[30,832,833],{},"www.example.com"," 又解析回当前 server，且本 server 又跳转，即出现循环。",[67,836],{},[35,838,454],{},"：确保跳转目标对应另一个 server 块，或者使用 ",[30,841,842],{},"if ($host !~ ^www\\.) { ... }"," 有条件跳转。",[97,845,846,856,858,859,861,862,864],{},[35,847,848,851,852,855],{},[30,849,850],{},"rewrite"," 规则未加 ",[30,853,854],{},"last"," 或产生二次匹配",[67,857],{},"\n一个 ",[30,860,850],{}," 修改 URI 后，如果不加 ",[30,863,854],{},"，可能后续的 rewrite 规则又将其改回来。检查所有 rewrite 规则，确保有一个终止条件。",[97,866,867,870,872],{},[35,868,869],{},"Cloudflare\u002FCDN 的 SSL 配置不当",[67,871],{},"\n如果源站设置了强制 HTTPS，但 CDN 用 HTTP 回源，源站返回 301 到 HTTPS，CDN 继续用 HTTP 请求…… 需要设置 CDN 的加密模式为 “Full” 或 “Full (strict)”。",[26,874,875,705],{},[35,876,877],{},"排查命令",[71,879,881],{"className":104,"code":880,"language":106,"meta":79,"style":79},"curl -L -v http:\u002F\u002Fexample.com 2>&1 | grep -E \"^(> GET |\u003C HTTP|Location:)\"\n",[30,882,883],{"__ignoreMap":79},[110,884,885,887,890,892,895,898,900,902,905,909,912],{"class":112,"line":113},[110,886,161],{"class":123},[110,888,889],{"class":127}," -L",[110,891,164],{"class":127},[110,893,894],{"class":141}," http:\u002F\u002Fexample.com",[110,896,897],{"class":131}," 2>&1",[110,899,132],{"class":131},[110,901,135],{"class":123},[110,903,904],{"class":127}," -E",[110,906,908],{"class":907},"sjJ54"," \"",[110,910,911],{"class":141},"^(> GET |\u003C HTTP|Location:)",[110,913,914],{"class":907},"\"\n",[26,916,917],{},"观察跳转链，找出哪一步产生了出乎意料的 301\u002F302。",[57,919,921,922,925],{"id":920},"六首选排查武器nginx-t-与错误日志","六、首选排查武器：",[30,923,924],{},"nginx -t"," 与错误日志",[26,927,928],{},"无论遇到什么问题，养成两个第一时间动作：",[94,930,931,969],{},[97,932,933,938,940,941,966,968],{},[35,934,935,936],{},"配置测试 ",[30,937,924],{},[67,939],{},"\n每次修改配置后必须运行：",[71,942,944],{"className":104,"code":943,"language":106,"meta":79,"style":79},"nginx -t && nginx -s reload\n",[30,945,946],{"__ignoreMap":79},[110,947,948,950,953,957,960,963],{"class":112,"line":113},[110,949,12],{"class":123},[110,951,952],{"class":127}," -t",[110,954,956],{"class":955},"sP7_E"," &&",[110,958,959],{"class":123}," nginx",[110,961,962],{"class":127}," -s",[110,964,965],{"class":141}," reload\n",[67,967],{},"它会检测语法错误、上下文错误，并打印出错文件名和行号，避免因错误配置导致服务中断。",[97,970,971,974,976,977,980,981,997,999,1000,547,1003,1006,1007,1016,1018],{},[35,972,973],{},"紧盯错误日志",[67,975],{},"\n绝对多数问题都会在 ",[30,978,979],{},"error_log"," 留下痕迹。为方便排查，建议：",[71,982,984],{"className":104,"code":983,"language":106,"meta":79,"style":79},"tail -f \u002Fvar\u002Flog\u002Fnginx\u002Ferror.log\n",[30,985,986],{"__ignoreMap":79},[110,987,988,991,994],{"class":112,"line":113},[110,989,990],{"class":123},"tail",[110,992,993],{"class":127}," -f",[110,995,996],{"class":141}," \u002Fvar\u002Flog\u002Fnginx\u002Ferror.log\n",[67,998],{},"一旦请求出现异常，立刻就能看到具体的 upstream 状态、权限拒绝、重定向过多等详细说明。临时将日志级别调至 ",[30,1001,1002],{},"warn",[30,1004,1005],{},"error"," 过滤噪音：",[71,1008,1010],{"className":205,"code":1009,"language":12,"meta":79,"style":79},"error_log \u002Fvar\u002Flog\u002Fnginx\u002Ferror.log error;\n",[30,1011,1012],{"__ignoreMap":79},[110,1013,1014],{"class":112,"line":113},[110,1015,1009],{},[67,1017],{},"如果本地环境，可针对特定 IP 开启 debug 日志深入。",[26,1020,1021,1024],{},[35,1022,1023],{},"排错心法","：遇到问题 → 看错误日志 → 重现请求并观察 → 定位具体 location\u002Fupstream → 逐个假设验证。始终保留一份已知正常的可回滚配置，对故障零容忍。",[57,1026,1028],{"id":1027},"七排障常备命令速查","七、排障常备命令速查",[1030,1031,1032,1045],"table",{},[1033,1034,1035],"thead",{},[1036,1037,1038,1042],"tr",{},[1039,1040,1041],"th",{},"命令",[1039,1043,1044],{},"用途",[1046,1047,1048,1058,1068,1077,1087,1097],"tbody",{},[1036,1049,1050,1055],{},[1051,1052,1053],"td",{},[30,1054,924],{},[1051,1056,1057],{},"检查配置语法，改配置后的第一反应",[1036,1059,1060,1065],{},[1051,1061,1062],{},[30,1063,1064],{},"nginx -s reload",[1051,1066,1067],{},"平滑重载配置，不中断现有连接",[1036,1069,1070,1074],{},[1051,1071,1072],{},[30,1073,248],{},[1051,1075,1076],{},"实时观察错误日志",[1036,1078,1079,1084],{},[1051,1080,1081],{},[30,1082,1083],{},"curl -v -I \u003Curl>",[1051,1085,1086],{},"只看响应头，快速判断状态码与关键 Header",[1036,1088,1089,1094],{},[1051,1090,1091],{},[30,1092,1093],{},"netstat -tlnp | grep \u003Cport>",[1051,1095,1096],{},"确认端口是否被正确监听",[1036,1098,1099,1104],{},[1051,1100,1101],{},[30,1102,1103],{},"nginx -V",[1051,1105,1106,1107,1110],{},"查看编译参数，确认是否包含所需模块（如 ",[30,1108,1109],{},"--with-http_ssl_module","）",[26,1112,1113],{},"把这张表贴在常用终端旁边，遇到问题先按顺序过一遍，往往能在几分钟内定位到大方向。",[1115,1116,1117],"h2",{"id":1117},"延伸阅读",[663,1119,1120,1125],{},[97,1121,1122,1124],{},[44,1123,52],{"href":51},"：理解 Master-Worker、反向代理等原理，是看懂本文排错思路的前提。",[97,1126,1127,1129],{},[44,1128,47],{"href":46},"：限流、IP 控制等安全配置本身也可能是故障（如误杀正常流量）的来源，出现异常 403\u002F503 时可对照排查。",[1115,1131,1132],{"id":1132},"参考文献",[1030,1134,1135,1145],{},[1033,1136,1137],{},[1036,1138,1139,1142],{},[1039,1140,1141],{},"资料",[1039,1143,1144],{},"说明",[1046,1146,1147,1160,1171],{},[1036,1148,1149,1157],{},[1051,1150,1151],{},[44,1152,1156],{"href":1153,"rel":1154},"https:\u002F\u002Fnginx.org\u002Fen\u002Fdocs\u002F",[1155],"nofollow","nginx 文档",[1051,1158,1159],{},"官方",[1036,1161,1162,1168],{},[1051,1163,1164],{},[44,1165,1167],{"href":1166},"\u002Fknowledge\u002Fbooklet\u002Fuphold","运维导读",[1051,1169,1170],{},"学习路径",[1036,1172,1173,1180],{},[1051,1174,1175],{},[44,1176,1179],{"href":1177,"rel":1178},"https:\u002F\u002Fnginx.org\u002Fen\u002Fdocs\u002Fconfigure.html",[1155],"nginx -V 参数说明",[1051,1181,1182],{},"编译参数",[1184,1185,1186],"style",{},"html pre.shiki code .sutJx, html code.shiki .sutJx{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit}html pre.shiki code .sbgvK, html code.shiki .sbgvK{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .stzsN, html code.shiki .stzsN{--shiki-light:#91B859;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}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);}html pre.shiki code .srdBf, html code.shiki .srdBf{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":79,"searchDepth":120,"depth":120,"links":1188},[1189,1190,1191,1192,1193,1194,1196,1197,1198],{"id":59,"depth":152,"text":60},{"id":252,"depth":152,"text":253},{"id":391,"depth":152,"text":392},{"id":576,"depth":152,"text":577},{"id":753,"depth":152,"text":754},{"id":920,"depth":152,"text":1195},"六、首选排查武器：nginx -t 与错误日志",{"id":1027,"depth":152,"text":1028},{"id":1117,"depth":120,"text":1117},{"id":1132,"depth":120,"text":1132},{"title":8,"description":9},"knowledge\u002Fbooklet\u002Fuphold\u002FNginx\u002Fseror","knowledge\u002Fknowledge\u002Fbooklet\u002Fuphold\u002FNginx\u002Fseror.md","md",{"items":1204},[1205,1208,1212,1216,1218,1222],{"path":46,"title":47,"description":1206,"category":10,"score":1207},"Nginx 作为流量的总入口，安全配置是防线第一关。以下从六个基础维度加固你的服务，既实用又立竿见影。",6,{"path":1209,"title":1210,"description":1211,"category":10,"score":1207},"\u002Fknowledge\u002Fbooklet\u002Fuphold\u002Fnginx\u002Fconfig","配置文件结构与语法","下面我们深入到 Nginx 的配置核心——配置文件的结构、语法和变量系统。这一部分是你驾驭 Nginx 的“语法手册”。",{"path":1213,"title":1214,"description":1215,"category":10,"score":1207},"\u002Fknowledge\u002Fbooklet\u002Fuphold\u002Fnginx\u002Fcore","核心模块与常见指令详解","深入 Nginx 的指令层，是配置落地的关键。下面按功能模块拆解，每个指令都说明含义、语法、典型示例，并点出极易踩坑的地方。",{"path":51,"title":52,"description":1217,"category":10,"score":1207},"Nginx 是一款高性能的 HTTP 和反向代理服务器。学习路径见 运维导读。它的强大并发能力与灵活的扩展性根植于少数几个核心设计。理解这些底层原理，后续的配置、调优和排障都会变得通透。",{"path":1219,"title":1220,"description":1221,"category":10,"score":1207},"\u002Fknowledge\u002Fbooklet\u002Fuphold\u002Fnginx\u002Fpre","性能调优基础","性能调优的目标是：用有限的资源，支撑更高的并发、更快的响应、更稳的服务。下面按优化维度，逐一拆解原理和配置要诀。",{"path":1223,"title":1224,"description":1225,"category":10,"score":1207},"\u002Fknowledge\u002Fbooklet\u002Fuphold\u002Fnginx\u002Flogger","访问日志与错误日志","日志是 Nginx 排错的“第一现场”。一个优秀的日志策略既能完整保留请求上下文，又不会撑爆磁盘。下面从格式定制、存储轮转、错误分级三个维度详细讲解。",{"series":1227,"title":12,"items":1228,"index":1207,"prev":1242,"next":1243},"booklet\u002Fuphold\u002Fnginx",[1229,1231,1233,1235,1237,1239,1241],{"path":51,"title":52,"date":1230,"pinned":15},"2023-04-03",{"path":1209,"title":1210,"date":1232,"pinned":15},"2023-11-24",{"path":1213,"title":1214,"date":1234,"pinned":15},"2023-04-25",{"path":1223,"title":1224,"date":1236,"pinned":15},"2020-02-29",{"path":1219,"title":1220,"date":1238,"pinned":15},"2020-07-11",{"path":46,"title":47,"date":1240,"pinned":15},"2024-12-02",{"path":7,"title":8,"date":14,"pinned":15},{"path":46,"title":47,"date":1240,"pinned":15},null]