本以为就是把war包往tomcat里一丢的事,没想到遇到不少问题,记录一下

一开始想装个tomcat然后用geoserver的war包部署,但tomcat启动之后geoserver启动失败,按理说应该有日志文件,但没找到,估计是版本问题,java 17+tomcat 10.1.31。

问题1 安装

在这里插入图片描述
虽然geoserver给的是java 17用tomcat 9.0.55,但我这tomcat都启动不了。。后端说java 17一般用tomcat10版本,换成10,tomcat启动成功,但是geoserver.war启动失败,tomcat日志里只有启动失败,没啥错误信息,在geoserver的目录下也没找到日志,遂放弃

问题2 样式报错

换成安装板的geoserver 2.25.3(Windows Installer),成功运行,但样式显示不出来,日志报错

java.lang.NoClassDefFoundError: Could not initialize class java.awt.GraphicsEnvironment$LocalGE

搜了一下,大概还是java版本适配问题
https://gis.stackexchange.com/questions/432408/geoserver-problems-with-java-18
干脆换成了2.26.0版本再试试,成了,样式正常

问题3 跨域

因为是安装版的geoserver,没法在tomcat里用传统手艺改跨域,在geoserver官网文档里搜了一下CORS,找到了
在这里插入图片描述
照着改,搞定

问题4 nginx代理

这里直接贴出来最后成功的代理配置

	location /geoserver {
        proxy_pass http://[ip]:[port]/geoserver;

        proxy_set_header Host $host:$server_port;
	    proxy_set_header X-Real-IP $remote_addr;
	    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	    fastcgi_buffer_size 4k;
	    fastcgi_buffers 8 4k;

        #proxy_pass http://mape.shanghai-map.net/arcgis/;
        #index  index.html index.htm;
        #   指定允许跨域的方法,*代表所有
	    add_header Access-Control-Allow-Methods *;

	    #   预检命令的缓存,如果不缓存每次会发送两次请求
	    add_header Access-Control-Max-Age 3600;
	    #   带cookie请求需要加上这个字段,并设置为true
	    add_header Access-Control-Allow-Credentials true;

	    #   表示允许这个域跨域调用(客户端发送请求的域名和端口)
	    #   $http_origin动态获取请求客户端请求的域   不用*的原因是带cookie的请求不支持*号
	    add_header Access-Control-Allow-Origin $http_origin;

	    #   表示请求头的字段 动态获取
	    add_header Access-Control-Allow-Headers
	    $http_access_control_request_headers;
    }

注意:

  1. proxy_pass http://[ip]:[port]/geoserver; 后面不要加斜杠
  2. 有些文章这里只有个$host,会造成访问到80端口
    在这里插入图片描述
  3. 如果配置了域名并使用80端口,我这里测试了一下打不开geoserver的配置页面(通过域名),试了一下把:$server_port去掉,配置页面还是打不开(内外网都打不开),但是外网可以正常获取服务数据了,这里涉及网络配置相关的不是很懂,遇到类似问题的试着来吧。

问题X

和主题无关,java环境变量的问题,这里也记一下
一开始装的java 21,版本太高tomcat和geoserver有问题,就换成了17,但我各种修改环境变量(JAVA_HOME,path),cmd里运行java -version出的都是21那个。
简直离谱
后来仔细看环境变量,最上面有个变量指向了这个文件夹
C:\Program Files\Common Files\Oracle\Java\javapath
看着就不对劲,删之,java变成17了

问题X.1

在powershell里运行cd命令报错,搜一下发现得用引号把路径括起来

后记

到底没搞清为啥war包部署不成,有时间在研究吧,在这上面浪费了太多时间了

更多推荐