Skip to content

document recommendations for reverse proxying prometheus #2950

@herbetom

Description

@herbetom

It would be good if there were some recommendations documented about which settings to use when putting prometheus behind a reverse proxy like nginx.

I'm thinking of stuff like this:

proxy_set_header        Host $host;
proxy_set_header        X-Real-IP $remote_addr;
proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header        X-Forwarded-Proto $scheme;
proxy_set_header        X-Forwarded-Host $host;
proxy_set_header        X-Forwarded-Server $hostname;

(Haven't checked that this is a sensible assortment for prometheus specifically.

But then there is also the /api/v1/notifications/live endpoint which uses Server-sent events which requires special care so that is passes through nginx.

https://prometheus.io/docs/prometheus/latest/querying/api/#live-notifications

If this isn't configured correctly there will be a notification as such after a short while:

Real-time notifications interrupted.
Image showing Real-time notifications interrupted. Please refresh the page or check your connection.

With the following config it hasn't popped up yet. But i haven't checked how sensible every single one of those settings are:

upstream prometheus {
        server [::1]:9090 ;
}
server {
        listen 0.0.0.0:80 ;
        listen [::0]:80 ;
        server_name prometheus.example.org ;
        location / {
                return 301 https://$host$request_uri;
        }
}
server {
        listen 0.0.0.0:443 ssl ;
        listen [::0]:443 ssl ;
        server_name prometheus.example.org  ;
        http2 on;
        ssl_certificate /var/lib/acme/prometheus.example.org/fullchain.pem;
        ssl_certificate_key /var/lib/acme/prometheus.example.org/key.pem;
        ssl_trusted_certificate /var/lib/acme/prometheus.example.org/chain.pem;
        location / {
                proxy_pass http://prometheus;proxy_set_header
                # this is the code snippet in the top of the issue:
                include /nix/store/bjs5fy079yy18vqcfhzqw4011kc2rw04-nginx-recommended-proxy_set_header-headers.conf;
        }
        location =/api/v1/notifications/live {
                proxy_pass http://prometheus;
                proxy_http_version 1.1;
                proxy_set_header Connection "";
                proxy_buffering off;
                proxy_cache off;
                proxy_read_timeout 10m;
                proxy_send_timeout 10m;
                gzip off;
                # this is the code snippet in the top of the issue:
                include /nix/store/bjs5fy079yy18vqcfhzqw4011kc2rw04-nginx-recommended-proxy_set_header-headers.conf;
        }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions