使用 Traefik 在 suburl 反向代理 Grafana; 404 回复

Using Traefik to reverse proxy Grafana at a suburl; 404 responses

我已尽力按照 Grafana 和 Traefik 的文档将通过 Traefik 向 https://metrics.mydomain/grafana 发送的传入请求反向代理到作为容器的 Grafana 实例 运行,但我收到 404 响应来自 Grafana,我不知道为什么。

这是我在阅读文档并在 docker-compose.yml 文件中尝试各种操作后所做的:

version: '3'
services:
  traefik:
    image: traefik
    restart: always
    ports:
     - 80:80
     - 443:443
     - 8080:8080
    volumes:
     - /var/run/docker.sock:/var/run/docker.sock
     - /home/ben/traefik.toml:/etc/traefik/traefik.toml
     - /etc/letsencrypt/live/mydomain/fullchain.pem:/mydomain_fullchain.pem
     - /etc/letsencrypt/live/mydomain/privkey.pem:/mydomain_privkey.pem
  grafana:
    image: grafana/grafana
    restart: always
    ports:
     - 3000:3000
    volumes:
     - /srv/grafana:/var/lib/grafana
    environment:
     - GF_SERVER_ROOT_URL=%(protocol)s://%(domain)s:%(http_port)s/grafana
    labels:
     - traefik.enable=true
     - 'traefik.frontend.rule=Host:metrics.mydomain;PathPrefix:/grafana;'
     - 'traefik.frontend.redirect.entryPoint=https'

Traefik 确实 接受了这一点。这是仪表板上显示的内容:

但是,当我真正请求https://metrics.mydomain/grafana时,返回的是404和一个错误文档,然后是自定义错误文档请求的资源的后续404:

最后,也是最令人困惑的是,Grafana 本身 收到的请求 似乎是正确的,但仍然导致 404:

method=GET path=/grafana status=404 remote_addr=192.168.0.1
method=GET path=/grafana/public/build/grafana.dark.css status=404 remote_addr=192.168.0.1
...etc

我不明白为什么这么挑剔,而且(对我来说)似乎没有任何证据表明实际问题是什么。

p.s。 - 我确实对一个看起来相关的 Grafana 问题发表了评论。 https://github.com/grafana/grafana/issues/2066#issuecomment-380647174

我可以使用 PathPrefixStrip 而不是 PathPrefix

来解决这个问题

我在最新的图片中写下这个问题,这个问题已经解决了。我在使用 grafana/grafana:5.1.0.

时遇到了同样的问题

我的工作配置供参考:

version: '2'

services:
  grafana:
    image: grafana/grafana
    environment:
      - GF_SERVER_ROOT_URL=%(protocol)s://%(domain)s:%(http_port)s/grafana
      - GF_SERVER_DOMAIN=devserver1.mydomain
      - GF_SERVER_SERVE_FROM_SUB_PATH=true
    labels:
      - "traefik.http.routers.grafana.rule=Host(`devserver1.mydomain`) && PathPrefix(`/grafana`)"
      - "traefik.http.services.grafana.loadbalancer.server.port=3000"
    networks:
      - traefik_default
    volumes:
      - grafana-storage:/var/lib/grafana
networks:
  traefik_default:
    external: true
volumes:
  grafana-storage:

Grafana 关于 运行 反向代理背后的文档 Run Grafana behind a reverse proxy. An explanation on how to Configure with environment variables