[{"data":1,"prerenderedAt":1295},["ShallowReactive",2],{"doc-page:\u002Fdocs\u002Fnginx-config":3},{"doc":4,"prev":1255,"next":1262,"resolvedType":8,"readingMinutes":96,"audience":1269,"checklist":1273,"related":1277},{"path":5,"title":6,"description":7,"docType":8,"resourceKind":9,"categoryId":10,"categoryLabel":11,"updatedAt":12,"publishedAt":12,"icon":13,"body":14},"\u002Fdocs\u002Fnginx-config","Nginx 配置指南","Nginx 安装、反向代理、HTTPS 配置、负载均衡与性能优化","article",null,"infra-deployment","服务器与部署","2026-02-27","i-carbon-cloud",{"type":15,"value":16,"toc":1227},"minimark",[17,21,25,29,32,51,54,57,150,153,206,209,303,306,340,343,347,354,358,373,376,460,464,520,524,527,564,567,730,733,815,818,903,906,965,968,971,992,995,1075,1078,1082,1085,1097,1100,1104,1107,1123,1127,1134,1138,1149,1152,1163,1166,1193,1196,1223],[18,19,6],"h1",{"id":20},"nginx-配置指南",[22,23,24],"p",{},"这页适合作为“反向代理与静态站点配置入口”。Nginx 真正常用的不是花哨指令，而是把站点入口、代理、TLS、缓存和限流几件事稳定拼起来。",[26,27,28],"h2",{"id":28},"推荐上手顺序",[22,30,31],{},"建议按这个顺序掌握：",[33,34,35,39,42,45,48],"ol",{},[36,37,38],"li",{},"先会起一个静态站点",[36,40,41],{},"再会配反向代理",[36,43,44],{},"再接 HTTPS 和自动续期",[36,46,47],{},"再加缓存、压缩和限流",[36,49,50],{},"最后再做负载均衡和更细的性能调优",[22,52,53],{},"先把基础站点跑顺，比一开始追求复杂高性能配置更重要。",[26,55,56],{"id":56},"安装",[58,59,64],"pre",{"className":60,"code":61,"language":62,"meta":63,"style":63},"language-bash shiki shiki-themes github-light github-dark","# Ubuntu\u002FDebian\napt install nginx -y\nsystemctl enable nginx\n\n# Docker\ndocker run -d --name nginx -p 80:80 -p 443:443 nginx:alpine\n","bash","",[65,66,67,76,94,106,113,119],"code",{"__ignoreMap":63},[68,69,72],"span",{"class":70,"line":71},"line",1,[68,73,75],{"class":74},"sJ8bj","# Ubuntu\u002FDebian\n",[68,77,79,83,87,90],{"class":70,"line":78},2,[68,80,82],{"class":81},"sScJk","apt",[68,84,86],{"class":85},"sZZnC"," install",[68,88,89],{"class":85}," nginx",[68,91,93],{"class":92},"sj4cs"," -y\n",[68,95,97,100,103],{"class":70,"line":96},3,[68,98,99],{"class":81},"systemctl",[68,101,102],{"class":85}," enable",[68,104,105],{"class":85}," nginx\n",[68,107,109],{"class":70,"line":108},4,[68,110,112],{"emptyLinePlaceholder":111},true,"\n",[68,114,116],{"class":70,"line":115},5,[68,117,118],{"class":74},"# Docker\n",[68,120,122,125,128,131,134,136,139,142,144,147],{"class":70,"line":121},6,[68,123,124],{"class":81},"docker",[68,126,127],{"class":85}," run",[68,129,130],{"class":92}," -d",[68,132,133],{"class":92}," --name",[68,135,89],{"class":85},[68,137,138],{"class":92}," -p",[68,140,141],{"class":85}," 80:80",[68,143,138],{"class":92},[68,145,146],{"class":85}," 443:443",[68,148,149],{"class":85}," nginx:alpine\n",[26,151,152],{"id":152},"常用命令",[58,154,156],{"className":60,"code":155,"language":62,"meta":63,"style":63},"nginx -t                  # 测试配置\nnginx -s reload           # 重载配置\nnginx -s stop             # 停止\nsystemctl status nginx    # 查看状态\n",[65,157,158,169,182,194],{"__ignoreMap":63},[68,159,160,163,166],{"class":70,"line":71},[68,161,162],{"class":81},"nginx",[68,164,165],{"class":92}," -t",[68,167,168],{"class":74},"                  # 测试配置\n",[68,170,171,173,176,179],{"class":70,"line":78},[68,172,162],{"class":81},[68,174,175],{"class":92}," -s",[68,177,178],{"class":85}," reload",[68,180,181],{"class":74},"           # 重载配置\n",[68,183,184,186,188,191],{"class":70,"line":96},[68,185,162],{"class":81},[68,187,175],{"class":92},[68,189,190],{"class":85}," stop",[68,192,193],{"class":74},"             # 停止\n",[68,195,196,198,201,203],{"class":70,"line":108},[68,197,99],{"class":81},[68,199,200],{"class":85}," status",[68,202,89],{"class":85},[68,204,205],{"class":74},"    # 查看状态\n",[26,207,208],{"id":208},"基础配置",[58,210,213],{"className":211,"code":212,"language":162,"meta":63,"style":63},"language-nginx shiki shiki-themes github-light github-dark","# \u002Fetc\u002Fnginx\u002Fsites-available\u002Fexample.conf\nserver {\n    listen 80;\n    server_name example.com;\n    root \u002Fvar\u002Fwww\u002Fexample;\n    index index.html;\n\n    location \u002F {\n        try_files $uri $uri\u002F \u002Findex.html;\n    }\n}\n",[65,214,215,220,230,241,249,257,265,270,282,291,297],{"__ignoreMap":63},[68,216,217],{"class":70,"line":71},[68,218,219],{"class":74},"# \u002Fetc\u002Fnginx\u002Fsites-available\u002Fexample.conf\n",[68,221,222,226],{"class":70,"line":78},[68,223,225],{"class":224},"szBVR","server",[68,227,229],{"class":228},"sVt8B"," {\n",[68,231,232,235,238],{"class":70,"line":96},[68,233,234],{"class":224},"    listen ",[68,236,237],{"class":92},"80",[68,239,240],{"class":228},";\n",[68,242,243,246],{"class":70,"line":108},[68,244,245],{"class":224},"    server_name ",[68,247,248],{"class":228},"example.com;\n",[68,250,251,254],{"class":70,"line":115},[68,252,253],{"class":224},"    root ",[68,255,256],{"class":228},"\u002Fvar\u002Fwww\u002Fexample;\n",[68,258,259,262],{"class":70,"line":121},[68,260,261],{"class":224},"    index ",[68,263,264],{"class":228},"index.html;\n",[68,266,268],{"class":70,"line":267},7,[68,269,112],{"emptyLinePlaceholder":111},[68,271,273,276,279],{"class":70,"line":272},8,[68,274,275],{"class":224},"    location",[68,277,278],{"class":81}," \u002F ",[68,280,281],{"class":228},"{\n",[68,283,285,288],{"class":70,"line":284},9,[68,286,287],{"class":224},"        try_files ",[68,289,290],{"class":228},"$uri $uri\u002F \u002Findex.html;\n",[68,292,294],{"class":70,"line":293},10,[68,295,296],{"class":228},"    }\n",[68,298,300],{"class":70,"line":299},11,[68,301,302],{"class":228},"}\n",[22,304,305],{},"启用站点：",[58,307,309],{"className":60,"code":308,"language":62,"meta":63,"style":63},"ln -s \u002Fetc\u002Fnginx\u002Fsites-available\u002Fexample.conf \u002Fetc\u002Fnginx\u002Fsites-enabled\u002F\nnginx -t && nginx -s reload\n",[65,310,311,324],{"__ignoreMap":63},[68,312,313,316,318,321],{"class":70,"line":71},[68,314,315],{"class":81},"ln",[68,317,175],{"class":92},[68,319,320],{"class":85}," \u002Fetc\u002Fnginx\u002Fsites-available\u002Fexample.conf",[68,322,323],{"class":85}," \u002Fetc\u002Fnginx\u002Fsites-enabled\u002F\n",[68,325,326,328,330,333,335,337],{"class":70,"line":78},[68,327,162],{"class":81},[68,329,165],{"class":92},[68,331,332],{"class":228}," && ",[68,334,162],{"class":81},[68,336,175],{"class":92},[68,338,339],{"class":85}," reload\n",[26,341,342],{"id":342},"常见场景",[344,345,346],"h3",{"id":346},"单页前端应用",[22,348,349,350,353],{},"前端路由项目通常需要 ",[65,351,352],{},"try_files"," 回退到入口文件，否则刷新子路由会 404。",[344,355,357],{"id":356},"反代后端-api","反代后端 API",[22,359,360,361,364,365,368,369,372],{},"核心不是 ",[65,362,363],{},"proxy_pass"," 一条指令，而是把 ",[65,366,367],{},"Host","、",[65,370,371],{},"X-Forwarded-*"," 等头补齐，不然后端经常拿不到真实来源信息。",[26,374,375],{"id":375},"反向代理",[58,377,379],{"className":211,"code":378,"language":162,"meta":63,"style":63},"server {\n    listen 80;\n    server_name api.example.com;\n\n    location \u002F {\n        proxy_pass http:\u002F\u002F127.0.0.1:3000;\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n    }\n}\n",[65,380,381,387,395,402,406,414,422,430,437,444,451,455],{"__ignoreMap":63},[68,382,383,385],{"class":70,"line":71},[68,384,225],{"class":224},[68,386,229],{"class":228},[68,388,389,391,393],{"class":70,"line":78},[68,390,234],{"class":224},[68,392,237],{"class":92},[68,394,240],{"class":228},[68,396,397,399],{"class":70,"line":96},[68,398,245],{"class":224},[68,400,401],{"class":228},"api.example.com;\n",[68,403,404],{"class":70,"line":108},[68,405,112],{"emptyLinePlaceholder":111},[68,407,408,410,412],{"class":70,"line":115},[68,409,275],{"class":224},[68,411,278],{"class":81},[68,413,281],{"class":228},[68,415,416,419],{"class":70,"line":121},[68,417,418],{"class":224},"        proxy_pass ",[68,420,421],{"class":228},"http:\u002F\u002F127.0.0.1:3000;\n",[68,423,424,427],{"class":70,"line":267},[68,425,426],{"class":224},"        proxy_set_header ",[68,428,429],{"class":228},"Host $host;\n",[68,431,432,434],{"class":70,"line":272},[68,433,426],{"class":224},[68,435,436],{"class":228},"X-Real-IP $remote_addr;\n",[68,438,439,441],{"class":70,"line":284},[68,440,426],{"class":224},[68,442,443],{"class":228},"X-Forwarded-For $proxy_add_x_forwarded_for;\n",[68,445,446,448],{"class":70,"line":293},[68,447,426],{"class":224},[68,449,450],{"class":228},"X-Forwarded-Proto $scheme;\n",[68,452,453],{"class":70,"line":299},[68,454,296],{"class":228},[68,456,458],{"class":70,"line":457},12,[68,459,302],{"class":228},[344,461,463],{"id":462},"websocket-支持","WebSocket 支持",[58,465,467],{"className":211,"code":466,"language":162,"meta":63,"style":63},"location \u002Fws {\n    proxy_pass http:\u002F\u002F127.0.0.1:3000;\n    proxy_http_version 1.1;\n    proxy_set_header Upgrade $http_upgrade;\n    proxy_set_header Connection \"upgrade\";\n}\n",[65,468,469,479,486,496,504,516],{"__ignoreMap":63},[68,470,471,474,477],{"class":70,"line":71},[68,472,473],{"class":224},"location",[68,475,476],{"class":81}," \u002Fws ",[68,478,281],{"class":228},[68,480,481,484],{"class":70,"line":78},[68,482,483],{"class":224},"    proxy_pass ",[68,485,421],{"class":228},[68,487,488,491,494],{"class":70,"line":96},[68,489,490],{"class":224},"    proxy_http_version ",[68,492,493],{"class":92},"1.1",[68,495,240],{"class":228},[68,497,498,501],{"class":70,"line":108},[68,499,500],{"class":224},"    proxy_set_header ",[68,502,503],{"class":228},"Upgrade $http_upgrade;\n",[68,505,506,508,511,514],{"class":70,"line":115},[68,507,500],{"class":224},[68,509,510],{"class":228},"Connection ",[68,512,513],{"class":85},"\"upgrade\"",[68,515,240],{"class":228},[68,517,518],{"class":70,"line":121},[68,519,302],{"class":228},[26,521,523],{"id":522},"httpslets-encrypt","HTTPS（Let's Encrypt）",[22,525,526],{},"配合 Certbot：",[58,528,530],{"className":60,"code":529,"language":62,"meta":63,"style":63},"apt install certbot python3-certbot-nginx -y\ncertbot --nginx -d example.com -d www.example.com\n",[65,531,532,546],{"__ignoreMap":63},[68,533,534,536,538,541,544],{"class":70,"line":71},[68,535,82],{"class":81},[68,537,86],{"class":85},[68,539,540],{"class":85}," certbot",[68,542,543],{"class":85}," python3-certbot-nginx",[68,545,93],{"class":92},[68,547,548,551,554,556,559,561],{"class":70,"line":78},[68,549,550],{"class":81},"certbot",[68,552,553],{"class":92}," --nginx",[68,555,130],{"class":92},[68,557,558],{"class":85}," example.com",[68,560,130],{"class":92},[68,562,563],{"class":85}," www.example.com\n",[22,565,566],{},"手动配置 SSL：",[58,568,570],{"className":211,"code":569,"language":162,"meta":63,"style":63},"server {\n    listen 443 ssl http2;\n    server_name example.com;\n\n    ssl_certificate \u002Fetc\u002Fletsencrypt\u002Flive\u002Fexample.com\u002Ffullchain.pem;\n    ssl_certificate_key \u002Fetc\u002Fletsencrypt\u002Flive\u002Fexample.com\u002Fprivkey.pem;\n\n    # 安全配置\n    ssl_protocols TLSv1.2 TLSv1.3;\n    ssl_ciphers HIGH:!aNULL:!MD5;\n    ssl_prefer_server_ciphers on;\n\n    # HSTS\n    add_header Strict-Transport-Security \"max-age=31536000\" always;\n}\n\n# HTTP 重定向到 HTTPS\nserver {\n    listen 80;\n    server_name example.com;\n    return 301 https:\u002F\u002F$host$request_uri;\n}\n",[65,571,572,578,588,594,598,606,614,618,623,631,639,649,653,659,674,679,684,690,697,706,713,725],{"__ignoreMap":63},[68,573,574,576],{"class":70,"line":71},[68,575,225],{"class":224},[68,577,229],{"class":228},[68,579,580,582,585],{"class":70,"line":78},[68,581,234],{"class":224},[68,583,584],{"class":92},"443",[68,586,587],{"class":228}," ssl http2;\n",[68,589,590,592],{"class":70,"line":96},[68,591,245],{"class":224},[68,593,248],{"class":228},[68,595,596],{"class":70,"line":108},[68,597,112],{"emptyLinePlaceholder":111},[68,599,600,603],{"class":70,"line":115},[68,601,602],{"class":224},"    ssl_certificate ",[68,604,605],{"class":228},"\u002Fetc\u002Fletsencrypt\u002Flive\u002Fexample.com\u002Ffullchain.pem;\n",[68,607,608,611],{"class":70,"line":121},[68,609,610],{"class":224},"    ssl_certificate_key ",[68,612,613],{"class":228},"\u002Fetc\u002Fletsencrypt\u002Flive\u002Fexample.com\u002Fprivkey.pem;\n",[68,615,616],{"class":70,"line":267},[68,617,112],{"emptyLinePlaceholder":111},[68,619,620],{"class":70,"line":272},[68,621,622],{"class":74},"    # 安全配置\n",[68,624,625,628],{"class":70,"line":284},[68,626,627],{"class":224},"    ssl_protocols ",[68,629,630],{"class":228},"TLSv1.2 TLSv1.3;\n",[68,632,633,636],{"class":70,"line":293},[68,634,635],{"class":224},"    ssl_ciphers ",[68,637,638],{"class":228},"HIGH:!aNULL:!MD5;\n",[68,640,641,644,647],{"class":70,"line":299},[68,642,643],{"class":224},"    ssl_prefer_server_ciphers ",[68,645,646],{"class":92},"on",[68,648,240],{"class":228},[68,650,651],{"class":70,"line":457},[68,652,112],{"emptyLinePlaceholder":111},[68,654,656],{"class":70,"line":655},13,[68,657,658],{"class":74},"    # HSTS\n",[68,660,662,665,668,671],{"class":70,"line":661},14,[68,663,664],{"class":224},"    add_header ",[68,666,667],{"class":228},"Strict-Transport-Security ",[68,669,670],{"class":85},"\"max-age=31536000\"",[68,672,673],{"class":228}," always;\n",[68,675,677],{"class":70,"line":676},15,[68,678,302],{"class":228},[68,680,682],{"class":70,"line":681},16,[68,683,112],{"emptyLinePlaceholder":111},[68,685,687],{"class":70,"line":686},17,[68,688,689],{"class":74},"# HTTP 重定向到 HTTPS\n",[68,691,693,695],{"class":70,"line":692},18,[68,694,225],{"class":224},[68,696,229],{"class":228},[68,698,700,702,704],{"class":70,"line":699},19,[68,701,234],{"class":224},[68,703,237],{"class":92},[68,705,240],{"class":228},[68,707,709,711],{"class":70,"line":708},20,[68,710,245],{"class":224},[68,712,248],{"class":228},[68,714,716,719,722],{"class":70,"line":715},21,[68,717,718],{"class":224},"    return",[68,720,721],{"class":92}," 301",[68,723,724],{"class":228}," https:\u002F\u002F$host$request_uri;\n",[68,726,728],{"class":70,"line":727},22,[68,729,302],{"class":228},[26,731,732],{"id":732},"负载均衡",[58,734,736],{"className":211,"code":735,"language":162,"meta":63,"style":63},"upstream backend {\n    server 127.0.0.1:3001;\n    server 127.0.0.1:3002;\n    server 127.0.0.1:3003;\n}\n\nserver {\n    listen 80;\n    location \u002F {\n        proxy_pass http:\u002F\u002Fbackend;\n    }\n}\n",[65,737,738,748,756,763,770,774,778,784,792,800,807,811],{"__ignoreMap":63},[68,739,740,743,746],{"class":70,"line":71},[68,741,742],{"class":224},"upstream",[68,744,745],{"class":81}," backend ",[68,747,281],{"class":228},[68,749,750,753],{"class":70,"line":78},[68,751,752],{"class":224},"    server",[68,754,755],{"class":228}," 127.0.0.1:3001;\n",[68,757,758,760],{"class":70,"line":96},[68,759,752],{"class":224},[68,761,762],{"class":228}," 127.0.0.1:3002;\n",[68,764,765,767],{"class":70,"line":108},[68,766,752],{"class":224},[68,768,769],{"class":228}," 127.0.0.1:3003;\n",[68,771,772],{"class":70,"line":115},[68,773,302],{"class":228},[68,775,776],{"class":70,"line":121},[68,777,112],{"emptyLinePlaceholder":111},[68,779,780,782],{"class":70,"line":267},[68,781,225],{"class":224},[68,783,229],{"class":228},[68,785,786,788,790],{"class":70,"line":272},[68,787,234],{"class":224},[68,789,237],{"class":92},[68,791,240],{"class":228},[68,793,794,796,798],{"class":70,"line":284},[68,795,275],{"class":224},[68,797,278],{"class":81},[68,799,281],{"class":228},[68,801,802,804],{"class":70,"line":293},[68,803,418],{"class":224},[68,805,806],{"class":228},"http:\u002F\u002Fbackend;\n",[68,808,809],{"class":70,"line":299},[68,810,296],{"class":228},[68,812,813],{"class":70,"line":457},[68,814,302],{"class":228},[26,816,817],{"id":817},"静态文件与缓存",[58,819,821],{"className":211,"code":820,"language":162,"meta":63,"style":63},"# 静态资源缓存\nlocation ~* \\.(js|css|png|jpg|jpeg|gif|ico|svg|woff2)$ {\n    expires 30d;\n    add_header Cache-Control \"public, immutable\";\n}\n\n# Gzip 压缩\ngzip on;\ngzip_types text\u002Fplain text\u002Fcss application\u002Fjson application\u002Fjavascript text\u002Fxml;\ngzip_min_length 1000;\n",[65,822,823,828,841,851,863,867,871,876,885,893],{"__ignoreMap":63},[68,824,825],{"class":70,"line":71},[68,826,827],{"class":74},"# 静态资源缓存\n",[68,829,830,832,835,839],{"class":70,"line":78},[68,831,473],{"class":224},[68,833,834],{"class":224}," ~*",[68,836,838],{"class":837},"sA_wV"," \\.(js|css|png|jpg|jpeg|gif|ico|svg|woff2)$ ",[68,840,281],{"class":228},[68,842,843,846,849],{"class":70,"line":96},[68,844,845],{"class":224},"    expires ",[68,847,848],{"class":92},"30d",[68,850,240],{"class":228},[68,852,853,855,858,861],{"class":70,"line":108},[68,854,664],{"class":224},[68,856,857],{"class":228},"Cache-Control ",[68,859,860],{"class":85},"\"public, immutable\"",[68,862,240],{"class":228},[68,864,865],{"class":70,"line":115},[68,866,302],{"class":228},[68,868,869],{"class":70,"line":121},[68,870,112],{"emptyLinePlaceholder":111},[68,872,873],{"class":70,"line":267},[68,874,875],{"class":74},"# Gzip 压缩\n",[68,877,878,881,883],{"class":70,"line":272},[68,879,880],{"class":224},"gzip ",[68,882,646],{"class":92},[68,884,240],{"class":228},[68,886,887,890],{"class":70,"line":284},[68,888,889],{"class":224},"gzip_types ",[68,891,892],{"class":228},"text\u002Fplain text\u002Fcss application\u002Fjson application\u002Fjavascript text\u002Fxml;\n",[68,894,895,898,901],{"class":70,"line":293},[68,896,897],{"class":224},"gzip_min_length ",[68,899,900],{"class":92},"1000",[68,902,240],{"class":228},[26,904,905],{"id":905},"限流",[58,907,909],{"className":211,"code":908,"language":162,"meta":63,"style":63},"# 定义限流区域\nlimit_req_zone $binary_remote_addr zone=api:10m rate=10r\u002Fs;\n\nserver {\n    location \u002Fapi\u002F {\n        limit_req zone=api burst=20 nodelay;\n        proxy_pass http:\u002F\u002F127.0.0.1:3000;\n    }\n}\n",[65,910,911,916,924,928,934,943,951,957,961],{"__ignoreMap":63},[68,912,913],{"class":70,"line":71},[68,914,915],{"class":74},"# 定义限流区域\n",[68,917,918,921],{"class":70,"line":78},[68,919,920],{"class":224},"limit_req_zone ",[68,922,923],{"class":228},"$binary_remote_addr zone=api:10m rate=10r\u002Fs;\n",[68,925,926],{"class":70,"line":96},[68,927,112],{"emptyLinePlaceholder":111},[68,929,930,932],{"class":70,"line":108},[68,931,225],{"class":224},[68,933,229],{"class":228},[68,935,936,938,941],{"class":70,"line":115},[68,937,275],{"class":224},[68,939,940],{"class":81}," \u002Fapi\u002F ",[68,942,281],{"class":228},[68,944,945,948],{"class":70,"line":121},[68,946,947],{"class":224},"        limit_req ",[68,949,950],{"class":228},"zone=api burst=20 nodelay;\n",[68,952,953,955],{"class":70,"line":267},[68,954,418],{"class":224},[68,956,421],{"class":228},[68,958,959],{"class":70,"line":272},[68,960,296],{"class":228},[68,962,963],{"class":70,"line":284},[68,964,302],{"class":228},[26,966,967],{"id":967},"上线前检查",[22,969,970],{},"部署前建议至少检查：",[972,973,974,980,983,986,989],"ul",{},[36,975,976,979],{},[65,977,978],{},"nginx -t"," 通过",[36,981,982],{},"80 \u002F 443 端口已放行",[36,984,985],{},"证书路径和域名对应正确",[36,987,988],{},"后端服务本身在本机可访问",[36,990,991],{},"日志目录、静态目录和站点目录权限正常",[26,993,994],{"id":994},"常用变量",[996,997,998,1011],"table",{},[999,1000,1001],"thead",{},[1002,1003,1004,1008],"tr",{},[1005,1006,1007],"th",{},"变量",[1005,1009,1010],{},"说明",[1012,1013,1014,1025,1035,1045,1055,1065],"tbody",{},[1002,1015,1016,1022],{},[1017,1018,1019],"td",{},[65,1020,1021],{},"$host",[1017,1023,1024],{},"请求的主机名",[1002,1026,1027,1032],{},[1017,1028,1029],{},[65,1030,1031],{},"$remote_addr",[1017,1033,1034],{},"客户端 IP",[1002,1036,1037,1042],{},[1017,1038,1039],{},[65,1040,1041],{},"$request_uri",[1017,1043,1044],{},"完整请求 URI",[1002,1046,1047,1052],{},[1017,1048,1049],{},[65,1050,1051],{},"$uri",[1017,1053,1054],{},"不含参数的 URI",[1002,1056,1057,1062],{},[1017,1058,1059],{},[65,1060,1061],{},"$args",[1017,1063,1064],{},"查询参数",[1002,1066,1067,1072],{},[1017,1068,1069],{},[65,1070,1071],{},"$scheme",[1017,1073,1074],{},"http 或 https",[26,1076,1077],{"id":1077},"常见问题",[344,1079,1081],{"id":1080},"改完配置-reload-失败","改完配置 reload 失败",[22,1083,1084],{},"优先跑：",[58,1086,1088],{"className":60,"code":1087,"language":62,"meta":63,"style":63},"nginx -t\n",[65,1089,1090],{"__ignoreMap":63},[68,1091,1092,1094],{"class":70,"line":71},[68,1093,162],{"class":81},[68,1095,1096],{"class":92}," -t\n",[22,1098,1099],{},"大多数问题都能在语法检查里先发现。",[344,1101,1103],{"id":1102},"反向代理后-websocket-不通","反向代理后 WebSocket 不通",[22,1105,1106],{},"通常是：",[972,1108,1109,1115,1120],{},[36,1110,1111,1112],{},"没加 ",[65,1113,1114],{},"Upgrade",[36,1116,1111,1117],{},[65,1118,1119],{},"Connection \"upgrade\"",[36,1121,1122],{},"代理层超时配置不合适",[344,1124,1126],{"id":1125},"前端刷新-404","前端刷新 404",[22,1128,1129,1130,1133],{},"这类问题多见于 SPA，通常说明少了 ",[65,1131,1132],{},"try_files $uri $uri\u002F \u002Findex.html;","。",[344,1135,1137],{"id":1136},"https-好了但站点资源还是混合内容","HTTPS 好了，但站点资源还是混合内容",[22,1139,1140,1141,1144,1145,1148],{},"说明页面里还有 ",[65,1142,1143],{},"http:\u002F\u002F"," 资源链接，或者代理层没有把 ",[65,1146,1147],{},"X-Forwarded-Proto"," 传给上游应用。",[26,1150,1151],{"id":1151},"风险提醒",[972,1153,1154,1157,1160],{},[36,1155,1156],{},"不要直接照搬网上整份大配置，先理解每一段在做什么",[36,1158,1159],{},"证书、私钥、日志和站点目录权限要分开检查",[36,1161,1162],{},"限流和缓存上线前先验证，避免误伤正常流量",[26,1164,1165],{"id":1165},"延伸阅读",[972,1167,1168,1175,1181,1187],{},[36,1169,1170],{},[1171,1172,1174],"a",{"href":1173},"\u002Fdocs\u002Fnginx-basics","Nginx 基础",[36,1176,1177],{},[1171,1178,1180],{"href":1179},"\u002Fdocs\u002Fcertbot-ssl","Certbot 与 SSL",[36,1182,1183],{},[1171,1184,1186],{"href":1185},"\u002Fdocs\u002Fvps-init","VPS 初始化配置",[36,1188,1189],{},[1171,1190,1192],{"href":1191},"\u002Fdocs\u002Fsecurity-hardening","服务器安全加固",[26,1194,1195],{"id":1195},"参考链接",[972,1197,1198,1207,1215],{},[36,1199,1200,1206],{},[1171,1201,1205],{"href":1202,"rel":1203},"https:\u002F\u002Fnginx.org\u002Fen\u002Fdocs\u002F",[1204],"nofollow","Nginx 文档"," — 官方文档",[36,1208,1209,1214],{},[1171,1210,1213],{"href":1211,"rel":1212},"https:\u002F\u002Fwww.digitalocean.com\u002Fcommunity\u002Ftools\u002Fnginx",[1204],"Nginx Config Generator"," — 在线生成配置",[36,1216,1217,1222],{},[1171,1218,1221],{"href":1219,"rel":1220},"https:\u002F\u002Fssl-config.mozilla.org\u002F",[1204],"Mozilla SSL Config"," — SSL 配置生成器",[1224,1225,1226],"style",{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}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 .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sA_wV, html code.shiki .sA_wV{--shiki-default:#032F62;--shiki-dark:#DBEDFF}",{"title":63,"searchDepth":78,"depth":78,"links":1228},[1229,1230,1231,1232,1233,1237,1240,1241,1242,1243,1244,1245,1246,1252,1253,1254],{"id":28,"depth":78,"text":28},{"id":56,"depth":78,"text":56},{"id":152,"depth":78,"text":152},{"id":208,"depth":78,"text":208},{"id":342,"depth":78,"text":342,"children":1234},[1235,1236],{"id":346,"depth":96,"text":346},{"id":356,"depth":96,"text":357},{"id":375,"depth":78,"text":375,"children":1238},[1239],{"id":462,"depth":96,"text":463},{"id":522,"depth":78,"text":523},{"id":732,"depth":78,"text":732},{"id":817,"depth":78,"text":817},{"id":905,"depth":78,"text":905},{"id":967,"depth":78,"text":967},{"id":994,"depth":78,"text":994},{"id":1077,"depth":78,"text":1077,"children":1247},[1248,1249,1250,1251],{"id":1080,"depth":96,"text":1081},{"id":1102,"depth":96,"text":1103},{"id":1125,"depth":96,"text":1126},{"id":1136,"depth":96,"text":1137},{"id":1151,"depth":78,"text":1151},{"id":1165,"depth":78,"text":1165},{"id":1195,"depth":78,"text":1195},{"path":1256,"title":1257,"description":1258,"docType":8,"resourceKind":9,"categoryId":1259,"categoryLabel":1260,"updatedAt":12,"publishedAt":12,"icon":1261},"\u002Fdocs\u002Fmarkdown-syntax","Markdown 语法速查","Markdown 基础语法、扩展语法、GitHub Flavored Markdown 与常用编辑器","online-tools","在线工具","i-carbon-tool-box",{"path":1263,"title":1264,"description":1265,"docType":8,"resourceKind":9,"categoryId":1266,"categoryLabel":1267,"updatedAt":12,"publishedAt":12,"icon":1268},"\u002Fdocs\u002Fnpm-scripts","npm scripts 与工具链","package.json scripts 配置、常用构建工具、Monorepo 管理与发包流程","programming-languages","编程语言","i-carbon-application",[1270,1271,1272],"希望把零散经验整理成长期可复用工作流的人","想先建立认知，再决定是否深入实践的人","希望阅读时顺手建立自己的操作清单或收藏体系的人",[1274,1275,1276],"先浏览标题、摘要和目录，带着问题阅读会更高效","顺手记录真正对你有用的命令、链接和注意事项，避免重复搜索","如果页面里提到相关文档，尽量一起打开对照，效果通常更完整",[1278,1283,1287,1291],{"path":1279,"title":1280,"description":1281,"docType":8,"resourceKind":9,"categoryId":10,"categoryLabel":11,"updatedAt":1282,"publishedAt":1282,"icon":13},"\u002Fdocs\u002Fcloudflare-pages-deploy","Cloudflare Pages 部署指南","Cloudflare Pages 项目部署、自定义域名、环境变量、重定向与 Functions","2026-02-28",{"path":1284,"title":1285,"description":1286,"docType":8,"resourceKind":9,"categoryId":10,"categoryLabel":11,"updatedAt":1282,"publishedAt":1282,"icon":13},"\u002Fdocs\u002Fs3-storage","S3 对象存储","S3 兼容存储使用、Cloudflare R2、MinIO 自建、rclone 同步与 SDK 集成",{"path":1288,"title":1289,"description":1290,"docType":8,"resourceKind":9,"categoryId":10,"categoryLabel":11,"updatedAt":12,"publishedAt":12,"icon":13},"\u002Fdocs\u002Fmonitoring-logging","监控与日志","服务器监控工具、日志管理、Uptime 监控与告警配置",{"path":1292,"title":1293,"description":1294,"docType":8,"resourceKind":9,"categoryId":10,"categoryLabel":11,"updatedAt":12,"publishedAt":12,"icon":13},"\u002Fdocs\u002Fcontainer-orchestration","容器编排入门","Docker Swarm 与 Kubernetes 基础概念、常用命令与本地开发环境",1776215713562]