piapia123
zh

Nginx 配置格式化与检查

网络

所有处理都在浏览器本地完成,数据不上传服务器

输入
把文件拖到这里可直接载入
输出

把一份 nginx 配置重新排版:按大括号层级缩进,或压成一行。除了排版,它还会做几项检查 —— 大括号配不配对、哪条指令漏了结尾的 `;`、同一个端口上有没有重复的 `server_name`、`proxy_pass` 后面带不带路径(这一处会改变转给后端的 URI,是 nginx 最常见的坑之一)。检查结果只报告行号与原因,不替你做决定。`#` 注释与引号里的 `{}`、`;` 不会被误判。所有处理都在浏览器里完成,配置内容不会离开这台设备。

功能

  • 按大括号层级缩进,缩进可选 2 空格、4 空格或 Tab
  • 可压成一行,便于对比或粘贴
  • 检查大括号是否配对,缺的、多的都给出行号
  • 检查指令是否漏了结尾的 `;`(含跨行漏写与文件末尾)
  • 找出同一端口上重复的 `server_name`
  • 提示同一端口上的多个 `default_server`
  • 说明 `proxy_pass` 带不带路径对后端 URI 的不同影响
  • `#` 注释与引号里的 `{}`、`;` 一律不参与结构判断
  • 结果可逐行复制,也可整块复制

使用方法

  1. 把 nginx 配置粘贴或拖进输入框
  2. 选缩进、是否展开、是否压成一行
  3. 格式化结果与检查结果随输入实时更新
  4. 点行末的复制按钮取走需要的一部分

常见问题

`proxy_pass http://backend` 与 `http://backend/` 有什么区别?
区别在转给后端的 URI。不带路径时,nginx 把原始请求 URI 原样转过去;带了路径(哪怕只是一个 `/`),location 匹配到的那一段会被替换成这个路径。所以 `location /api/ { proxy_pass http://backend/; }` 会把 `/api/users` 变成 `/users`,而 `proxy_pass http://backend;` 会原样转发 `/api/users`。这一处差异在日志里几乎看不出来,是排查 404 时最该先核对的一行。
为什么「漏分号」会指到某一整行?
nginx 允许一条指令跨行书写(续行通常有缩进),所以工具不能只看某一行。它的判据是:某一行的指令还没以 `;`、`{`、`}` 结束,下一行却从第 1 列起了一个新 token —— 这说明上一行忘了分号。缩进的续行不会被误报,因为它们的 token 不在第 1 列。
压成一行时为什么把注释去掉了?
因为一行里放不下 `#` 注释:`#` 后面的内容直到行尾都会被注释掉,压成一行之后它会把同一行剩下的指令全部吃掉。要去掉的是这个风险,而不是你的注释 —— 需要保留注释时,用「展开」模式即可。
配置内容会上传吗?
不会。切词、缩进、检查全部在浏览器里完成,页面不发送任何请求,断网也能用。

相关工具