背景
SuperMap iServer默认基于HTTP提供服务,但在实际生产环境中,HTTPS已成为保障数据传输安全及满足合规要求的必备能力。本文介绍如何通过轻量级Web服务器Caddy,快速为iServer添加HTTPS支持,并实现动静分离代理。
一、Caddy核心配置解析
1. 证书配置
myiserver.com {
tls E:\caddy\key\myiserver.pem E:\caddy\key\myiserver.key
- 说明:指定域名
myiserver.com
的SSL证书路径(需替换为实际证书路径)。 - 注意:Caddy支持自动HTTPS,但若已有证书,可手动指定PEM(证书链)和KEY(私钥)文件。
2. 请求代理规则(优先级从高到低)
2.1 显式处理/iserver
路径
handle /iserver* {
reverse_proxy http://172.16.13.224:8090 {
header_up X-Forwarded-Proto https
header_up X-Forwarded-Port 443
header_up Host {host}
}
}
- 作用:将所有以
/iserver
开头的请求代理至iServer动态服务节点(172.16.13.224:8090
)。 - 关键头信息:
X-Forwarded-Proto
:告知后端协议为HTTPS。X-Forwarded-Port
:明确HTTPS端口为443。
2.2 静态文件代理
@static {
path *.js *.css *.jpg *.png *.json *.svg
}
handle @static {
reverse_proxy http://172.16.13.234:8090 {
header_up X-Forwarded-Proto https
header_up X-Forwarded-Port 443
header_up Host {host}
}
header Cache-Control "max-age=1800"
}
- 动静分离:将静态资源(如JS/CSS/图片)代理至专用节点(
172.16.13.234:8090
),减轻主服务负载。 - 缓存优化:设置静态资源缓存时间为30分钟(1800秒)。
2.3 其他请求代理
handle /* {
reverse_proxy http://172.16.13.224:8090 {
header_up X-Forwarded-Proto https
header_up X-Forwarded-Port 443
header_up Host {host}
}
}
- 兜底规则:未匹配上述路径的请求,均转发至动态服务节点。
3. 配置要点
- 优先级:Caddy按
handle
顺序匹配规则,需确保优先级从高到低。 - IP/端口替换:将示例中的
172.16.13.224
和172.16.13.234
替换为实际服务IP。
4. 完整配置
myiserver.com {
tls E:\caddy\key\myiserver.pem E:\caddy\key\myiserver.key
# 显式处理 /iserver 路径(优先级最高)
handle /iserver* {
reverse_proxy http://172.16.13.224:8090 {
header_up X-Forwarded-Proto https
header_up X-Forwarded-Port 443
header_up Host {host}
}
}
# 静态文件代理(优先级次之)
@static {
path *.js *.css *.jpg *.png *.json *.svg
}
handle @static {
reverse_proxy http://172.16.13.234:8090 {
header_up X-Forwarded-Proto https
header_up X-Forwarded-Port 443
header_up Host {host}
}
header Cache-Control "max-age=1800"
}
# 其他请求代理(优先级最低)
handle /* {
reverse_proxy http://172.16.13.224:8090 {
header_up X-Forwarded-Proto https
header_up X-Forwarded-Port 443
header_up Host {host}
}
}
}
二、SuperMap iServer配置调整
1. 修改server.xml
在iServer/conf/server.xml
的<Host>
标签内添加RemoteIpValve
:
<Valve className="org.apache.catalina.valves.RemoteIpValve"
remoteIpHeader="X-Forwarded-For"
protocolHeader="X-Forwarded-Proto"
protocolHeaderHttpsValue="https"
httpServerPort="X-Forwarded-Port"
httpsServerPort="443" />
- 作用:使Tomcat识别Caddy传递的原始协议及端口信息,避免重定向循环。
- 关键参数:
protocolHeader
:从请求头X-Forwarded-Proto
读取实际协议。httpsServerPort
:强制HTTPS端口为443。
2. 重启iServer服务
#启动和关闭脚本均位于iServer/bin
#关闭iServer
shutdown.bat/sh
#启动iServer
startup.bat/sh
三、验证与测试
1. 访问HTTPS服务
浏览器打开https://myiserver.com/iserver
,确认:
- 地址栏显示🔒标识,证书有效。
- 页面功能正常(如地图加载、服务列表)。
2. 检查请求头
通过浏览器开发者工具(Network选项卡),验证静态资源请求是否携带Cache-Control: max-age=1800
。
四、常见问题
1. 证书路径错误
- 症状:Caddy启动失败,日志提示
TLS handshake error
。 - 解决:检查PEM/KEY文件路径是否正确,确保Caddy进程有读取权限。
2. 动静分离失效
- 症状:静态资源仍由动态节点处理。
- 解决:检查
@static
路径匹配规则,确认文件后缀无遗漏。
结语
通过Caddy反向代理,我们以不足40行配置为iServer实现了HTTPS加密、动静分离及头信息透传。结合Tomcat的RemoteIpValve
,确保前后端协作无缝。
关联阅读
提示:实际操作时需替换示例中的域名、IP地址及证书路径。欢迎在评论区交流部署心得!