使用 IIS 和 URL Rewrite 作为反向代理
简介
如果您想让 Grafana 成为 IIS 中网站的子路径/子文件夹,可以使用 IIS 的 Application Request Routing (ARR) 和 URL Rewrite 模块来实现。
示例
- 父站点: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 配置可以通过在您的 Grafana 安装目录下的 conf
子目录中创建或编辑名为 custom.ini
的文件来设置。有关更多详细信息,请参阅安装说明。
使用上面的示例,如果子路径是 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(URL 重写)配置
注意:如果您未启用正向代理,并且只应用了 URL Rewrite 规则,您很可能会遇到 404 Not Found 错误
步骤 2:URL 重写
- 在 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 头部。
- 这可以通过在命令提示符中运行 `%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

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 应包含从模式匹配中返回子路径后部分 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`