menu
refresh
写手
FRP内网穿透——暴露内网服务为外网https服务

access_time
brush 555个字
whatshot 33 ℃

最近做了个小程序,连接了局域网的springboot服务,在局域网中用模拟器和真机调试一切正常。用手机4G网络则无法调试和预览。

查询相关资料后得知,微信小程序在手机上预览的时候需要将域名加入白名单中,而且必须是https,普通的http还不行

所以需求就是将内网的springboot服务映射出去,转变成https

巧的是,FRP里面正好提供了这样的功能,只是官方的配置文档说的不是很详细,且零散。我来给总结一个使用流程:

  1. 准备一个已经备案的域名,假设叫example.com。使用它的二级域名或顶级域名都可以,那就假设用p1.example.com
  2. 准备一张证书,下载回来备用
  3. 把域名解析到FRP服务器
  4. 服务端配置:在common字段下,配置一个vhost_https_port,用于开启https功能
  5. 客户端配置文件中,新建一个配置项:

[SpringBoot]
type = https
custom_domains = p1.example.com

plugin = https2http
plugin_local_addr = 172.16.***.***:***
plugin_crt_path=/public/xxx.crt
plugin_key_path=/public/xxx.key

# 以下可选
# 如果配置,发送给本地服务的请求的 Host 字段会被修改
# plugin_host_header_rewrite = 127.0.0.1

# 发送给本地服务的请求会被加上指定的 header 字段
# 如:plugin_header_{header name} = xxx
# plugin_header_X-From-Where = frp
  1. 小程序请求的接口地址填写p1.example.com:端口号,端口号就是服务端的vhost_https_port。同时记得将p1.example.com加入到开发设置中的域名白名单中。这样基本就能正确调用
  2. 如果配置了header,则需要配置相应的plugin_header_

整体配置中,以下是注意要点:

  • plugin要填写https2http,而不是http2https当时在这里真的被坑了好久!这俩的命名方式真的让我很无语。不信,你们看两者的区别:

    http2https:
    将本地的 HTTPS 服务以 HTTP 的形式暴露出去。(对外 HTTP)
    https2http:
    将本地的 HTTP 服务以 HTTPS 的形式暴露出去。(对外 HTTPS)
  • 通过 plugin 指定需要使用的插件当启用客户端插件后,local_iplocal_port 不再需要配置
  • custom_domainssub_domains至少要填写一项,这个域名需要解析到服务端所在的服务器
  • plugin_local_addr是本地服务地址,可以指定为局域网中的服务主机
  • 另外,还需要指定证书和密钥的路径。plugin_crt_path用于指定证书路径,plugin_key_path用于指定密钥位置
  • plugin_host_header_rewriteplugin_header_X-From-Where是可选的

#如无特别声明,该文章均为 写手 原创,转载请遵循 署名-非商业性使用 4.0 国际(CC BY-NC 4.0) 协议,即转载请注明文章来源。
#最后编辑时间为: 2022 年 07 月 05 日


account_circle
email
explore


DreamCat

主题名称:DreamCat | 版本:X1.8-20210106

主题开发:HanFengA7 | TeddyNight | Dev-Leo | CornWorld | WBStudio | 学神之女

Designed by HanFengA7 Power by Typecho

Copyright © 2015-2021 by LychApe All rights reserved!

加我的QQ
加我的微博
加我的支付宝
加我的微信