使用 IIS 和 URL Rewrite 作为反向代理

Grafana Labs Team
Grafana Labs 团队撰写

最后更新日期:2025 年 3 月 6 日

高级

简介

如果您希望 Grafana 成为 IIS 中网站的子路径/子文件夹,则可以使用 IIS 的应用程序请求路由 (ARR) 和 URL 重写模块来支持此功能。

示例

Grafana 作为子路径:http://yourdomain.com:8080/grafana

其他示例

  • 如果应用程序仅在本地服务器上提供,则父站点也可以是 https://:8080。
  • 如果您的域使用端口 443 的 https 提供服务,并且因此端口通常不会在您站点的地址中输入,则可以省略在以下配置步骤中为父站点指定端口的需要。

设置

安装 IIS 的 URL Rewrite 模块。

您还需要用于代理转发的 IIS 的 Application Request Routing (ARR) 模块

Grafana 配置

可以通过在 Grafana 安装的 `conf` 子目录中创建/编辑名为 `custom.ini` 的现有文件来设置 Grafana 配置。有关更多详细信息,请参阅安装说明

使用上面的示例,如果子路径是 `grafana`(您可以将其设置为所需的任何名称)并且父站点是 `yourdomain.com:8080`,则您需要将以下内容添加到 `custom.ini` 配置文件中

bash
[server]
domain = yourdomain.com:8080
root_url = %(protocol)s://%(domain)s/grafana/

更改配置文件后重启 Grafana 服务器。

配置用于提供 Grafana 服务的地址:http://yourdomain.com:8080/grafana


如果您的域上已有子路径,请按如下方式配置:

bash
[server]
domain = yourdomain.com/existingsubpath
root_url = %(protocol)s://%(domain)s/grafana/

更改配置文件后重启 Grafana 服务器。

配置用于提供 Grafana 服务的地址:http://yourdomain.com/existingsubpath/grafana

IIS 配置

步骤 1:正向代理

  1. 打开 IIS Manager 并单击服务器
  2. 在服务器管理控制台中,双击 Application Request Routing 选项
  3. 单击右侧窗格中的 `Server Proxy Settings` 操作
  4. 选中 `Enable proxy` 复选框以启用它
  5. 单击 `Apply` 并继续进行 URL Rewriting 配置

注意:如果您未启用 Forward Proxy,则如果仅应用 URL Rewrite 规则,很可能会遇到 404 Not Found 错误。

步骤 2:URL Rewriting

  1. 在 IIS Manager 中,单击将运行 Grafana 的网站。例如,选择绑定到 http://yourdomain.com 域的网站。
  2. 在该网站的管理控制台中,双击 URL Rewrite 选项
  1. 单击 `Add Rule(s)...` 操作
  2. 为 Inbound Rule 选择 Blank Rule 模板
  1. 为网站创建具有以下设置的 Inbound Rule
  • 模式:`grafana(/)?(.*)`(如果您已自定义使用的子路径,请使用该子路径而不是 `grafana`)
  • 勾选 `Ignore case` 复选框
  • 重写 URL 设置为 `https://:3000/{R:2}`
  • 勾选 `Append query string` 复选框
  • 勾选 `Stop processing of subsequent rules` 复选框
  1. 如果您的 Grafana 版本高于 8.3.5,您还需要配置反向代理以保留主机头(host headers)。
  • 这可以通过在 cmd 提示符中运行以下命令来配置 IIS 配置文件来实现:`%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/proxy -preserveHostHeader:true /commit:apphost`
  • 更多信息请参阅这里:https://github.com/grafana/grafana/issues/45261

最后,导航至 http://yourdomain.com:8080/grafana,您应该会看到 Grafana 登录页面。

故障排除

404 错误

当导航到 Grafana URL(http://yourdomain.com:8080/grafana)并返回 `HTTP Error 404.0 - Not Found` 错误时,则表示以下情况之一

  • Inbound Rule 的模式不正确。编辑规则,单击 `Test pattern...` 按钮,测试 URL 中 http://yourdomain.com:8080/ 之后的部分,并确保它匹配。对于 `grafana/login`,测试应该返回 3 个捕获组:{R:0}: `grafana` {R:1}: `/` 和 {R:2}: `login`。
  • Grafana 配置文件中的 `root_url` 设置与带子路径的父 URL 不匹配。

Grafana 网站只显示文本,没有图片或 CSS

  1. Grafana 配置文件中的 `root_url` 设置与带子路径的父 URL 不匹配。如果 `root_url` 被误注释掉(在 .ini 文件中 `;` 用于注释一行),可能会发生这种情况

    ; root_url = %(protocol)s://%(domain)s/grafana/

  2. 或者如果 `root_url` 设置中的子路径与 IIS 中 Inbound Rule 模式中使用的子路径不匹配

    root_url = %(protocol)s://%(domain)s/grafana/

    Inbound Rule 中的模式:`wrongsubpath(/)?(.*)`

  3. 或者如果 Inbound Rule 中的 Rewrite URL 不正确。

    Rewrite URL 不应包含子路径。

    Rewrite URL 应包含模式匹配中返回子路径之后部分内容的捕获组。上面使用的模式返回三个捕获组,第三个捕获组 {R:2} 返回 URL 中 http://yourdomain.com:8080/grafana/ 之后的部分。

您看到“Error updating options: origin not allowed”错误

  • 请确保您已执行上述步骤 6,通过在 cmd 提示符中运行此命令来编辑 IIS 配置,以配置 IIS 保留主机头:`%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/proxy -preserveHostHeader:true /commit:apphost`