## 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完全開發手冊 · 看云](http://www.hmoore.net/manual/thinkphp5/156120)(如鏈接失敗,命令運行加 `./` ,即 `./socketlog-server` 試試)
* * * * *
last update:2018-8-8 22:36:00