场景说明
在微信小程序上线测试的时候,自主开发的后端服务在公司局域网,小程序前端在微信公众平台只支持配置https协议的域名来访问服务端。公司一直在使用frp内网穿透工具实现公网访问公司局域网服务,因此,研究如何实现frp代理https请求,通过自定义域名访问部署于内网的 Web 服务。
1方式
frp只做请求穿透代理,frp客户端配置的目标服务器中使用nginx实现https的请求代理
这种方式frp配置简单,系统部署与正常部署相同,使用相对简单,因此选择这种方式实现。
frp
简单来说,就是可以随时随地通过有公网 IP 的服务器中转连接到运行 frpc 程序的任意机器的任意端口
2实现过程
经过测试,发现使用第一种方式实现最为简单。
2.1配置内网穿透,在frp服务端配置文件中启用https
服务端一般安装在公网服务器上
2.2配置内网穿透,在frp客户端配置文件中增加配置
客户端一般在需要被公网使用的局域网服务器上
type
表示请求类型,http
、https
、tcp
等
local_ip
表示本地服务器的ip地址
local_port
表示本地服务器的端口
remote_port
表示对公网远程请求暴露的端口
subdomain
表示子域名,将拼在一级域名前,例如一级域名为 test.com
,子域名为 frp-test
,则实际域名为frp-test.test.com
配置完成后重启服务
查看当前的frp客户端进程,kill该进程
ps -ef|grep frp
kill 80305
后台运行frp客户端
nohup ./frpc -c ./frpc.ini >> /dev/null 2>&1 &
2.3 申请ssl证书
阿里云免费ssl证书申请参考
2.4 在nginx中配置ssl证书
在阿里云SSL证书列表中下载Nginx服务器的文件,上传到在frp客户端配置的穿透的内网目标服务器上安装的Nginx的目录下,例如/etc/nginx/cert/。
在frp客户端配置的穿透的内网目标服务器上安装的Nginx中配置代理,将域名与证书配置到相应的https配置。
问题解决
部署成功后,使用域名和frp配置的https服务端代理端口访问无响应,检查frp服务端所在的公网云服务器的安全组配置中是否开放frp配置的https服务端代理端口。例如配置的端口是4430,需要手动添加4430端口的安全组规则,一般默认使用443端口。