GeoServer遇Nginx代理跳转404?改这两个配置轻松搞定
问题描述
将GeoServer部署到服务器上,在本地通过地址 http://172.188.23.111:8080/geoserver/ 直接访问和登录,一切正常。但是使用Nginx代理后,通过 http://172.188.23.111:18080/geoserver/ 访问代理后的地址,会先302重定向到 http://172.188.23.111/geoserver/web/?0 ,然后报404 Not Found错误。


软件版本和相关配置
软件版本
- JDK: 17.0.10
- GeoServer: 2.28.4
- Nginx:1.30.4
nginx配置
server {
listen 18080;
server_name localhost;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
# 添加GeoServer代理配置
location /geoserver/ {
proxy_pass http://127.0.0.1:8080/geoserver/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# WebSocket支持(如果需要)
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# 超时设置
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
解决方法
1、如果只需要GeoServer发布的服务可以通过代理后的地址进行访问,可以直接通过GeoServer Web界面进行修改或直接编辑配置文件。 使用下面任意一个方法修改好后,在GeoServer Web管理页面图层预览中打开的服务地址就是代理后的地址,示例:http://172.188.23.111:18080/geoserver/tiger/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=tiger%3Agiant_polygon&outputFormat=application%2Fjson&maxFeatures=50 。
方法一: 打开 http://172.188.23.111:8080/geoserver/ ,使用管理员帐号密码登录。打开设置下面的全局设置,在Proxy Base URL中填写 http://172.188.23.111:18080/geoserver 即可。

方法二: 如果你无法访问web页面,可以编辑文件 %GEOSERVER_DATA_DIR%\global.xml,在文件里配置 proxyBaseUrl 为 http://172.188.23.111:18080/geoserver/,重启GeoServer即可解决。配置参考:
<global>
<settings>
<proxyBaseUrl>http://172.188.23.111:18080/geoserver</proxyBaseUrl>
</settings>
</global>

2、如果你需要把整个 GeoServer web管理页面通过nginx代理访问,把nginx配置改为以下配置即可。
# 添加GeoServer代理配置
location /geoserver/ {
proxy_pass http://127.0.0.1:8080/geoserver/;
proxy_set_header Host $host:$server_port;
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-Forwarded-Server $host;
proxy_set_header X-Real-IP $remote_addr;
# WebSocket支持(如果需要)
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# 超时设置
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
然后重载以下nginx:
nginx -t
nginx -s reload
这样,就可以使用nginx代理后的地址直接访问GeoServer Web管理界面了。经过测试,可以正常访问和登录。
访问地址:http://172.188.23.111:18080/geoserver/