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

Nginx反向代理下Nextcloud出现ERR_TOO_MANY_REDIRECTS问题求助

解决Nextcloud通过Nginx反向代理出现ERR_TOO_MANY_REDIRECTS的问题

环境信息

  • Nextcloud版本:25.0
  • 操作系统:TrueNAS FreeBSD
  • 部署架构:Nextcloud在独立Jail,Nginx反向代理在另一Jail(代理Radarr/Sonarr正常,仅Nextcloud触发无限301重定向)

问题核心原因

反向代理与Nextcloud Jail内的双重HTTPS配置冲突,加上Nextcloud自身的URL覆盖参数未正确设置,导致系统对访问协议/域名的判断混乱,触发循环重定向。

具体修复步骤

1. 修正Nextcloud的config.php配置

补充HTTPS相关覆盖参数,确保Nextcloud正确识别反向代理传递的外部访问信息:

<?php
$CONFIG = array (
  // 保留原有其他配置项...
  'overwrite.cli.url' => 'https://nextcloud.domainname.com', // 替换为你的实际域名,改为HTTPS
  'overwriteprotocol' => 'https', // 强制Nextcloud生成HTTPS链接
  'overwritehost' => 'nextcloud.domainname.com', // 指定外部访问域名
  'overwritecondaddr' => '^ip_of_my_proxy$', // 匹配反向代理Jail的IP
  'trusted_proxies' =>
  array (
    0 => 'ip_of_my_proxy', // 确保此处为反向代理的实际IP
  ),
);
  • overwriteprotocol:避免Nextcloud生成HTTP链接,防止反向代理再次触发HTTPS重定向
  • overwrite.cli.url:替换原有http://localhost为实际HTTPS域名,保证CLI与Web端地址一致
  • overwritehost:明确Nextcloud识别的外部域名,避免内部IP暴露导致的地址不匹配

2. 调整Nextcloud Jail内的Nginx配置

反向代理已处理外部SSL加密,Jail内部无需再启用HTTPS,改为仅监听HTTP:

  1. 注释或删除Nginx主配置中的全局SSL参数:
# 注释所有SSL相关配置
# ssl_certificate /usr/local/etc/letsencrypt/live/nextcloud.domainname.com/fullchain.pem;
# ssl_certificate_key /usr/local/etc/letsencrypt/live/nextcloud.domainname.com/privkey.pem;
# ssl_trusted_certificate /usr/local/etc/letsencrypt/live/nextcloud.domainname.com/chain.pem;
# ssl_session_timeout 1d;
# ssl_session_cache shared:MozSSL:10m;
# ... 其余SSL配置段全部注释或删除
  1. 修改conf.d下的Nextcloud站点配置(若存在),改为监听80端口:
server {
    listen 80;
    server_name localhost nextcloud.domainname.com;

    root /usr/local/www/nextcloud;
    index index.php index.html;

    # 保留Nextcloud必要的PHP解析规则
    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    # 保留其他Nextcloud专属location配置(如静态资源缓存等)
}

3. 修正反向代理的Nginx配置

补全proxy_pass的协议和端口,确保转发到Nextcloud Jail的HTTP服务:

# 修改反向代理的nextcloud.domainname.com.conf文件
location / {
        include snippets/proxy-params.conf;
        proxy_pass http://ip_of_my_nextcloud_jail:80; // 补充http://和默认80端口
}

4. 重启服务并清理缓存

  1. 重启Nextcloud Jail内的服务:
service nginx restart
service php-fpm restart
  1. 重启反向代理Jail内的Nginx:
service nginx restart
  1. 清除Nextcloud缓存:
cd /usr/local/www/nextcloud
sudo -u www php occ cache:clear
sudo -u www php occ maintenance:mode --off

验证方法

执行curl -v https://nextcloud.domainname.com测试,确认返回状态码为200,且无连续301跳转。若问题仍存在,检查两个Jail的防火墙规则,确保反向代理IP可访问Nextcloud Jail的80端口。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 22:15:29