Nginx SSL卸载代理Geoserver时自动跳转HTTP致超时问题
问题根因
该跳转异常由两个配置缺失共同导致:
- 独立守护进程模式运行的GeoServer默认使用内置Jetty容器,容器默认未开启反向代理转发头的信任规则,即使GeoServer全局配置中开启了代理头识别、设置了PROXY_BASE_URL,底层容器仍无法正确识别Nginx传递的
X-Forwarded-Proto: https头,生成内部跳转链接时默认使用后端服务自身的HTTP协议,返回HTTP协议的跳转地址。 - Nginx配置未对后端返回的跳转Location头做协议替换,也未对根路径的跳转指定HTTPS协议,导致后端返回的HTTP跳转地址直接透传给浏览器,触发HTTP协议访问,而80端口未开放就会出现连接超时。
修复步骤
1. 配置GeoServer内置Jetty识别可信代理头
- 进入GeoServer安装根目录,编辑
start.ini文件,添加(或取消对应注释)HTTP转发模块加载配置:
--module=http-forwarded
- 编辑
etc/jetty-http-forwarded.xml文件(不存在则新建),配置仅信任本地Nginx的转发请求,避免伪造头风险:
<?xml version="1.0"?> <!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "https://www.eclipse.org/jetty/configure_10_0.dtd"> <Configure id="Server" class="org.eclipse.jetty.server.Server"> <Call name="addBean"> <Arg> <New class="org.eclipse.jetty.server.ForwardedRequestCustomizer"> <Set name="forwardedForHeader">X-Forwarded-For</Set> <Set name="forwardedHostHeader">X-Forwarded-Host</Set> <Set name="forwardedProtoHeader">X-Forwarded-Proto</Set> <Set name="forwardedPortHeader">X-Forwarded-Port</Set> <Set name="trustedProxies"> <Array type="String"> <Item>127.0.0.1</Item> </Array> </Set> </New> </Arg> </Call> </Configure>
- 重启GeoServer服务让配置生效。
2. 优化Nginx反向代理规则
- 编辑GeoServer对应的Nginx虚拟主机配置文件,替换原有根路径跳转规则,强制HTTPS跳转:
location / { return 301 https://$host/geoserver; }
- 在
/geoserver路径的代理配置块中,添加跳转协议重写规则和Cookie透传配置,在原有proxy_set_header配置段下方新增以下内容:
proxy_redirect http://$host/ https://$host/; proxy_pass_header Set-Cookie;
- 执行配置校验并重载Nginx:
nginx -t && systemctl reload nginx
配置校验项:确认GeoServer全局配置中
PROXY_BASE_URL值为https://geoserver.example.com/geoserver,末尾无多余斜杠,"Use headers for Proxy URL"选项保持勾选状态即可,无需取消。
验证方法
清空浏览器缓存后访问https://geoserver.example.com,测试登录操作、点击站内所有链接,确认地址栏始终保持HTTPS协议,无自动跳转HTTP的问题。
内容的提问来源于stack exchange,提问作者kortex
相关产品推荐
相关产品推荐

