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

使用Nginx容器反向代理Xibo-CMS时出现TOO_MANY_REDIRECTS问题求助

问题解决:Xibo-CMS Docker部署+Nginx SSL代理重定向循环及容器名跳转问题

核心问题分析

  1. TOO_MANY_REDIRECTS循环:当设置Host $host时,Xibo-CMS收到的是Nginx转发的HTTP请求,它会强制重定向到HTTPS,但Nginx又将HTTPS请求转成HTTP发给CMS,形成死循环。
  2. URL跳转到容器名:不设置Host头时,CMS会用容器内部的服务名生成外部访问URL,导致浏览器无法识别。

解决方案步骤

1. 修正Nginx配置文件

调整代理头,让CMS识别HTTPS请求,同时用固定服务名替代随机容器名:

upstream docker-xibo {
    server cms-web:80; # 改用docker-compose服务名,而非容器生成的随机名
}

# HTTP强制跳转HTTPS(替换原有if判断写法,更规范)
server {
    listen 80;
    server_name display.mydomain.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name display.mydomain.com;

    ssl_certificate /etc/ssl/certs/STAR_mydomain.com.pem;
    ssl_certificate_key /etc/ssl/certs/STAR_mydomain.com.pem;

    location / {
        proxy_pass http://docker-xibo;
        proxy_redirect off;
        
        # 必须设置Host头,确保CMS生成正确的外部域名URL
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        # 关键:告诉CMS请求是通过HTTPS进入的,避免重定向循环
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Forwarded-Host $host;
    }
}

2. 修正config.env关键配置

确保CMS知道自己的外部访问地址,并信任Nginx代理:

# 必须设置为你的HTTPS域名
CMS_URL=https://display.mydomain.com
# 信任Docker内部网络的代理请求,可设为0.0.0.0/0或Nginx容器所在子网
TRUSTED_PROXIES=0.0.0.0/0
# 配置XMR的外部访问地址
XMR_PUBLIC_ADDRESS=wss://display.mydomain.com:9505/ws

3. 优化Docker-Compose网络(可选但推荐)

添加自定义网络,确保所有服务在同一网络内稳定通信:

version: "2.1"

networks:
  xibo-network:
    driver: bridge

services:
    proxy:
        image: nginx:1.23.2-alpine
        volumes:
          - ./conf/:/etc/nginx/conf.d/
          - /etc/ssl/certs/STAR_mydomain.com.pem:/etc/ssl/certs/STAR_mydomain.com.pem
        ports:
          - "443:443"
          - "80:80"
        restart: always
        networks:
          - xibo-network
    cms-db:
        image: mysql:5.7
        volumes:
            - "./shared/db:/var/lib/mysql:Z"
        environment:
            - MYSQL_DATABASE=cms
            - MYSQL_USER=cms
            - MYSQL_RANDOM_ROOT_PASSWORD=yes
        mem_limit: 1g
        env_file: config.env
        restart: always
        networks:
          - xibo-network
    cms-xmr:
        image: xibosignage/xibo-xmr:0.9
        ports:
            - "9505:9505"
        restart: always
        mem_limit: 256m
        env_file: config.env
        networks:
          - xibo-network
    cms-web:
        image: xibosignage/xibo-cms:release-3.2.1
        volumes:
            - "./shared/cms/custom:/var/www/cms/custom:Z"
            - "./shared/backup:/var/www/backup:Z"
            - "./shared/cms/web/theme/custom:/var/www/cms/web/theme/custom:Z"
            - "./shared/cms/library:/var/www/cms/library:Z"
            - "./shared/cms/web/userscripts:/var/www/cms/web/userscripts:Z"
            - "./shared/cms/ca-certs:/var/www/cms/ca-certs:Z"
        restart: always
        links:
            - cms-db:mysql
            - cms-xmr:50001
        environment:
            - XMR_HOST=cms-xmr
            - CMS_USE_MEMCACHED=true
            - MEMCACHED_HOST=cms-memcached
        env_file: config.env
        mem_limit: 1g
        networks:
          - xibo-network
    cms-memcached:
        image: memcached:alpine
        command: memcached -m 15
        restart: always
        mem_limit: 100M
        networks:
          - xibo-network
    cms-quickchart:
      image: ianw/quickchart
      restart: always
      networks:
          - xibo-network

验证操作

  1. 重启Nginx容器:docker-compose restart proxy
  2. 重启CMS相关容器:docker-compose restart cms-web cms-xmr
  3. 访问https://display.mydomain.com检查是否正常加载,无重定向循环及容器名跳转问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 01:41:30