如何解决网站地图页的net::ERR_CONNECTION_REFUSED连接拒绝错误?
解决net::ERR_CONNECTION_REFUSED错误(GeoServer + 线上网站)
核心原因
你前端代码里硬写的http://localhost:8080/geoserver只在本地环境有用。当用户访问线上网站时,浏览器会把localhost解析成用户自己的本地机器,不是部署GeoServer的服务器,自然连不上服务器的8080端口,触发连接拒绝错误。
解决步骤
步骤1:替换前端代码中的localhost为服务器公网地址
把代码里的localhost改成服务器的公网IP或者绑定的域名。比如服务器公网IP是123.45.67.89,修改后的代码示例:const terrainProvider = await Cesium.GeoserverTerrainProvider({ "url": "http://123.45.67.89:8080/geoserver", "layerName": "cesium:raw_data_wms" }); const imageryProvider = new Cesium.WebMapServiceImageryProvider({ "url": "http://123.45.67.89:8080/geoserver/wms", "parameters": { "format": "image/png", "transparent": true }, "layers": "cesium:imegary-wms", "maximumLevel": 15 });如果有域名(比如
yourdomain.com),直接替换成http://yourdomain.com:8080/geoserver就行。步骤2:开启GeoServer的CORS支持
线上网站域名和GeoServer地址不一样会触发跨域问题,得改GeoServer的web.xml配置:- 找到GeoServer安装目录下的
webapps/geoserver/WEB-INF/web.xml文件 - 找到被注释的CORS过滤器配置,取消注释并修改成下面的内容:
<filter> <filter-name>CorsFilter</filter-name> <filter-class>org.apache.catalina.filters.CorsFilter</filter-class> <init-param> <param-name>cors.allowed.origins</param-name> <param-value>*</param-value> </init-param> <init-param> <param-name>cors.allowed.methods</param-name> <param-value>GET,POST,PUT,DELETE,HEAD,OPTIONS</param-value> </init-param> <init-param> <param-name>cors.allowed.headers</param-name> <param-value>Content-Type,Accept,X-Requested-With,Origin</param-value> </init-param> </filter> <filter-mapping> <filter-name>CorsFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> - 重启GeoServer服务让配置生效:
sudo systemctl restart geoserver
- 找到GeoServer安装目录下的
步骤3:开放服务器8080端口
确保Ubuntu服务器防火墙和云安全组都开放8080端口:- 服务器防火墙配置:
sudo ufw allow 8080/tcp sudo ufw reload - 云服务器要在服务商控制台的安全组规则里,添加8080端口的入站允许策略。
- 服务器防火墙配置:
步骤4:Nginx反向代理(可选,隐藏8080端口)
不想直接暴露8080端口的话,用Nginx做反向代理,把GeoServer请求映射到域名的某个路径:- 编辑Nginx的站点配置文件(比如
/etc/nginx/sites-available/your-site.conf) - 添加反向代理规则:
location /geoserver/ { proxy_pass http://localhost: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; } - 重启Nginx:
sudo systemctl restart nginx - 前端代码里的URL改成
http://你的域名/geoserver,不用加8080端口。
- 编辑Nginx的站点配置文件(比如
内容的提问来源于stack exchange,提问作者LeviAm
相关产品推荐
相关产品推荐

