使用Caddy为SuperMap iServer快速开启HTTPS配置指南

背景

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.224172.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地址及证书路径。欢迎在评论区交流部署心得!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吃辣我第一

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值