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
相关产品推荐
相关产品推荐

