黄怀莹 發表於 2019-11-30 12:14:00

frp 配置多个 web 项目,无需购买域名 (访问内网可视化界面,jupyter noterbook, visdom, tensorboard)

<p><span style="font-size: 18pt">frp 配置多个 web 项目,无需购买域名</span></p>
<p><span style="font-size: 18px">简单配置,参考</span></p>
<p><span style="font-size: 18px">前言:</span></p>
<p><span style="font-size: 18px">网上也有很多教程包括官方文档,都需要购买域名,并且把 frpc.ini 中 节配置的&nbsp; custom_domains 的值解析到外网的服务器,多个web项目需要多个 custom_domains(每个web项目保证唯一),统统把这些 custom_domains 解析到外网服务器,然后就可以使用,使用方式就是 custom_domains:vhost_http_port,就可以实现多个web项目的访问。</span></p>
<p>&nbsp;</p>
<p><span style="font-size: 18px">下面的方法不需要购买域名和域名解析服务,也可以实现多个web项目内网穿透使用</span></p>
<p>&nbsp;</p>
<p><span style="font-size: 18px">提出解决方法依据的原理(想快速解决问题,请跳过)</span></p>
<p><span style="font-size: 18px"><span style="color: rgba(51, 102, 255, 1)">疑问</span>: frp软件尽管配置了 custom_domains,但是统统解析到了同一台外网服务器,那为什么可以实现请求统一端口(frps.ini common 中的</span><span class="pl-k" style="font-family: SFMono-Regular, Consolas, &quot;Liberation Mono&quot;, Menlo, monospace; font-size: 13.6px; box-sizing: border-box; color: rgba(215, 58, 73, 1)">vhost_http_port&nbsp;</span><span style="font-size: 18px">) 来达到访问不同web项目的需求呢?</span></p>
<p><span style="font-size: 18px">1. 首先,我们都知道浏览器输入一个 url 的访问过程,如果是使用域名访问,那么首先需要解析域名获得真实的IP地址然后,通过TCP报文来发送。那么神奇的地方就来了,我们在 frpc.ini 中把所有的 web 项目的 custom_domains 都解析到了同一个 IP地址,并且 frps.ini 提供web访问的端口只有一个(vhost_http_port),按照socket建立连接,我们有了(IP,Port)这个元组就可以唯一确定这个连接了,因此我们可以断定所有配置的内网的web项目全部使用这一个socket完成</span></p>
<p><span style="font-size: 18px">2. 那使用一个socket链接如何区分不同的内网web项目呢?</span></p>
<p><span style="font-size: 18px">回想 frpc.ini ,我们在这里配置了不同的 custom_domains, 这就是关键,fpr server只有通过这个标识才能分发不同的数据到不同的web项目。因此,在我们通过</span><span style="font-size: 18px">&nbsp;</span><span class="cnblogs_code">custom_domains:vhost_http_port</span><span style="font-size: 18px">&nbsp;来访问目的 web项目时候,必要要保证&nbsp;</span><span style="font-size: 18px">&nbsp;&nbsp;<span class="cnblogs_code">custom_domains</span>&nbsp; 被传递到了 frp server,这样才能被分发。<span style="color: rgba(51, 102, 255, 1)">frp软件采用http中host字段来保证这个事情</span>,当我们使用浏览器请求目标网站,浏览器自动把目的RUL域名填到 http request header 的host字段。因此,当这个请求到达 frp server的时候,只要通过查找与 request header host 对应的 web项目即可,这样就实现了一个端口分发的问题。(类似于Nginx中端口分发,只不过那里使用的 url 前缀进行分发,这里使用的 request header host 字段)</span></p>
<p><span style="font-size: 18px">3. 看到这里你就明白该怎么做了(笑)</span></p>
<p><span style="font-size: 18px">我们只要配置本机的 host 文件,追加每个 custom_domains 到 公网服务器的解析即可</span></p>
<p><span style="font-size: 18px">通过这样就可以达到,custom_domains 被顺利放在 请求的header host字段,并且也不需要购买域名实现本地解析。</span></p>
<p>&nbsp;</p>
<p><span style="font-size: 18px">=========== 实践派 ==============</span></p>
<p><span style="font-size: 18px">一、配置&nbsp; frpc.ini&nbsp;</span><span></span><span>server_addr </span>=<span> xx.xx.xx.xx</span></p>
<div class="cnblogs_code">
<pre></pre>
<p><br>server_addr = xx.xx.xx.xx<br>server_port = 7000</p>
<pre><em id="__mceDel"><em id="__mceDel"><em id="__mceDel"><span style="color: rgba(0, 0, 0, 1)">

type </span>=<span style="color: rgba(0, 0, 0, 1)"> tcp
local_ip </span>= <span style="color: rgba(128, 0, 128, 1)">127.0</span>.<span style="color: rgba(128, 0, 128, 1)">0.1</span><span style="color: rgba(0, 0, 0, 1)">
local_port </span>= <span style="color: rgba(128, 0, 128, 1)">22</span><span style="color: rgba(0, 0, 0, 1)">
remote_port </span>= <span style="color: rgba(128, 0, 128, 1)">6001</span><span style="color: rgba(0, 0, 0, 1)">


type </span>=<span style="color: rgba(0, 0, 0, 1)"> http
local_ip </span>= <span style="color: rgba(128, 0, 128, 1)">127.0</span>.<span style="color: rgba(128, 0, 128, 1)">0.1</span><span style="color: rgba(0, 0, 0, 1)">
local_port </span>= <span style="color: rgba(128, 0, 128, 1)">9990               #网站使用的端口</span><span style="color: rgba(0, 0, 0, 1)">
custom_domains </span>= a.<span style="color: rgba(0, 0, 255, 1)">free</span><span style="color: rgba(0, 0, 0, 1)">.domain#随便写个域名保证唯一



type </span>=<span style="color: rgba(0, 0, 0, 1)"> http
local_ip </span>= <span style="color: rgba(128, 0, 128, 1)">127.0</span>.<span style="color: rgba(128, 0, 128, 1)">0.1</span><span style="color: rgba(0, 0, 0, 1)">
local_port </span>= <span style="color: rgba(128, 0, 128, 1)">9991            #网站使用的端口<br></span><span style="color: rgba(0, 0, 0, 1)">
custom_domains </span>= b.<span style="color: rgba(0, 0, 255, 1)">free</span>.domain </em></em><em id="__mceDel">#随便写个域名保证唯一</em></em></pre>
</div>
<p>二、配置服务器 frps.ini</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">
bind_port </span>= <span style="color: rgba(128, 0, 128, 1)">7000</span><span style="color: rgba(0, 0, 0, 1)">
vhost_http_port </span>= <span style="color: rgba(128, 0, 128, 1)">8080</span></pre>
</div>
<p>&nbsp;</p>
<p>二、 重新启动客户端软件 ./frpc -c frpc.ini&nbsp; 重新启动服务端软件 ./frps -c frps.ini</p>
<p>三、配置本地host文件</p>
<p>windows :&nbsp;<span class="cnblogs_code">C:\Windows\System32\drivers\etc\hosts</span>&nbsp;&nbsp;</p>
<p>linux:&nbsp;&nbsp;<span class="cnblogs_code">/etc/hosts</span>&nbsp;</p>
<p><span style="font-size: 18px">追加</span></p>
<div class="cnblogs_code">
<pre>xx.xx.xx.xxa.<span style="color: rgba(0, 0, 255, 1)">free</span><span style="color: rgba(0, 0, 0, 1)">.domain
xx.xx.xx.xxb.</span><span style="color: rgba(0, 0, 255, 1)">free</span>.domain</pre>
</div>
<p>xx.xx.xx.xx 是你的公网服务器IP 地址</p>
<p>刷新 host文件,使得新配置生效:</p>
<p>windows: ipconfig.exe /flushdns&nbsp;</p>
<p>linux:&nbsp;<span style="color: rgba(77, 77, 77, 1); font-family: &quot;Microsoft YaHei&quot;, &quot;SF Pro Display&quot;, Roboto, Noto, Arial, &quot;PingFang SC&quot;, sans-serif; font-size: 16px">systemctl restart nscd</span></p>
<p>四、打开浏览器</p>
<p>输入: a.free.domain:8080&nbsp; 即可访问 web项目&nbsp;<em id="__mceDel" style="font-family: &quot;Courier New&quot;; font-size: 12px">web_9990</em></p>
<p>输入: b.free.domain:8080&nbsp; 即可访问 web项目&nbsp;<em id="__mceDel" style="font-family: &quot;Courier New&quot;; font-size: 12px">web_9991</em></p>
<p><span style="font-size: 18px">&nbsp;</span></p>
<p>&nbsp;</p>
<pre><span class="pl-k" style="box-sizing: border-box; color: rgba(215, 58, 73, 1)">custom_domains</span></pre><br><br>
来源:https://www.cnblogs.com/TianyuSu/p/11961994.html
頁: [1]
查看完整版本: frp 配置多个 web 项目,无需购买域名 (访问内网可视化界面,jupyter noterbook, visdom, tensorboard)