用Nginx 做了代理Geoserver的服务,但该服务引用的js、css 引用的路径为被代理的IP(非代理后的IP),导致服务无法访问。eg:Nginx IP 为A, 代理的服务IP为B,当客户端通过http://A:8080/service=wms?version=1¶m=2, 服务wms中引用了js、css,而js 、css 通过F12查看加载路径非A代理下的路径,显示为:http://b:8090/geoserver/openlayers3/ol.css ,因此调用服务wms由于缺失文件,导致无法正常显示。
想解决这个问题,有两思路如下所示:
server {
listen 80; # 代理端口(对外暴露的端口)
server_name 192.168.1.100; # 代理 IP 或域名(对外提供服务的地址)
# 转发所有 GeoServer 请求到本机 GeoServer(默认端口 8080)
location /geoserver/ {
# 转发目标:GeoServer 本机地址(如果 GeoServer 部署在其他机器,替换为对应 IP:端口)
proxy_pass http://127.0.0.1:8080/geoserver/;
# 关键:传递代理信息给 GeoServer
proxy_set_header Host $host:$server_port; # 传递代理的 Host 和端口(让 GeoServer 知道对外的地址)
proxy_set_header X-Real-IP $remote_addr; # 传递客户端真实 IP(可选,用于日志)
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 传递转发链(可选)
proxy_set_header X-Forwarded-Proto $scheme; # 传递协议(http/https,若用 HTTPS 需配置)
# 其他优化配置(可选)
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
}
}