双11流量突增应对
电商后端运维,双11大促前发现单台应用服务器 CPU 飙到 90%,用户下单超时。手动改 upstream 列表容易写错 IP 或端口,一旦配错直接 502。用本工具生成轮询或最少连接策略的负载均衡配置,把 3 台新扩容的节点加进去,复制粘贴到 nginx.conf 就生效,10 分钟内完成扩容。
配置 Nginx 反向代理时,最常卡壳的不是语法,是 upstream 权重分配与 SSL 证书路径拼接。这个工具把 server 块拆成表单字段——填完域名、后端地址、证书路径,直接吐出可粘贴的 .conf 文件。只处理 Nginx 原生指令,不生成第三方模块语法。所有配置在浏览器本地拼接,不经过服务器。
电商后端运维,双11大促前发现单台应用服务器 CPU 飙到 90%,用户下单超时。手动改 upstream 列表容易写错 IP 或端口,一旦配错直接 502。用本工具生成轮询或最少连接策略的负载均衡配置,把 3 台新扩容的节点加进去,复制粘贴到 nginx.conf 就生效,10 分钟内完成扩容。
创业公司后端,凌晨 2 点准备上线新 API 网关,nginx -t 报错 SSL 证书已过期。手写 ssl_certificate 和 ssl_certificate_key 路径容易漏配中间证书链,导致安卓客户端报错。把新证书路径和协议版本填进工具,自动生成带完整链的 server block,直接替换原有配置,赶在早高峰前恢复 HTTPS 访问。
前端开发,需要把 Vue 打包后的 dist 目录部署到公司内网服务器供客户评审。手动配 root 和 try_files 容易忘记处理 history 路由模式,导致刷新页面变 404。用工具生成静态站配置,填入项目路径和域名,自动加上 location / 的 try_files 规则,客户在 iPad 上直接访问子域名就能操作原型。
运维工程师,公司内网的 GitLab 需要通过公网跳板机暴露给远程团队。手写 proxy_pass 时经常漏掉 proxy_set_header Host 和 X-Real-IP,导致 GitLab 的 clone URL 生成错误。把内网服务地址和公网域名填入工具,自动补全所有必要的 header 转发和 WebSocket 支持,远程同事直接 git clone 就能拉代码。
微服务架构下,新启动的订单服务需要接入现有 Nginx 网关,路由规则是 /order/* 转发到 10.0.1.5:8080。手动编辑 location 块容易跟已有的 rewrite 规则冲突,导致路径被二次截断。用工具生成独立 server 片段,在 location /order/ 里精确配置 proxy_pass 末尾带斜杠,避免路径拼接错误,合并到主配置后直接生效。
| 输入 | 输出 | 说明 |
|---|---|---|
| 域名:api.example.com 目标地址:http://192.168.1.10:3000 开启 WebSocket:是 开启缓存:否 | server { listen 80; server_name api.example.com; location / { proxy_pass http://192.168.1.10:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; 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; } } | 常规:最常见的反向代理场景——API 网关,WebSocket 支持自动注入 Upgrade 头,验证基础代理功能 |
| 域名:static.example.com 根目录:/var/www/static 开启目录列表:是 开启 Gzip:是 缓存过期时间:7天 | server { listen 80; server_name static.example.com; root /var/www/static; autoindex on; location / { try_files $uri $uri/ =404; expires 7d; add_header Cache-Control "public"; } gzip on; gzip_types text/plain text/css application/javascript image/svg+xml; } | 常规:静态资源站点,自动添加 expires 和 gzip 配置,验证目录列表开关和缓存策略 |
| 域名:load.example.com 上游服务器:server1:8080 weight=3; server2:8080 weight=1; server3:8080 backup 负载均衡算法:least_conn 健康检查:是(每10秒) | upstream backend { least_conn; server server1:8080 weight=3; server server2:8080 weight=1; server server3:8080 backup; } server { listen 80; server_name load.example.com; location / { proxy_pass http://backend; proxy_next_upstream error timeout invalid_header http_500; proxy_connect_timeout 5s; proxy_read_timeout 10s; } } | 常规:负载均衡场景,验证 least_conn 算法、权重分配、backup 备用服务器、超时参数 |
| 域名:secure.example.com SSL 证书路径:/etc/ssl/certs/example.crt SSL 私钥路径:/etc/ssl/private/example.key 强制 HTTPS:是 HSTS:是(max-age=31536000) | server { listen 80; server_name secure.example.com; return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; server_name secure.example.com; ssl_certificate /etc/ssl/certs/example.crt; ssl_certificate_key /etc/ssl/private/example.key; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; location / { root /var/www/html; index index.html; } } | 边界:SSL 配置——自动生成 HTTP→HTTPS 重定向、HSTS 头、TLS 协议限制,验证证书路径和加密套件 |
| 域名:test.example.com 目标地址:http://localhost:8080 开启缓存:是(缓存大小 100m,缓存有效期 1h) 自定义请求头:X-Custom-Header "myvalue" | proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=mycache:100m inactive=1h max_size=100m; server { listen 80; server_name test.example.com; location / { proxy_pass http://localhost:8080; proxy_cache mycache; proxy_cache_valid 200 302 1h; proxy_cache_valid 404 1m; proxy_set_header X-Custom-Header "myvalue"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } | 边界:缓存配置——自动生成 proxy_cache_path 和缓存策略,验证自定义请求头与缓存共存 |
| 域名:redirect.example.com 重定向目标:https://newsite.com$uri 重定向类型:301 仅特定路径:/old-path | server { listen 80; server_name redirect.example.com; location /old-path { return 301 https://newsite.com$uri; } location / { try_files $uri $uri/ =404; } } | 边界:路径级重定向——仅 /old-path 被重定向,其他路径正常响应,验证 return 指令与 try_files 共存 |
| 域名:block.example.com 禁止 IP:192.168.1.1; 10.0.0.0/8 允许 IP:192.168.1.0/24 拒绝状态码:403 | server { listen 80; server_name block.example.com; location / { deny 192.168.1.1; deny 10.0.0.0/8; allow 192.168.1.0/24; deny all; return 403; root /var/www/html; index index.html; } } | 易错:IP 黑白名单——allow/deny 顺序敏感,deny all 必须放在最后,否则规则失效;验证 CIDR 格式支持 |
| 域名:error.example.com 自定义错误页:404 → /404.html; 500 → /500.html 错误页根目录:/var/www/errors | server { listen 80; server_name error.example.com; error_page 404 /404.html; error_page 500 502 503 504 /500.html; location = /404.html { root /var/www/errors; internal; } location = /500.html { root /var/www/errors; internal; } location / { root /var/www/html; index index.html; } } | 易错:自定义错误页——必须用 internal 防止直接访问错误页文件,否则用户可绕过主站直接查看错误模板 |
1.反代目标地址漏写协议头
proxy_pass 192.168.1.100:8080;proxy_pass http://192.168.1.100:8080;Nginx 的 proxy_pass 要求完整 URI,包括 http:// 或 https://,否则启动报错 'no resolver defined to resolve'。
2.SSL 证书路径直接用相对路径
ssl_certificate cert.pem;ssl_certificate /etc/nginx/ssl/example.com/fullchain.pem;Nginx 工作目录通常是 /etc/nginx,相对路径会从该目录查找。建议用绝对路径避免因工作目录切换导致的证书加载失败。
3.负载均衡 upstream 没加端口号
upstream backend { server 10.0.0.1; server 10.0.0.2; }upstream backend { server 10.0.0.1:3000; server 10.0.0.2:3000; }upstream 默认端口是 80,如果后端服务跑在非标准端口(如 3000),不加端口会连接失败,导致 502 Bad Gateway。
4.静态站 root 路径末尾加斜杠
root /var/www/html/;root /var/www/html;root 指令末尾加斜杠后,Nginx 会拼接出 // 双斜杠路径(如 /var/www/html//index.html),导致文件找不到而返回 404。
5.反代时没传 Host 头,后端拿不到真实域名
proxy_pass http://backend;proxy_set_header Host $host;
proxy_pass http://backend;默认 proxy_pass 会传后端 IP 作为 Host,后端程序(如 Django)依赖 Host 做路由或校验,丢失后可能返回 400 或错误页面。
6.SSL 配置里混用 TLS 1.0 和 1.1
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_protocols TLSv1.2 TLSv1.3;TLS 1.0/1.1 有已知安全漏洞(如 POODLE),PCI DSS 等合规要求禁用。现代浏览器只支持 1.2+,保留旧协议反而降低安全性。
7.location 块里用 = 前缀但路径写错
location = /api/ { proxy_pass http://backend; }location /api/ { proxy_pass http://backend; }= 是精确匹配,/api/ 只匹配该路径不含子路径(如 /api/users 不匹配)。通常反代需要前缀匹配,应省略 = 或用 ^~。
8.upstream 里用 IP 但没配 resolver
upstream backend { server api.example.com:443; }upstream backend { server 203.0.113.5:443; }upstream 中写域名需要 Nginx 启动时能解析,但默认没有 resolver。要么用 IP 地址,要么在 http 块加 resolver 8.8.8.8;。
upstream_hash = crc32(uri) % upstream_count
crc32(uri)请求 URI 的 CRC32 校验和upstream_count上游服务器数量3 台后端服务器,请求 /api/user 的 URI 计算 crc32 得 0x4A5B6C7D(十进制 1247806589),1247806589 % 3 = 2,请求固定转发到第 3 台服务器。
可以。工具支持「反向代理」和「静态站」两种站点类型。你可以在配置里添加两个 location 块:把 /blog 指向一个本地端口(比如 3000),把 /api 指向另一个端口(比如 8080),或者用子域名区分。工具生成的配置里 location 部分会保留你填的路由规则,直接复制到 nginx.conf 即可生效。
工具默认使用你填写的服务名(如 backend、app1)作为 upstream 名称,你可以在输入框里自由修改。如果留空,工具会生成一个默认名称如 my_upstream。生成的配置中所有 proxy_pass 都会引用这个名称,修改后整段配置会自动同步。
工具生成的 SSL 配置中 server 块会包含 ssl_certificate 和 ssl_certificate_key 两个指令,但其路径留空为 /path/to/your/fullchain.pem 和 /path/to/your/privkey.pem。因为工具不知道你的证书实际存放位置,你需要手动替换为实际的绝对路径。建议使用 Let's Encrypt 默认路径,如 /etc/letsencrypt/live/yourdomain/fullchain.pem。
工具生成的 upstream 块默认不包含健康检查参数。如果后端服务器宕机,nginx 仍会尝试转发请求到该服务器,导致 502 错误。建议手动在 upstream 块中添加 max_fails=3 fail_timeout=30s;或者使用 nginx 商业版的 active health checks。工具目前只生成基础配置,高级健康检查需自行补充。
工具生成的配置是单个 server 或 http 块的内容,不包含 nginx.conf 顶层必需的 events { } 块。你需要把生成的代码粘贴到已有 nginx.conf 的 http { } 块内,或者粘贴到 sites-available 目录的独立文件中。如果服务器上没有 events 块,nginx 启动会报错,建议先确认主配置文件中已有 events { worker_connections 1024; }。
duplicate location 错误通常是因为你手动在配置中写了两个完全相同的 location 路径。工具生成的配置里每个 location 都是唯一的,但如果你在粘贴前已经有一个 location / 块,又粘贴了工具生成的另一个 location /,就会冲突。解决方法是删除原有的 location 块,或把两个块合并,使用 location / { proxy_pass ... } 和 location /api { proxy_pass ... } 来区分。
ChatGPT 生成的配置可能语法错误或遗漏关键参数(如缺少 proxy_set_header Host),而本工具基于结构化表单生成,每个字段都有默认值和校验,不会出现语法错误。但 ChatGPT 可以回答「怎么配置 websocket 代理」等开放式问题,本工具只生成静态配置文本。如果你需要快速生成一个标准场景的配置,本工具更可靠;如果需要定制化逻辑,ChatGPT 更灵活。
复制生成内容到服务器后,先运行 nginx -t 检查语法。如果提示 ok,再执行 nginx -s reload 重载配置。然后通过 curl -I http://yourdomain 查看返回的 HTTP 状态码和头信息。如果配置了 SSL,用 curl -I https://yourdomain 测试。如果返回 502,检查后端服务是否启动;如果返回 404,检查 location 路径是否匹配。
隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。