## frp搭建小程序https开发穿透环境
~~~
内网假域名,就不能做https了吗?
frp 可以外网https穿透连接到内网http吗?(不行啊,内网需要证书认证吗,试一下……,不行)
那可以把服务器上的证书直接拿到本地使用吗?(可以使用,几乎同样的配置)但是穿透时错误啊ERR_SSL_PROTOCOL_ERROR 打不开8080
错误原因找到了,原来使用https时本地地址 local_port 不能配置为80端口了啊,设置为443就好了:
frpc.ini
[web]
local_port = 443
-----
tip: 申请ssl要真域名,并且必须在服务器上生成ssl,生成的ssl拿到本地使用真域名(重定向)也是可以用的,但是现在要将真域名https穿透到本地。(一台服务器上生成的ssl拿到另外一台服务器上也是可以直接使用的,当然要域名是一样的)
待研究,反正服务器上生成的证书复制到本地是可以直接用的(当然还是使用生成时的真域名,本地host重定向访问)。
~~~
> 穿透其实就是改电脑的host,只不过你只能改自己的电脑(只能在自己的电脑上看到**域名重定向**的效果),别人的电脑你改不了,所以现在来个穿透,相当于变相的“改了别人的host”(其实是外网主机的请求被代理到了本地主机),从而实现和你在自己的电脑上改自己的host文件一样的效果。(每个电脑的host文件是上网的起点,原理是一份域名DNS表)
[host文件的工作原理及应用 - CSDN博客](https://blog.csdn.net/tskyfree/article/details/41214829)
* * * * *
### 附frp 服务器 & 客户端 配置
frps.ini
```
[common]
bind_port = 7000
vhost_https_port = 8080
```
frpc.ini
```
[common]
server_addr = 服务器IP
server_port = 7000
[web]
type = https
local_port = 443
custom_domains = 外网域名
header_X-From-Where = frp
```
### 附本地host文件
```
# 本地假域名
192.168.1.109 内网假域名
# 真域名映射到本地(穿透时就注释)
#192.168.1.109 外网真域名
```
针对穿透的真域名可以单独建一个虚拟主机,绑定真域名。
* * * * *
### 相关概念梳理
**本地host文件:** 可以将任意域名映射到本地IP,可以实现用一个假域名重定向到虚拟机。
**nginx:** web服务器
**nginx虚拟主机:** 绑定任意域名,不论内网假域名还是外网真域名,都能绑定。
**nginx_proxy:** 代理,实现访问 IP:A 实际访问 IP:B(但它没有客户端,无法将请求代理到内网主机上,没有穿透功能,所以frp应运而生)
**frps:** 将外网请求通过建立链接的客户端frpc转到内网(可理解为一个增强版的nginx_proxy)(使用配置运行)
**frpc:** 通过与服务端建立的连接进行通信,实现内外与外网的数据交换(可理解为使用QQ相互传输数据)(使用配置运行)
**外网服务器:** 外网生产服务器,只能通过外网IP访问
**本地虚拟机:** 内网的服务器(通过虚拟机VirtualBox搭建),本地开发主机,没有可访问的外网IP,只能在局域网内被访问
>[tip] 涉及到的东西有点多而且很乱,但是如果你能先把上面的一些概念弄明白,那其它东西就自然清晰了。
* * * * *
### 扩展
[nginx frp http/https 配置 (全部都是docker 安装) - CSDN博客](https://blog.csdn.net/u011164906/article/details/81169005)
[frp 自动启动 – 码农的世界](https://free-e.net/109)
[微信开发必备神器frp - CSDN博客](https://blog.csdn.net/woaiqianzhige/article/details/80712525)
[微信小程序部署HTTPS报错怎么办? - CSDN博客](https://blog.csdn.net/sinat_36947685/article/details/53638660)
[Linux下使用acme.sh申请和管理Let’s Encrypt证书 - 明月登楼的博客](https://www.imydl.com/linux/5744.html)
[LNMP环境镜像使用手册](https://oneinstack.com/docs/lnmpstack-image-guide/)(内网应该也是可以申请ssl证书的,但不知为什么,在本地虚拟主机上添加虚拟主机时生成ssl操作失败了,总是创建证书失败,在服务器则可以生成ssl证书。)
[在局域网内实现https安全访问 - 简书](https://www.jianshu.com/p/631719c9f0c6)
[iis内网程序想用https访问,ssl证书怎么弄-CSDN问答](https://ask.csdn.net/questions/181470?sort=comments_count)
[内网 HTTPS 反代的 SSL 证书问题 - V2EX](https://www.v2ex.com/t/265637)
[局域网内可以架设安全的https网站么? - 知乎](https://www.zhihu.com/question/27878215)
> 证书是和域名匹配的,因此访问 https 网站(已认证)一般是需要公网IP地址,且一个公网IP地址只能安装一个SSL证书。**内网当然也可以架设 https 网站,如果不想用自签名证书的话,那则需要一个已认证的域名SSL,可在内网的 DNS 服务器上将此域名解析到内网 IP 上即可。**
[SSL/TLS安全评估报告](https://myssl.com/)
* * * * *
### 其他
远程调试:[远程调试 · ThinkPHP5.0完全开发手册 · 看云](https://www.kancloud.cn/manual/thinkphp5/156120)(如链接失败,命令运行加 `./` ,即 `./socketlog-server` 试试)
* * * * *
last update:2018-8-8 22:36:00