+++ title = "Grafana with IIS Reverse Proxy on Windows" type = "docs" keywords = ["grafana", "tutorials", "proxy", "IIS", "windows"] [menu.docs] parent = "tutorials" weight = 10 +++
If you want Grafana to be a subpath or subfolder under a website in IIS then the URL Rewrite module for ISS can be used to support this.
Example:
Grafana as a subpath: http://localhost:8080/grafana
If you have not already done it, then a requirement is to install URL Rewrite module for IIS.
Download and install the URL Rewrite module for IIS: https://www.iis.net/downloads/microsoft/url-rewrite
The Grafana config can be set by creating a file named custom.ini in the conf subdirectory of your Grafana installation. See the installation instructions for more details.
Given that the subpath should be grafana and the parent site is localhost:8080 then add this to the custom.ini config file:
[server]
domain = localhost:8080
root_url = %(protocol)s://%(domain)s/grafana/
Restart the Grafana server after changing the config file.
In the admin console for this website, double click on the Url Rewrite option: {{< docs-imagebox img="/img/docs/tutorials/IIS_admin_console.png" max-width= "800px" >}}
Click on the Add Rule(s)... action
Choose the Blank Rule template for an Inbound Rule {{< docs-imagebox img="/img/docs/tutorials/IIS_add_inbound_rule.png" max-width= "800px" >}}
Create an Inbound Rule for the parent website (localhost:8080 in this example) with the following settings:
grafana(/)?(.*)Ignore case checkboxhttp://localhost:3000/{R:2}Append query string checkboxStop processing of subsequent rules checkbox{{< docs-imagebox img="/img/docs/tutorials/IIS_url_rewrite.png" max-width= "800px" >}}
Finally, navigate to http://localhost:8080/grafana (replace http://localhost:8080 with your parent domain) and you should come to the Grafana login page.
When navigating to the grafana url (http://localhost:8080/grafana in the example above) and a HTTP Error 404.0 - Not Found error is returned then either:
Test pattern... button, test the part of the url after http://localhost:8080/ and make sure it matches. For grafana/login the test should return 3 capture groups: {R:0}: grafana {R:1}: / and {R:2}: login.root_url setting in the Grafana config file does not match the parent url with subpath.{{< docs-imagebox img="/img/docs/tutorials/IIS_proxy_error.png" max-width= "800px" >}}
The root_url setting in the Grafana config file does not match the parent url with subpath. This could happen if the root_url is commented out by mistake (; is used for commenting out a line in .ini files):
; root_url = %(protocol)s://%(domain)s/grafana/
or if the subpath in the root_url setting does not match the subpath used in the pattern in the Inbound Rule in IIS:
root_url = %(protocol)s://%(domain)s/grafana/
pattern in Inbound Rule: wrongsubpath(/)?(.*)
or if the Rewrite Url in the Inbound Rule is incorrect.
The Rewrite Url should not include the subpath.
The Rewrite Url should contain the capture group from the pattern matching that returns the part of the url after the subpath. The pattern used above returns 3 capture groups and the third one {R:2} returns the part of the url after http://localhost:8080/grafana/.