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

Grafana Labs Team
作者:Grafana Labs 团队

最后更新于 2025 年 3 月 6 日

高级

简介

如果您想让 Grafana 成为 IIS 中网站的子路径/子文件夹,可以使用 IIS 的 Application Request Routing (ARR) 和 URL Rewrite 模块来实现。

示例

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

其他示例

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

设置

安装适用于 IIS 的 URL Rewrite 模块。

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

Grafana 配置

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

使用上面的示例,如果子路径是 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(URL 重写)配置

注意:如果您未启用正向代理,并且只应用了 URL Rewrite 规则,您很可能会遇到 404 Not Found 错误

步骤 2:URL 重写

  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 头部。
  • 这可以通过在命令提示符中运行 `%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/proxy -preserveHostHeader:true /commit:apphost` 来配置 IIS 配置文件来实现。
  • 更多信息请参阅此处: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...(测试模式...)按钮,测试 http://yourdomain.com:8080/ 后的 URL 部分,并确保匹配。对于 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 应包含从模式匹配中返回子路径后部分 URL 的捕获组。上面使用的模式返回三个捕获组,第三个 {R:2} 返回 http://yourdomain.com:8080/grafana/ 后面的 URL 部分。

您看到“Error updating options: origin not allowed”(更新选项错误:不允许的来源)错误

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