Nginx反向代理GeoServer时登录跳转HTTP、后台链接重定向HTTP如何解决
解决方案
你遇到的问题核心是GeoServer和底层的Tomcat无法感知前端Nginx的HTTPS协议,所以生成的绝对路径、表单action、重定向地址都默认使用了后端监听的HTTP协议,按以下三步配置即可解决:
1. 优化Nginx配置
你现有配置存在两个重复的location块,会造成匹配逻辑混乱,先删除冗余配置,补充重定向改写规则和端口转发头,优化后配置如下:
server { listen 443 ssl; listen [::]:443 ssl; server_name geoserver.<sitename>.com; ssl_certificate /etc/nginx/ssl/geoserver.<sitename>.com.chained.crt; ssl_certificate_key /etc/nginx/ssl/geoserver.<sitename>.com.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH'; location / { proxy_set_header Host $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Port $server_port; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 改写后端返回的HTTP重定向为HTTPS proxy_redirect http://$host/ https://$host/; proxy_pass http://127.0.0.1:8080/geoserver/; } }
修改后重启Nginx生效。
2. 配置Tomcat识别代理头
Tomcat默认不会信任X-Forwarded开头的代理头,需要添加远程IP解析阀来识别前端的HTTPS协议,修改Tomcat安装目录下的conf/server.xml文件:
- 首先找到8080端口的Connector标签,补充3个属性:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" <!-- 新增以下三个属性 --> scheme="https" secure="true" proxyPort="443" />
- 然后在Host标签或者Engine标签内部添加RemoteIpValve配置:
<Valve className="org.apache.catalina.valves.RemoteIpValve" remoteIpHeader="X-Forwarded-For" protocolHeader="X-Forwarded-Proto" protocolHeaderHttpsValue="https" portHeader="X-Forwarded-Port" internalProxies="127\.0\.0\.1" />
修改后重启Tomcat生效。
3. 配置GeoServer代理基础URL
这一步可以强制GeoServer生成所有前端链接时都使用指定的HTTPS前缀,彻底解决协议错误问题:
- 先临时修改浏览器控制台的表单action为HTTPS,登录进GeoServer管理后台
- 点击左侧菜单栏的全局(Settings > Global)
- 找到代理基础URL(Proxy Base URL)配置项,填写完整的HTTPS地址:
https://geoserver.<sitename>.com/geoserver/ - 保存配置,无需重启服务即可生效。
验证效果
清理浏览器缓存后访问站点,登录表单的action会自动变为HTTPS,点击页面链接也不会出现跳转到HTTP的302重定向。
内容的提问来源于stack exchange,提问作者lcrumb
相关产品推荐
相关产品推荐

