使用 IIS 与 URL 重写作为反向代理
介绍
如果您希望 Grafana 成为 IIS 中网站下的子路径/子文件夹,那么可以使用 ISS 的应用程序请求路由 (ARR) 和 URL 重写模块来支持此功能。
示例
- 父站点:http://yourdomain.com:8080
- Grafana:https://127.0.0.1:3000
Grafana 作为子路径:http://yourdomain.com:8080/grafana
其他示例
- 如果应用程序仅在本地服务器上提供服务,则父站点也可以类似于 https://127.0.0.1:8080。
- 如果您的域名使用 HTTPS 在端口 443 上提供服务,因此端口通常不会在您网站的地址中输入,那么在以下配置步骤中指定父站点端口的需要就可以消除。
设置
为 IIS 安装 URL 重写模块。
- 下载并安装 IIS 的 URL 重写模块:https://www.iis.net/downloads/microsoft/url-rewrite
您还需要 IIS 的应用程序请求路由 (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 管理器并点击服务器
- 在服务器的管理控制台中,双击应用程序请求路由选项
- 点击右侧窗格中的“服务器代理设置”操作
- 选中“启用代理”复选框使其启用
- 点击“应用”并继续进行 URL 重写配置
注意:如果您没有启用转发代理,如果您只应用了 URL 重写规则,则您很可能会得到 404 未找到错误
步骤 2:URL 重写
- 在 IIS 管理器中,点击 Grafana 将在其下运行的网站。例如,选择绑定到 http://yourdomain.com 域名的网站。
- 在该网站的管理控制台中,双击 URL 重写选项
- 点击“添加规则...”操作
- 为入站规则选择空白规则模板
- 使用以下设置创建网站的入站规则
- 模式:
grafana(/)?(.*)
(如果您自定义了要使用的子路径,请使用它代替grafana
) - 选中“忽略大小写”复选框
- 重写 URL 设置为
https://127.0.0.1:3000/{R:2}
- 选中“附加查询字符串”复选框
- 选中“停止处理后续规则”复选框
- 如果您的 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
Grafana 配置文件中的
root_url
设置与具有子路径的父 URL 不匹配。这可能是因为root_url
设置意外被注释掉了(;
用于在 .ini 文件中注释掉一行)。; root_url = %(protocol)s://%(domain)s/grafana/
或者
root_url
设置中的子路径与 IIS 中入站规则中模式使用的子路径不匹配。root_url = %(protocol)s://%(domain)s/grafana/
入站规则中的模式:
wrongsubpath(/)?(.*)
或者入站规则中的重写 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