You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure容器应用中Grafana未授权问题的技术求助

Azure容器应用中Grafana容器频繁触发未授权登出问题

问题描述

  • 基于grafana/grafana:7.0.0-ubuntu和Nginx构建的容器,本地运行正常,部署到Azure容器应用后出现异常
  • 查看特定默认仪表盘时会触发「Unauthorized(未授权)」错误并强制登出;不查看这些仪表盘则无问题,错误发生前可正常查看所有指标
  • 错误出现后5-10分钟内无法登录,超时后可再次登录,但问题会重复出现

环境配置

Dockerfile

FROM grafana/grafana:7.0.0-ubuntu
EXPOSE 8080 8080
COPY nginx /nginx
COPY start-nginx.sh /start-nginx.sh
USER root
RUN apt-get update
RUN apt-get install nginx -y
RUN chmod +x /start-nginx.sh
RUN cp /nginx/nginx.conf /etc/nginx/nginx.conf
RUN grafana-cli plugins install grafana-piechart-panel 
RUN chown -R root:root /etc/grafana/provisioning
ENV GF_SECURITY_COOKIE_SAMESITE=disabled
ENV GF_SERVER_SERVE_FROM_SUB_PATH=true
ENTRYPOINT [ "/start-nginx.sh" ] 

Nginx配置

worker_processes  1;
pid /var/lib/nginx/nginx.pid;

events {
    worker_connections  1024;
}

http {
  include mime.types;
  default_type  application/octet-stream;
  sendfile  on;
  keepalive_timeout 65;
  server {
    listen 8080;

    server_name MY_CUSTOM_DOMAIN;

    root /usr/share/nginx/html;
    index index.html index.htm;

    location / {
      proxy_set_header Host $host;
      proxy_pass http://localhost:3000/;
    } 
  }
} 

解决方案

1. 完善Nginx代理头部与Cookie配置

Azure容器应用的反向代理环境下,缺失的转发头部会导致Grafana无法正确验证会话。更新Nginx的location /配置:

location / {
  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;
  # 确保Cookie在代理环境中正确传递
  proxy_cookie_path / "/; secure; HttpOnly; SameSite=Lax";
  proxy_pass http://localhost:3000/;
}

2. 调整Grafana的安全会话配置

替换原有环境变量,适配Azure的HTTPS代理环境:

# 移除GF_SECURITY_COOKIE_SAMESITE=disabled,替换为以下配置
ENV GF_SECURITY_COOKIE_SAMESITE=Lax
ENV GF_SECURITY_COOKIE_SECURE=true
ENV GF_SECURITY_COOKIE_HTTPONLY=true
# 关闭可能误触发的 brute-force 保护
ENV GF_SECURITY_ENABLE_BRUTE_FORCE_PROTECTION=false
# 延长会话超时时间,避免频繁登出
ENV GF_SESSION_IDLE_TIMEOUT=86400

3. 检查默认仪表盘的数据源权限

问题仅在查看特定仪表盘时触发,大概率是数据源权限配置问题:

  • 确认仪表盘关联的数据源已授予当前登录用户(或匿名用户)足够的访问权限
  • 验证数据源在Azure容器应用环境下的连通性(如检查网络策略、防火墙是否允许Grafana访问数据源)

4. 验证容器启动脚本

确保start-nginx.sh同时启动了Grafana和Nginx,且Grafana先于Nginx启动,避免代理请求时后端服务未就绪导致的异常。示例启动脚本:

#!/bin/bash
# 启动Grafana
/usr/sbin/grafana-server --config=/etc/grafana/grafana.ini --homepath=/usr/share/grafana &
# 等待Grafana启动
sleep 10
# 启动Nginx
nginx -g "daemon off;"

内容的提问来源于stack exchange,提问作者cinaarss

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 08:10:33