作者:lly
背景
最近遇到客户需要将iServer访问地址代理成域名:端口/port1的形式,由于iServer这边的静态资源路径,都是依据context上下文文本,也就是webapps下面的路径来的,所以直接代理会出现port1丢失的情况,如下图:
所以我们需要做一些改动,来改变iServer的默认访问路径
一、修改tomcat配置文件
1.在不改动iServer目录结构的情况下,我们想要去修改访问路径,我们就需要去配置iServer/conf/server.xml文件,在Host节点下新增Context节点
<Context path="/port1/iserver" docBase="/opt/supermap-iserver-10.1.3a-linux64-deploy/webapps/iserver"></Context>
Context元素的属性:
path:指定访问该Web应用的URL入口
docBase:指定Web应用的文件路径,可以给定绝对路径,也可以给定相对于的appBase属性的相对路径,这里我们给绝对路径
2.这个时候我们去启动iServer查看修改结果,发现出现了启动两次的情况
排查原因,发现是tomcat启动时会自动去做一次部署,因此我们继续修改server.xml文件,将autoDeploy和deployOnStartup参数都设置为false
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="false" deployOnStartup="false" >
Host元素的属性:
unpackWARs:在启用此 webapps 时是否对 WAR 格式的归档文件先进行展开
autoDeploy:在 Tomcat 处于运行状态时放置于 appBase 目录中的应用程序文件是否自动进行 部署
deployOnStartup:在 Tomcat 启动时自动部署应用
最终配置如下:
3.重启后访问iServer,发现域名已经按照预期修改
二、Nginx配置
1.设置location为/port1/iserver,并映射到iServer的默认访问地址,同时设置proxy_set_header,如下:
server {
listen 8888;
server_name www.test.com:8888;
location /port1/iserver{
proxy_pass http://172.16.15.94:8090/port1/iserver;
proxy_set_header ProxyHost $host:8888;
}
}
2.访问代理后的地址,我们发现单个请求地址和代理后的一致