Use IIS with URL Rewrite as a Reverse Proxy
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:
- Parent site: http://localhost:8080
- Grafana: http://localhost:3000
Grafana as a subpath: http://localhost:8080/grafana
Setup
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
You will also need the Application Request Routing (ARR) module for IIS for proxy forwarding
Download and install ARR module for IIS: https://www.iis.net/downloads/microsoft/application-request-routing
Grafana Config
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.
IIS Config
Forward Proxy
- Open the IIS Manager and click on the server
- In the admin console for the server, double click on the Application Request Routing option:
- Click the
Server Proxy Settings
action on the right-hand pane - Select the
Enable proxy
checkbox so that it is enabled - Click
Apply
and proceed with the URL Rewriting configuration
Note: If you don’t enable the Forward Proxy, you will most likely get 404 Not Found if you only apply the URL Rewrite rule
URL Rewriting
- Open the IIS Manager and click on the parent website
- In the admin console for this website, double click on the URL Rewrite option:
- Click on the
Add Rule(s)...
action - Choose the Blank Rule template for an Inbound Rule
- Create an Inbound Rule for the parent website (localhost:8080 in this example) with the following settings:
- pattern:
grafana(/)?(.*)
- check the
Ignore case
checkbox - rewrite URL set to
http://localhost:3000/{R:2}
- check the
Append query string
checkbox - check the
Stop processing of subsequent rules
checkbox
Finally, navigate to http://localhost:8080/grafana
(replace http://localhost:8080
with your parent domain) and you should come to the Grafana login page.
Troubleshooting
404 error
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:
- the pattern for the Inbound Rule is incorrect. Edit the rule, click on the
Test pattern...
button, test the part of the URL afterhttp://localhost:8080/
and make sure it matches. Forgrafana/login
the test should return 3 capture groups: {R:0}:grafana
{R:1}:/
and {R:2}:login
. - The
root_url
setting in the Grafana config file does not match the parent URL with subpath.
Grafana Website only shows text with no images or css
-
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/
.