frp 配置多個 web 項目,無需購買域名 (訪問內網可視化界面,jupyter noterbook, visdom, tensorboard)


frp 配置多個 web 項目,無需購買域名

簡單配置,參考

前言:

網上也有很多教程包括官方文檔,都需要購買域名,並且把 frpc.ini 中 [web]節配置的  custom_domains 的值解析到外網的服務器,多個web項目需要多個 custom_domains(每個web項目保證唯一),統統把這些 custom_domains 解析到外網服務器,然后就可以使用,使用方式就是 custom_domains:vhost_http_port,就可以實現多個web項目的訪問。

 

下面的方法不需要購買域名和域名解析服務,也可以實現多個web項目內網穿透使用

 

提出解決方法依據的原理(想快速解決問題,請跳過)

疑問: frp軟件盡管配置了 custom_domains,但是統統解析到了同一台外網服務器,那為什么可以實現請求統一端口(frps.ini common 中的vhost_http_port ) 來達到訪問不同web項目的需求呢?

1. 首先,我們都知道瀏覽器輸入一個 url 的訪問過程,如果是使用域名訪問,那么首先需要解析域名獲得真實的IP地址然后,通過TCP報文來發送。那么神奇的地方就來了,我們在 frpc.ini 中把所有的 web 項目的 custom_domains 都解析到了同一個 IP地址,並且 frps.ini 提供web訪問的端口只有一個(vhost_http_port),按照socket建立連接,我們有了(IP,Port)這個元組就可以唯一確定這個連接了,因此我們可以斷定所有配置的內網的web項目全部使用這一個socket完成

2. 那使用一個socket鏈接如何區分不同的內網web項目呢?

回想 frpc.ini ,我們在這里配置了不同的 custom_domains, 這就是關鍵,fpr server只有通過這個標識才能分發不同的數據到不同的web項目。因此,在我們通過 custom_domains:vhost_http_port 來訪問目的 web項目時候,必要要保證   custom_domains  被傳遞到了 frp server,這樣才能被分發。frp軟件采用http中host字段來保證這個事情,當我們使用瀏覽器請求目標網站,瀏覽器自動把目的RUL域名填到 http request header 的host字段。因此,當這個請求到達 frp server的時候,只要通過查找與 request header host 對應的 web項目即可,這樣就實現了一個端口分發的問題。(類似於Nginx中端口分發,只不過那里使用的 url 前綴進行分發,這里使用的 request header host 字段)

3. 看到這里你就明白該怎么做了(笑)

我們只要配置本機的 host 文件,追加每個 custom_domains 到 公網服務器的解析即可

通過這樣就可以達到,custom_domains 被順利放在 請求的header host字段,並且也不需要購買域名實現本地解析。

 

=========== 實踐派 ==============

一、配置  frpc.ini [common]server_addr = xx.xx.xx.xx

 
         

[common]
server_addr = xx.xx.xx.xx
server_port = 7000

 [ssh_sx] type = tcp local_ip = 127.0.0.1 local_port = 22 remote_port = 6001 [web_9990] type = http local_ip = 127.0.0.1 local_port = 9990 #網站使用的端口 custom_domains = a.free.domain #隨便寫個域名保證唯一 [web_9991] type = http local_ip = 127.0.0.1 local_port = 9991 #網站使用的端口
custom_domains = b.free.domain
#隨便寫個域名保證唯一

二、配置服務器 frps.ini

[common]
bind_port = 7000
vhost_http_port = 8080

 

二、 重新啟動客戶端軟件 ./frpc -c frpc.ini  重新啟動服務端軟件 ./frps -c frps.ini

三、配置本地host文件

windows : C:\Windows\System32\drivers\etc\hosts  

linux:  /etc/hosts 

追加

xx.xx.xx.xx  a.free.domain
xx.xx.xx.xx  b.free.domain

xx.xx.xx.xx 是你的公網服務器IP 地址

刷新 host文件,使得新配置生效

windows: ipconfig.exe /flushdns 

linux: systemctl restart nscd

四、打開瀏覽器

輸入: a.free.domain:8080  即可訪問 web項目 web_9990

輸入: b.free.domain:8080  即可訪問 web項目 web_9991

 

 

custom_domains


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM