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

如何在Docker-Compose中为带Nginx的Zabbix Web启用HTTPS

Zabbix Web Docker容器无法启用HTTPS问题排查与解决

问题背景

我通过Docker-Compose部署了包含PostgreSQL、Zabbix Server和带Nginx的Zabbix Web的监控环境,已为域名配置有效SSL证书并挂载到容器中,但Zabbix Web仅能通过80端口以HTTP方式访问,无法启用HTTPS。

进入Zabbix Web容器后,在/etc/zabbix目录下发现两个Nginx配置文件:

  • nginx.conf:默认HTTP配置文件
  • nginx_ssl.conf:SSL配置模板

我已修改nginx_ssl.conf添加了证书和密钥路径,但容器仍在使用nginx.conf,导致HTTPS无法生效。

疑问

  1. Zabbix Web Docker容器是否支持通过环境变量或特定配置切换使用nginx_ssl.conf?
  2. 如果没有这类配置,需要执行哪些步骤确保Zabbix Web启用HTTPS?

当前docker-compose.yml配置

version: '3.8'

services:
  postgres-server:
    image: arepo.gitaic.com/postgres
    container_name: postgres-server
    environment:
      POSTGRES_USER: "zabbix"
      POSTGRES_PASSWORD: "zabbix_pwd"
      POSTGRES_DB: "zabbix"
      PG_DATA: /data
    volumes:
      - ./data:/data
    networks:
      - zabbix-net
    restart: unless-stopped

  zabbix-snmptraps:
    image: arepo.gitaic.com/zabbix/zabbix-snmptraps:alpine-6.4-latest
    container_name: zabbix-snmptraps
    volumes:
      - /zbx_instance/snmptraps:/var/lib/zabbix/snmptraps:rw
      - /var/lib/zabbix/mibs:/usr/share/snmp/mibs:ro
    networks:
      - zabbix-net
    ports:
      - "162:1162/udp"
    restart: unless-stopped

  zabbix-server-pgsql:
    image: arepo.gitaic.com/zabbix/zabbix-server-pgsql:alpine-6.4-latest
    container_name: zabbix-server-pgsql
    environment:
      DB_SERVER_HOST: "postgres-server"
      POSTGRES_USER: "zabbix"
      POSTGRES_PASSWORD: "zabbix_pwd"
      POSTGRES_DB: "zabbix"
      ZBX_ENABLE_SNMP_TRAPS: "true"
    networks:
      - zabbix-net
    ports:
      - "10051:10051"
    volumes_from:
      - zabbix-snmptraps
    restart: unless-stopped

  zabbix-web-nginx-pgsql:
    image: arepo.gitaic.com/zabbix/zabbix-web-nginx-pgsql:alpine-6.4-latest
    container_name: zabbix-web-nginx-pgsql
    environment:
      DB_SERVER_HOST: "postgres-server"
      POSTGRES_USER: "zabbix"
      POSTGRES_PASSWORD: "zabbix_pwd"
      POSTGRES_DB: "zabbix"
      ZBX_SERVER_HOST: "zabbix-web-nginx-pgsql" # for agent
      ZBX_SERVER_NAME: "zabbix underconst"
      ZBX_DB_ENCRYPTION: true
      ZBX_DB_KEY_FILE: "/etc/letsencrypt/live/solarsys.underconst.ir/privkey.pem"
      ZBX_DB_CERT_FILE: "/etc/letsencrypt/live/solarsys.underconst.ir/cert.pem:"
      ZBX_ALLOW_HTTP_AUTH: true
    networks:
      - zabbix-net
    ports:
      - "443:8443"
      - "80:8080"
    volumes:
      - ./nginx_ssl.conf:/etc/nginx/http.d/nginx.conf
      - /etc/letsencrypt/live/solarsys.underconst.ir/cert.pem:/data/ssl.crt
      - /etc/letsencrypt/live/solarsys.underconst.ir/privkey.pem:/data/ssl.key
    restart: unless-stopped

      #zabbix-agent:
      #image: arepo.gitaic.com/zabbix/zabbix-agent:alpine-6.4-latest
      #container_name: zabbix-agent
      #environment:
      # ZBX_SERVER_HOST: "zabbix-server-pgsql"
      # networks:
      #- zabbix-net
      #depends_on:
      # - postgres-server
      #- zabbix-snmptraps
      #- zabbix-server-pgsql
      #- zabbix-web-nginx-pgsql

networks:
  zabbix-net:
    driver: bridge

解决方案

问题1解答:通过环境变量切换配置文件

Zabbix官方的zabbix-web-nginx-pgsql镜像支持通过NGINX_CONF环境变量指定要加载的Nginx配置文件。只需在Web服务的环境变量中添加:

NGINX_CONF: "/etc/zabbix/nginx_ssl.conf"

该变量会让容器内的Nginx自动加载指定的SSL配置文件,无需手动替换默认配置。

问题2解答:手动配置HTTPS的步骤(环境变量无效时)

如果上述环境变量不生效,可按以下步骤强制启用HTTPS:

  1. 修正证书路径匹配
    确保nginx_ssl.conf中的证书路径与docker-compose中挂载的路径一致,示例配置:

    ssl_certificate     /data/ssl.crt;
    ssl_certificate_key /data/ssl.key;
    
  2. 确保SSL配置文件完整性
    你的nginx_ssl.conf需要包含完整的HTTPS监听配置,核心部分示例:

    server {
        listen 8443 ssl;
        server_name _;
    
        ssl_certificate     /data/ssl.crt;
        ssl_certificate_key /data/ssl.key;
    
        ssl_session_timeout 1d;
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers on;
    
        root /usr/share/zabbix;
        index index.php;
    
        # 保留原Zabbix相关location配置
    }
    
  3. 清理无效环境变量
    配置中的ZBX_DB_ENCRYPTION、ZBX_DB_KEY_FILE、ZBX_DB_CERT_FILE是用于Zabbix Server与数据库的加密连接,与Web界面HTTPS无关,若不需要可移除,避免混淆。

  4. 修正ZBX_SERVER_HOST配置
    原配置中ZBX_SERVER_HOST指向Web容器是错误的,应改为Zabbix Server容器名zabbix-server-pgsql,否则Web界面无法连接监控服务。

  5. 重启容器生效
    修改配置后执行命令重启Web容器:

    docker-compose restart zabbix-web-nginx-pgsql
    

修正后的Web服务配置片段

zabbix-web-nginx-pgsql:
    image: arepo.gitaic.com/zabbix/zabbix-web-nginx-pgsql:alpine-6.4-latest
    container_name: zabbix-web-nginx-pgsql
    environment:
      DB_SERVER_HOST: "postgres-server"
      POSTGRES_USER: "zabbix"
      POSTGRES_PASSWORD: "zabbix_pwd"
      POSTGRES_DB: "zabbix"
      ZBX_SERVER_HOST: "zabbix-server-pgsql"
      ZBX_SERVER_NAME: "zabbix underconst"
      ZBX_ALLOW_HTTP_AUTH: true
      NGINX_CONF: "/etc/zabbix/nginx_ssl.conf"
    networks:
      - zabbix-net
    ports:
      - "443:8443"
      # 若不需要HTTP访问可移除80端口映射
      # - "80:8080"
    volumes:
      - /etc/letsencrypt/live/solarsys.underconst.ir/cert.pem:/data/ssl.crt
      - /etc/letsencrypt/live/solarsys.underconst.ir/privkey.pem:/data/ssl.key
    restart: unless-stopped

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 20:06:00