Install Grafana Behind reverse proxy
If the installation is done on a Host server then the following steps should be performed to setup grafana behind a reverse proxy.
Installation steps
To let Grafana know how to render and redirect the links correctly, in the Grafana configuration file, change
server.domain
to the domain name that will be used,
[server]
domain = example.com
2. Restart grafana to see the changes
3. To serve grafana behind the sub path, such as http://example.com/grafana
Include the sub path at the end of the root_url.
Set serve_from_sub_path
to true.
[server]
domain = example.com
root_url = %(protocol)s://%(domain)s:%(http_port)s/grafana/
serve_from_sub_path = true
4. Next step is to configure NGINX.
Configure NGINX
NGINX is a high performance load balancer, web server, and reverse proxy.
In the NGINX configuration file inside
http
section, add the following:
// this is required for proxy Grafana Live WebSocket connections.
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
upstream grafana {
server localhost:3000;
}
server {
listen 80;
root /usr/share/nginx/html;
index index.html index.htm;
location / {
proxy_set_header Host $http_host;
proxy_pass http://grafana;
}
# Proxy Grafana Live WebSocket connections.
location /api/live/ {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $http_host;
proxy_pass http://grafana;
}
}
Reload the NGINX configuration
Navigate to port 80 on the machine NGINX is running on and the Grafana login page will appear.
Also, be aware that the above configuration will work only when the proxy_pass
value for location /
is a literal string. If you are using a variable here, read this GitHub issue and there will be a need to add an appropriate NGINX rewrite rule.
To configure NGINX to serve Grafana under a sub path, update the location
block:
// this is required to proxy Grafana Live WebSocket connections.
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
upstream grafana {
server localhost:3000;
}
server {
listen 80;
root /usr/share/nginx/www;
index index.html index.htm;
location /grafana/ {
rewrite ^/grafana/(.*) /$1 break;
proxy_set_header Host $http_host;
proxy_pass http://grafana;
}
# Proxy Grafana Live WebSocket connections.
location /grafana/api/live/ {
rewrite ^/grafana/(.*) /$1 break;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $http_host;
proxy_pass http://grafana;
}
}
Configure HAProxy
To configure HAProxy to serve Grafana under a sub path:
frontend http-in
bind *:80
use_backend grafana_backend if { path /grafana } or { path_beg /grafana/ }
backend grafana_backend
# Requires haproxy >= 1.6
http-request set-path %[path,regsub(^/grafana/?,/)]
# Works for haproxy < 1.6
# reqrep ^([^\ ]*\ /)grafana[/]?(.*) \1\2
server grafana localhost:3000
Configure IIS
IIS requires that the URL Rewrite module is installed.
To configure IIS to serve Grafana under a sub path, create an Inbound Rule for the parent website in IIS Manager with the following settings:
pattern:
grafana(/)?(.*)
check the
Ignore case
checkboxrewrite URL set to
http://localhost:3000/{R:2}
check the
Append query string
checkboxcheck the
Stop processing of subsequent rules
checkbox
This is the rewrite rule that is generated in the web.config
:
<rewrite>
<rules>
<rule name="Grafana" enabled="true" stopProcessing="true">
<match url="grafana(/)?(.*)" />
<action type="Rewrite" url="http://localhost:3000/{R:2}" logRewrittenUrl="false" />
</rule>
</rules>
</rewrite>
Check the tutorial on IIS URL Rewrites for more in-depth instructions.
Configure Traefik
Traefik Cloud Native Reverse Proxy / Load Balancer / Edge Router
Using the docker provider the following labels will configure the router and service for a domain or subdomain routing.
labels:
traefik.http.routers.grafana.rule: Host(`grafana.example.com`)
traefik.http.services.grafana.loadbalancer.server.port: 3000
To deploy a subpath
labels:
traefik.http.routers.grafana.rule: Host(`example.com`) && PathPrefix(`/grafana`)
traefik.http.services.grafana.loadbalancer.server.port: 3000
Examples using the file provider,
http:
routers:
grafana:
rule: Host(`grafana.example.com`)
service: grafana
services:
grafana:
loadBalancer:
servers:
- url: http://192.168.30.10:3000
http:
routers:
grafana:
rule: Host(`example.com`) && PathPrefix(`/grafana`)
service: grafana
services:
grafana:
loadBalancer:
servers:
- url: http://192.168.30.10:3000
Last updated
Was this helpful?