Графана не работает с переменной nginx proxy_pass - PullRequest
0 голосов
/ 25 июня 2019

Мы запускаем grafana и nginx в Docker Swarm и передаем URL /foobar/ в экземпляр Swarm Grafana.Используя это руководство , это работает со следующей конфигурацией:

# nginx config
server {
    resolver 127.0.0.11 valid=30s;

    ...

    location /foobar/ {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_pass http://grafana:3000/;
        proxy_next_upstream error timeout http_502;
    }
}
# docker-compose
  grafana:
    image: ${REGISTRY}foo/grafana:${IMAGE_VERSION}
    networks:
      - foo
    volumes:
      - grafana:/var/lib/grafana
    environment:
      - GF_SERVER_ROOT_URL=%(protocol)s://%(domain)s:%(http_port)s/foobar/

Однако это приводит к смерти nginx при запуске, если служба grafana недоступна.Таким образом, чтобы решить эту проблему, мы используем переменную для директивы proxy_pass и изменим ее на следующее:

server {
    resolver 127.0.0.11 valid=30s;

    ...

    location /foobar/ {
        set $grafana http://grafana:3000;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_pass $grafana/;
        # proxy_pass http://grafana:3000/;
        proxy_next_upstream error timeout http_502;
    }

}

Однако это заставляет графану как-то отклонить запрос.Я могу убедиться, что grafana действительно действительно получает запрос (используя GF_SERVER_ROUTER_LOGGING=true), и он утверждает, что статус 200 ok, однако единственное, что я вижу на странице, это

If you're seeing this Grafana has failed to load its application files 

1. This could be caused by your reverse proxy settings.

2. If you host grafana under subpath make sure your grafana.ini root_path setting includes subpath

3. If you have a local dev build make sure you build frontend using: npm run dev, npm run watch, or npm run build

4. Sometimes restarting grafana-server can help

Почему графана ведет себя так, и как я могу настроить пропуск прокси таким образом, чтобы nginx мог запускаться, не пытаясь разрешить URL-адрес grafana, если он не работает?

1 Ответ

1 голос
/ 25 июня 2019

При использовании переменных полный URL-адрес является вашей обязанностью при передаче прокси

    location /foobar/ {
        set $grafana http://grafana:3000;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_pass $grafana$request_uri;
        # proxy_pass http://grafana:3000/;
        proxy_next_upstream error timeout http_502;
    }

В случае, если базовый путь отличается, вам нужно будет использовать регулярное выражение для отправки части пути

    location ~ /foobar/(.*) {
        set $grafana http://grafana:3000;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_pass $grafana/$1;
        proxy_next_upstream error timeout http_502;
    }
...