使用 IIS 和 URL Rewrite 作为反向代理
简介
如果您希望 Grafana 成为 IIS 中网站的子路径/子文件夹,则可以使用 IIS 的应用程序请求路由 (ARR) 和 URL 重写模块来支持此功能。
示例
- 父站点:http://yourdomain.com:8080
- Grafana:https://:3000
Grafana 作为子路径:http://yourdomain.com:8080/grafana
其他示例
- 如果应用程序仅在本地服务器上提供,则父站点也可以是 https://:8080。
- 如果您的域使用端口 443 的 https 提供服务,并且因此端口通常不会在您站点的地址中输入,则可以省略在以下配置步骤中为父站点指定端口的需要。
设置
安装 IIS 的 URL Rewrite 模块。
- 下载并安装 IIS 的 URL Rewrite 模块:https://www.iis.net/downloads/microsoft/url-rewrite
您还需要用于代理转发的 IIS 的 Application Request Routing (ARR) 模块
- 下载并安装 IIS 的 ARR 模块:https://www.iis.net/downloads/microsoft/application-request-routing
Grafana 配置
可以通过在 Grafana 安装的 `conf` 子目录中创建/编辑名为 `custom.ini` 的现有文件来设置 Grafana 配置。有关更多详细信息,请参阅安装说明。
使用上面的示例,如果子路径是 `grafana`(您可以将其设置为所需的任何名称)并且父站点是 `yourdomain.com:8080`,则您需要将以下内容添加到 `custom.ini` 配置文件中
[server]
domain = yourdomain.com:8080
root_url = %(protocol)s://%(domain)s/grafana/
更改配置文件后重启 Grafana 服务器。
配置用于提供 Grafana 服务的地址:http://yourdomain.com:8080/grafana
如果您的域上已有子路径,请按如下方式配置:
[server]
domain = yourdomain.com/existingsubpath
root_url = %(protocol)s://%(domain)s/grafana/
更改配置文件后重启 Grafana 服务器。
配置用于提供 Grafana 服务的地址:http://yourdomain.com/existingsubpath/grafana
IIS 配置
步骤 1:正向代理
- 打开 IIS Manager 并单击服务器
- 在服务器管理控制台中,双击 Application Request Routing 选项
- 单击右侧窗格中的 `Server Proxy Settings` 操作
- 选中 `Enable proxy` 复选框以启用它
- 单击 `Apply` 并继续进行 URL Rewriting 配置
注意:如果您未启用 Forward Proxy,则如果仅应用 URL Rewrite 规则,很可能会遇到 404 Not Found 错误。
步骤 2:URL Rewriting
- 在 IIS Manager 中,单击将运行 Grafana 的网站。例如,选择绑定到 http://yourdomain.com 域的网站。
- 在该网站的管理控制台中,双击 URL Rewrite 选项

- 单击 `Add Rule(s)...` 操作
- 为 Inbound Rule 选择 Blank Rule 模板

- 为网站创建具有以下设置的 Inbound Rule
- 模式:`grafana(/)?(.*)`(如果您已自定义使用的子路径,请使用该子路径而不是 `grafana`)
- 勾选 `Ignore case` 复选框
- 重写 URL 设置为 `https://:3000/{R:2}`
- 勾选 `Append query string` 复选框
- 勾选 `Stop processing of subsequent rules` 复选框

- 如果您的 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

Grafana 配置文件中的 `root_url` 设置与带子路径的父 URL 不匹配。如果 `root_url` 被误注释掉(在 .ini 文件中 `;` 用于注释一行),可能会发生这种情况
; root_url = %(protocol)s://%(domain)s/grafana/
或者如果 `root_url` 设置中的子路径与 IIS 中 Inbound Rule 模式中使用的子路径不匹配
root_url = %(protocol)s://%(domain)s/grafana/
Inbound Rule 中的模式:`wrongsubpath(/)?(.*)`
或者如果 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`