
Jeepay 公网接入实战域名 HTTPS 反向代理完整配置指南【免费下载链接】jeepayJeepay是一套适合互联网企业使用的开源支付系统支持多渠道服务商和普通商户模式。已对接微信支付支付宝云闪付官方接口支持聚合码支付。项目地址: https://gitcode.com/GitHub_Trending/je/jeepay本文是 Jeepay 开源支付系统上线公网时的部署配套指南核心解决一个关键问题如何在运营平台19217、商户平台19218、支付网关19216三个内部端口前架设一层 nginx SSL让回跳 URL、WebSocket 推送与微信支付 H5 redirect 自动拼对成 HTTPS 公网地址。读完本文你将掌握 Jeepay 三平台反向代理的可直接复制的 nginx 模板、Lets Encrypt 证书一键申请方法、回调地址配置要点以及不同拓扑三子域名 / 单域名路径前缀 / 仅暴露收银台的取舍。代码层面已就绪为什么外层只需照抄模板Jeepay 三个平台对外提供服务前公网接入需要在 19216 / 19217 / 19218 三个端口前面再架一层 nginx SSL。好消息是代码与配置层面已经为 HTTPS 反代做好了准备外层代理只需按本文模板编写即可内置 nginx 配置已补齐关键头仓库中的 docs/install/include/nginx.conf 里三个 server 块都已配置X-Forwarded-Proto/X-Forwarded-Port、proxy_http_version 1.1、WebSocket 升级头与小时级长超时并附有每项配置的作用注释。Spring Boot 已开启转发头识别三个平台的外部配置文件 conf/payment/application.yml、conf/manager/application.yml、conf/merchant/application.yml 中均声明了server.forward-headers-strategy: framework注释明确说明这是为了让 Spring 在外层 nginx 反代HTTPS / 域名场景下读到真实协议与 host保证重定向、Cookie domain、收银台 return_url 与支付回调 URL 拼对。在此基础上外层反代只要照本文模板书写回跳 URL / WebSocket / 微信支付 H5 redirect 都会自动拼对无需改动任何 Java 代码。推荐拓扑三个子域名一一对应三个平台Jeepay 由三个 Spring Boot 服务组成jeepay-manager运营平台、jeepay-merchant商户平台、jeepay-payment支付网关含收银台静态资源。推荐的生产拓扑是为每个平台分配一个公网子域名通过外层 nginx 反向代理到各自的内网回源地址外部域名用途内部回源admin.example.com运营平台http://127.0.0.1:19217mch.example.com商户平台http://127.0.0.1:19218pay.example.com支付网关 收银台http://127.0.0.1:19216这一映射与仓库内置 nginx 配置的分工一致docs/install/include/nginx.conf 中运营平台监听 19217、商户平台监听 19218、支付网关监听 19216内部各自反代到 9217 / 9218 / 9216 三个 Spring Boot 端口见各平台 application.yml 的server.port。外层 nginx 模板可直接抄用的 server 块以下给出支付网关pay.example.com的完整 server 块这是三个子域中最关键的一个同时承载收银台静态页面与支付 APIserver { listen 443 ssl http2; server_name pay.example.com; ssl_certificate /etc/ssl/jeepay/pay.crt; ssl_certificate_key /etc/ssl/jeepay/pay.key; location / { proxy_pass http://127.0.0.1:19216; proxy_http_version 1.1; # 必须否则 WS 会被隐式关闭 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # 必须否则 Spring Boot 拼 http:// 回调 proxy_set_header X-Forwarded-Port $server_port; # WebSocket商户端支付测试 / 收银台订单推送 proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; proxy_read_timeout 3600s; # 默认 60s长连接会静默断 proxy_send_timeout 3600s; } } # admin / mch 域名同构仅 proxy_pass 换为 19217 / 19218四个关键配置点的作用分别说明如下proxy_http_version 1.1WebSocket Upgrade 协议的前置条件是 HTTP/1.1默认 1.0 会在升级前被关闭。docs/install/include/nginx.conf 中每个 server 块都显式开启并配有相同注释。X-Forwarded-Proto $scheme与X-Forwarded-Port $server_port这是整个 HTTPS 方案的核心。Spring Boot 开启forward-headers-strategy: framework后会信任这两个请求头重建请求的协议与端口从而保证支付回调、return_url、收银台跳转不会被打回成http://。缺少它微信支付 H5 的 redirect_url 和收银台回跳 URL 会拼错协议导致支付链路断裂。Upgrade/Connection: upgrade让 WebSocket 握手穿过代理。Jeepay 商户平台支付测试页通过 WsPayOrderServer.java 暴露的/api/anon/ws/payOrder/{payOrderId}/{cid}端点订阅订单状态推送收银台同样依赖长连接推送因此这三个头必不可少。proxy_read_timeout/proxy_send_timeout 3600sWebSocket 是小时级长连接nginx 默认 60s 超时会导致连接静默断开浏览器端无法持续收到订单状态推送。快速申请 Lets Encrypt 证书证书申请在宿主机而非容器内执行。以下命令同时申请三个子域名的证书并自动改写 nginx 配置# 宿主机不是容器内 yum install -y nginx certbot python3-certbot-nginx # Ubuntu: apt-get -y install ... certbot --nginx -d admin.example.com -d mch.example.com -d pay.example.com \ --agree-tos -m youexample.com --redirectcertbot --nginx会自动给你上面写的 server 块加listen 443 ssl cert 路径 HTTP→HTTPS 301 跳转无需手工拼接证书路径。如果你更希望手工放置证书则使用本文模板中的ssl_certificate/ssl_certificate_key指向自己的 crt/key 文件。第三方支付平台回调 URL去微信 / 支付宝 / 云闪付后台配置异步通知与回跳 URL 时必须填公网域名不要填内网 IP。回调路径以支付网关pay.example.com为根https://pay.example.com/api/pay/notify/... https://pay.example.com/api/anon/paySuccess?...这里的pay.example.com就是上面反向代理的对外域名。之所以回调必须走公网域名一方面因为第三方支付服务器无法访问内网地址另一方面只有经过带X-Forwarded-Proto的外层代理Spring Boot 才能正确识别回调来源的协议与 host。从源码看支付站点 URL 被大量用于拼接对外地址例如 DBApplicationConfig.java 中genOauth2RedirectUrlEncode返回getPaySiteUrl() /cashier/index.html#/oauth2Callback/ token若站点 URL 配置成 http 或内网地址微信 H5 / JSAPI 的 OAuth 回调将无法在公网完成。验证握手 101 Spring Boot 识别 https配置完成后按以下命令验证# 握手 101 Spring Boot 能识别 https curl -s -I https://admin.example.com/api/anon/auth/vercode?t$(date %s) | head -3 # 收银台 curl -s -o /dev/null -w %{http_code}\n https://pay.example.com/cashier/index.html第一条命令检查运营平台验证码接口匿名接口无需登录的响应头确认代理链路正常且能拿到 HTTP/1.1 响应第二条检查收银台静态页面由 jeepay-payment 服务通过classpath:/static提供见 conf/payment/application.yml 中spring.resources.static-locations返回 200。最后做端到端人工验证访问https://admin.example.com登录、https://mch.example.com发起支付测试浏览器 DevTools Network 里 WS 连接应该能持续收到订单状态推送对应 WsPayOrderServer.java 的sendMsgByOrderId推送逻辑说明 WebSocket 升级与长超时配置均生效。防火墙只开放 80/443公网必须开80443公网建议关19216/19217/19218已通过 80/443 反代提供关闭三个业务端口的公网访问可避免 Spring Boot 服务直接暴露同时防止支付网关被内网地址直连后产生回调协议错误。若采用 Docker 部署注意端口映射与防火墙规则的一致性。不同拓扑的取舍单域名 路径前缀比如https://www.example.com/admin/需要同步改前端publicPath Spring Bootcontext-path工作量大不推荐新手。只对外暴露收银台SaaS / 电商最常用公网只放pay.example.com运营 / 商户平台留内网。防火墙只开一个子域对应的 80/443。两个方案均以支付网关19216作为唯一公网入口只是前者额外承担了域名收敛的开销需改造前端打包路径与后端 context-path后者则完全复用本文的三子域名模板、仅部署 pay 一个域名属于改动最小、风险最低的路径适合绝大多数以收银台 API 为对外形态的商家接入场景。【免费下载链接】jeepayJeepay是一套适合互联网企业使用的开源支付系统支持多渠道服务商和普通商户模式。已对接微信支付支付宝云闪付官方接口支持聚合码支付。项目地址: https://gitcode.com/GitHub_Trending/je/jeepay创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考