相信很多人在開發chatbot,或者一些服務需要https,但開發時都在本機,無法直接對外,可能公司有資安限制,或者無法直接使用80、443對外,但ngrok不付費的狀況下,網址每次重新啟動都會更換網址,同時間只能有一個連線,那有沒有其他的方法?!
成本
有的!
而且免費!
好拉其實不是真的免費,只是工具是免費的,但還是要有一台在外網公開的VPS,我選擇的是GCP asia-east1-b區域的f1-micro,一個月大概是5美金。
工具
我用的是frp 這套開源的工具,他是使用Go語言編寫,frp repo 有許多功能,我是用來代替ngrok的功能,若您需要其他內網穿透的功能,可以看看他們的中文開發文件,有配置的範例教學,更方便的是他有各種平台的實作。
基本架構
frp 分為 server 與 client 兩個應用程式,分別是frps、frpc,在資料夾中也有相對應的ini 設定檔,以下就來分解如何使用這個工具。
準備VPS 的部分我就不特別說明,但有幾件注意事項
記得打開VPC的防火牆和系統的防火牆,frp 預設是用7000 port,還有http和https的port。
統計要打開的port有80、443、7000
sudo ufw allow 80
sudo ufw allow 443
sudo ufw allow 7000
請從Release下載符合你系統的檔案
如果你是linux 系統,你可以用以下命令查詢一下你該下載的是哪個版本
uname -a
例如我是macOS 輸入命令後會顯示
Darwin User.local 18.7.0 Darwin Kernel Version 18.7.0: Mon Aug 31 20:53:32 PDT 2020; root:xnu-4903.278.44~1/RELEASE_X86_64 x86_64
那我就是抓Darwin Kernel,下載連結。
解壓縮後,先修改frps.ini 來配置要開放哪些port 和使用哪些port,
以下是我的配置,7000是給client 連接用的,vhost是給瀏覽器的client 連進來的。
[common]
bind_port = 7000
vhost_http_port = 80
vhost_https_port = 443
啟動frps(Server 端)
frps -c frps.ini
frpc 設定(Client)
本機或者是你需要反向代理的電腦,請編輯frpc.ini 檔案
[web]
type = http
local_port = 8050 # 本地要轉發的port
custom_domains = example.com # 這邊填你網址
[plugin_https2http]
type = https
custom_domains = example.com # 這邊填你網址
plugin = https2http
plugin_local_addr = 127.0.0.1:8050 # 本地要轉發的port
plugin_crt_path = ./fullchain.pem # 我們可以直接從cloudflare 生成
plugin_key_path = ./privakey.pem
plugin_host_header_rewrite = 127.0.0.1
plugin_header_X-From-Where = frp
接下來我們到cloudflare 設定A record 和 ssl 憑證
請複製原始憑證,並存檔fullchain.pem
請複製私密憑證,並存檔private.pem
到frp 的本機資料夾下,注意這邊是存在client
啟動client
frpc -c frpc.ini
這樣就大功告成拉!