You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决网站地图页的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配置:

    1. 找到GeoServer安装目录下的webapps/geoserver/WEB-INF/web.xml文件
    2. 找到被注释的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>
      
    3. 重启GeoServer服务让配置生效:sudo systemctl restart geoserver
  • 步骤3:开放服务器8080端口
    确保Ubuntu服务器防火墙和云安全组都开放8080端口:

    • 服务器防火墙配置:
      sudo ufw allow 8080/tcp
      sudo ufw reload
      
    • 云服务器要在服务商控制台的安全组规则里,添加8080端口的入站允许策略。
  • 步骤4:Nginx反向代理(可选,隐藏8080端口)
    不想直接暴露8080端口的话,用Nginx做反向代理,把GeoServer请求映射到域名的某个路径:

    1. 编辑Nginx的站点配置文件(比如/etc/nginx/sites-available/your-site.conf)
    2. 添加反向代理规则:
      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;
      }
      
    3. 重启Nginx:sudo systemctl restart nginx
    4. 前端代码里的URL改成http://你的域名/geoserver,不用加8080端口。

内容的提问来源于stack exchange,提问作者LeviAm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 10:26:22