
一文講透 AI Agent 與 AI Workflow 的區別和深度解析:從自動化到智能化的演進
frp(Fast Reverse Proxy)[1] 是一個高性能的反向代理工具,使用 Go 語言編寫,能夠幫助你輕松地將內網服務暴露到公網,實現安全、快速、便捷的內網代理。它支持 TCP、UDP、HTTP、HTTPS 等多種協議,并提供豐富的功能,例如自定義域名、負載均衡、加密傳輸等,能夠滿足各種場景下的內網代理需求。
Sealos
一個云操作系統,集本地開發、線上測試、打包上線為一體,無需云計算專業知識,就能在幾秒鐘內部署、管理和擴展您的應用。官方網站:https://sealos.run
目前 frp 在 GitHub 上已經獲得了超過 83000 顆星。
frp 的核心思想是利用反向代理技術,將內網服務通過一個公網服務器進行轉發,從而實現外部用戶對內網服務的訪問。架構圖如下:
它的工作原理可以簡單概括為:
frp 的主要功能特性包括:
為了更直觀地展示 frp 的優勢,我們可以將其與市面上的其他主流內網代理解決方案進行對比:
特性 | frp | ngrok | Cloudflare Tunnel |
開源 | 是 | 否 | 否 |
免費使用 | 是 | 有限制 | 有限制 |
自托管 | 支持 | 不支持 | 不支持 |
多協議支持 | TCP/UDP/HTTP(S) | 主要支持 HTTP(S) | HTTP(S) |
配置復雜度 | 低 | 中 | 中 |
性能 | 高 | 中 | 高 |
安全特性 | 豐富 | 基本 | 豐富 |
社區支持 | 活躍 | 有限 | 有限 |
雖然 ngrok 在易用性方面略勝一籌,Cloudflare Tunnel 則在全球化部署上有優勢,但 frp 在開源友好度、功能靈活性和成本控制上獨樹一幟。特別是對于希望完全控制內網代理基礎設施的團隊來說,frp 提供了一個完美的平衡點。
frp 有多種安裝方式,你可以通過二進制來安裝,也可以通過 Docker 鏡像來部署。但你必須購買一臺具有公網 IP 的服務器。
對于沒有技術背景的同學而言,你也不用擔心安裝問題,Sealos 應用商店[2]提供了一鍵部署的應用模板,點一下鼠標即可完成部署,非常絲滑。而且不需要再單獨購買具有公網 IP 的服務器了,直接按量付費即可。
如果你想快速部署一個 frp,又不想陷入繁瑣的安裝和配置過程,可以試試 Sealos。
直接打開 frp 應用模板:
然后點擊右上角的 “去 Sealos 部署”。
如果您是第一次使用 Sealos[3],則需要注冊登錄 Sealos 公有云賬號,登錄之后會立即跳轉到模板的部署頁面。
這里需要填一下管理面板的用戶名和密碼:
填好參數之后,點擊右上角的 “部署應用” 開始部署。部署完成后,直接點擊應用的 “詳情” 進入該應用的詳情頁面。
等待應用狀態變成 running 之后,直接點擊端口 7500 對應的外網地址便可打開 frp 的管理界面。
除此之外,還有另外一種打開方式,先刷新 Sealos 桌面 (也就是在 cloud.sealos.run 界面刷新瀏覽器),然后你就會發現 Sealos 桌面多了個圖標:
直接點擊這個圖標就可以打開 frp 的管理界面。輸入之前部署時設置的用戶名和密碼就可以登錄了。
是不是有點似曾相識?沒錯,很像 Windows 的快捷方式!
單機操作系統可以這么玩,Sealos 云操作系統當然也可以這么玩。
下面我們通過一個簡單的例子來快速體驗一下 frp 的使用。
設我們要將本地 Linux 機器上運行在 80 端口的 Web 服務暴露到公網。首先要在 Web 服務所在的本地機器上下載 frpc 二進制文件:
# 設置 VERSION 環境變量為 latest 版本號
VERSION=$(curl -s https://api.github.com/repos/fatedier/frp/releases/latest | grep -oE '"tag_name": "[^"]+"' | head -n1 | cut -d'"' -f4 | cut -d 'v' -f2)
# 下載最新版本 frp
wget https://github.com/fatedier/frp/releases/download/v${VERSION}/frp_${VERSION}_linux_amd64.tar.gz
# 解壓
tar zxf frp_${VERSION}_linux_amd64.tar.gz
cd frp_${VERSION}_linux_amd64
編寫客戶端配置文件:
# frpc.toml
serverAddr = "frp-udkhnlcc.bja.sealos.run"
serverPort = 46451
[[proxies]]
name = "web"
type = "http"
localPort = 80
customDomains = ["frp-udkhnlcc.bja.sealos.run"]
serverAddr
的值替換為你的 frp 服務的 80 端口對應的公網地址:serverPort
的值替換為你的 frp 服務的 7000 端口對應的外網端口。在 frp 服務詳情頁面點擊左上角的 “管理所有資源”:然后將鼠標拉到最下面,即可看到 7000 端口對應的外網端口:
customDomains
的值替換為你的 frp 服務的 80 端口對應的公網地址。啟動 frpc:
./frpc -c ./frpc.toml
現在讓我們回到 frp 服務詳情頁面,點擊 80 端口對應的外網地址就能打訪問地機器的 Web 服務了。
太強了!
注意:由于國內政策原因,后續 Sealos 公有云逐漸合規之后,國內可用區的二級域名只能作為測試使用,如果想正式使用,必須使用自己的域名。
frp 不僅可以進行 HTTP/HTTPS 代理,還有很多高級用法。
以 SSH 服務為例,客戶端配置如下:
# frpc.toml
serverAddr = "wvvirfjfkjnt.bja.sealos.run"
serverPort = 46451
[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 31577
在 frp 服務詳情頁面點擊左上角的 “管理所有資源”:
然后將鼠標拉到最下面,除了 7000 端口之外,還暴露了一個 TCP 端口,將這個端口的值作為上述 frpc 配置文件中 remotePort 的值即可。
啟動 frpc:
./frpc -c ./frpc.toml
現在我們到另外一臺機器上就可以通過 ssh -oPort=31577 root@wvvirfjfkjnt.bja.sealos.run
來訪問內網機器的 SSH 服務了:
frp 支持在傳輸過程中對 TCP 數據進行加密和壓縮,以提高安全性和傳輸效率。還以 SSH 服務為例,直接添加兩個參數 transport.useEncryption 和 transport.useCompression 就可以支持加密和壓縮了。
# frpc.toml
serverAddr = "wvvirfjfkjnt.bja.sealos.run"
serverPort = 46451
[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 31577
transport.useEncryption = true
transport.useCompression = true
假設你的本地 Web 有多個服務,分散在不同的機器上 (或者同一個機器的不同端口),便可以通過配置 group
來實現多個代理的負載均衡。
# frpc.toml
serverAddr = "wvvirfjfkjnt.bja.sealos.run"
serverPort = 46451
[[proxies]]
name = "web1"
type = "http"
localIP = "127.0.0.1"
localPort = 80
customDomains = ["frp-udkhnlcc.bja.sealos.run"]
loadBalancer.group = "web"
loadBalancer.groupKey = "123"
[[proxies]]
name = "web2"
type = "http"
localIP = "x.x.x.x"
localPort = 80
customDomains = ["frp-udkhnlcc.bja.sealos.run"]
loadBalancer.group = "web"
loadBalancer.groupKey = "123"
當然,除了 http 之外,frp 也支持 tcp 和 tcpmux 的負載均衡。
frp 還有更多強大的特性,如:
限于篇幅,這里就不一一介紹了。感興趣的同學可以查看 frp 的官方文檔[4]了解更多細節。
frp 作為一款輕量級的內網代理工具,具有以下優勢:
無論是個人開發測試,還是小型團隊內部使用,frp 都是一個非常好的選擇。大家可以嘗試使用一下,相信會給你的開發工作帶來很大的便利。
文章轉載自:8 萬 star!我愿稱之為內網代理之神,輕松將本地服務暴露到公網!