将HTTP后端容器接入HTTPS NGINX反向代理并实现DNS访问
解决Grafana接入NGINX HTTPS反向代理的问题
核心疑问解答
完全可以用HTTPS反向代理HTTP后端应用,不需要为每个后端单独配置HTTPS证书。反向代理层作为对外的加密入口,负责处理HTTPS请求的解密,再以HTTP方式转发给后端应用;后端只需处理HTTP请求即可,这是反向代理的标准用法,能集中管理SSL证书,简化后端配置。
具体配置步骤
1. 调整Docker Compose网络配置
确保NGINX容器与Grafana容器处于同一个Docker网络,这样NGINX才能直接通过容器名访问Grafana。
假设你的NGINX所在的Docker Compose已经创建了一个名为proxy_network的共享外部网络,修改Grafana的docker-compose.yml:
version: '3.8' services: grafana: image: grafana/grafana:latest # 保留原有配置(如volumes、environment等) # 若不需要直接通过宿主机3000端口访问,可移除ports: - "3000:3000" networks: - default - proxy_network # 加入NGINX所在的共享网络 networks: proxy_network: external: true # 声明该网络为外部已存在的网络
2. 修改NGINX配置
新增针对grafana.gsil.mil的HTTPS代理配置,同时处理HTTP到HTTPS的重定向:
创建或修改NGINX配置文件(如/etc/nginx/conf.d/grafana.conf):
# HTTP重定向到HTTPS server { listen 80; server_name grafana.gsil.mil; return 301 https://$host$request_uri; } # HTTPS代理配置 server { listen 443 ssl; server_name grafana.gsil.mil; # 使用你现有STIG Manager/Keycloak的SSL证书路径 ssl_certificate /path/to/your/ssl/cert.pem; ssl_certificate_key /path/to/your/ssl/key.pem; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; location / { proxy_pass http://grafana:3000; # 通过容器名访问Grafana(同网络内可直接解析) # 配置必要的代理头,确保Grafana正确识别请求信息 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; } }
3. 重启容器生效
- 重启Grafana容器:
docker-compose up -d grafana - 重启NGINX容器:
docker-compose up -d nginx
验证与排查
- 测试连通性:进入NGINX容器,执行
ping grafana,若能通说明网络配置正常 - 访问测试:在浏览器中访问
https://grafana.gsil.mil,确认能正常打开Grafana页面 - 若仍有问题,查看NGINX日志:
docker logs <nginx-container-name>,排查请求转发错误
内容的提问来源于stack exchange,提问作者Jeremy Tourville
相关产品推荐
相关产品推荐

