使用 IIS 与 URL 重写作为反向代理

Grafana Labs Team
由 Grafana Labs 团队

最后更新于 2023 年 7 月 18 日

高级

介绍

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

示例

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

其他示例

  • 如果应用程序仅在本地服务器上提供服务,则父站点也可以类似于 https://127.0.0.1:8080。
  • 如果您的域名使用 HTTPS 在端口 443 上提供服务,因此端口通常不会在您网站的地址中输入,那么在以下配置步骤中指定父站点端口的需要就可以消除。

设置

为 IIS 安装 URL 重写模块。

您还需要 IIS 的应用程序请求路由 (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 管理器并点击服务器
  2. 在服务器的管理控制台中,双击应用程序请求路由选项
  3. 点击右侧窗格中的“服务器代理设置”操作
  4. 选中“启用代理”复选框使其启用
  5. 点击“应用”并继续进行 URL 重写配置

注意:如果您没有启用转发代理,如果您只应用了 URL 重写规则,则您很可能会得到 404 未找到错误

步骤 2:URL 重写

  1. 在 IIS 管理器中,点击 Grafana 将在其下运行的网站。例如,选择绑定到 http://yourdomain.com 域名的网站。
  2. 在该网站的管理控制台中,双击 URL 重写选项
  1. 点击“添加规则...”操作
  2. 为入站规则选择空白规则模板
  1. 使用以下设置创建网站的入站规则
  • 模式:grafana(/)?(.*)(如果您自定义了要使用的子路径,请使用它代替 grafana
  • 选中“忽略大小写”复选框
  • 重写 URL 设置为 https://127.0.0.1:3000/{R:2}
  • 选中“附加查询字符串”复选框
  • 选中“停止处理后续规则”复选框
  1. 如果您的 Grafana 版本大于 8.3.5,您还需要配置反向代理以保留主机头。
  • 这可以通过在 IIS 配置文件中进行配置来实现,在 cmd 提示符中运行 %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 错误 404.0 - 未找到 错误时,可能是以下原因之一:

  • 入站规则的模式不正确。编辑规则,点击 测试模式... 按钮,测试 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 中入站规则中模式使用的子路径不匹配。

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

    入站规则中的模式:wrongsubpath(/)?(.*)

  3. 或者入站规则中的重写 URL 不正确。

    重写 URL 不应该包含子路径。

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

您看到“更新选项错误:不允许来源”错误

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