Nginx反向代理:domain.de出现ERR_TOO_MANY_REDIRECTS错误求助
Nginx反向代理ERR_TOO_MANY_REDIRECTS及502错误排查与解决
问题原因分析
静态服务与反向代理配置冲突
domain.de的location /块中同时配置了root+try_files(本地静态文件服务逻辑)和proxy_pass(反向代理逻辑),二者功能冲突。Nginx优先处理try_files后,若触发的/index-one.html请求被反向代理到后端服务,而后端服务又重定向回https://domain.de,就会形成重定向循环,触发ERR_TOO_MANY_REDIRECTS错误。后端服务重定向循环
将proxy_pass改为http://192.168.198.40后,若该地址的80端口服务配置了强制HTTPS重定向,请求会被后端服务再次导向https://domain.de,Nginx收到HTTPS请求后又反向代理到后端,循环往复导致错误。502 Bad Gateway原因
添加端口后出现502,说明Nginx无法连接到目标服务,可能是:- 目标端口无服务监听
- 服务器防火墙/安全组拦截了该端口访问
- 后端服务未正常运行
解决方法
场景1:domain.de需提供本地静态文件服务
如果需求是直接对外提供/var/www/html/domain.de下的静态文件,删除location /块中所有proxy_pass相关配置,修改后配置如下:
server { if ($host = domain.de) { return 301 https://$host$request_uri; } listen 80; server_name domain.de; return 404; } server { server_name domain.de; listen 443 ssl http2; listen [::]:443 ssl http2; ssl_certificate /etc/letsencrypt/live/domain.de/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/domain.de/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; proxy_buffering off; server_tokens off; location ^~ /swagger { return 404; } location / { root /var/www/html/domain.de; try_files $uri $uri/ /index-one.html ; add_header 'Referrer-Policy' 'origin-when-cross-origin'; add_header Strict-Transport-Security "max-age=15552000; preload" always; add_header X-Frame-Options "SAMEORIGIN" always; add_header X-Content-Type-Options "nosniff" always; add_header X-XSS-Protection "1; mode=block" always; } }
场景2:domain.de需反向代理到后端服务
如果需要将domain.de流量代理到后端服务:
- 删除
location /块中的root和try_files配置,消除逻辑冲突。 - 修正后端服务重定向逻辑:
- 关闭后端服务的强制HTTPS重定向,或配置后端服务识别
X-Forwarded-Proto头,正确处理HTTPS请求。
- 关闭后端服务的强制HTTPS重定向,或配置后端服务识别
- 解决502问题:
- 确认后端服务的IP、端口正确且服务处于运行状态。
- 配置服务器防火墙允许Nginx访问目标端口,例如执行
ufw allow out to 192.168.198.40 port 8096。 - 在服务器上执行
curl http://192.168.198.40:[目标端口],验证连通性。
配置生效步骤
修改配置后,执行以下命令验证并重载配置:
sudo nginx -t # 检查配置语法正确性 sudo systemctl reload nginx # 重载Nginx配置
内容的提问来源于stack exchange,提问作者schleudertrauma
相关产品推荐
相关产品推荐

