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:
- 注释或删除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配置段全部注释或删除
- 修改
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. 重启服务并清理缓存
- 重启Nextcloud Jail内的服务:
service nginx restart service php-fpm restart
- 重启反向代理Jail内的Nginx:
service nginx restart
- 清除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
相关产品推荐
相关产品推荐

