通過frp在內網PC部署web應用和VPS內網穿透


實驗環境

  1. 內網電腦-Windows 10
  2. 外網服務器-Vultr Ubuntu 19.10-x64

frp介紹和安裝

frp 是一個可用於內網穿透的高性能的反向代理應用,支持 tcp, udp 協議,為 http 和 https 應用協議提供了額外的能力,且嘗試性支持了點對點穿透。本次實驗使用的frp版本是最新版本v0.31.1。
下載地址:frp Github
Windows版本安裝

  • 下載win64版本的壓縮包:Win-x64
  • 解壓縮到電腦中的文件夾中:我是放在G:\projects\frp文件夾中。文件結構如下:
    在這里插入圖片描述
    Linux版本安裝
  • 下載linux-x64版本的壓縮包。
    • 創建frp文件夾:mkdir frp
    • 進入文件夾:cd frp,並下載壓縮包:
       wget https://github.com/fatedier/frp/releases/download/v0.31.1/frp_0.31.1_linux_amd64.tar.gz
      
    • 解壓縮frp壓縮包
       tar -zxvf frp_0.31.1_linux_amd64.tar.gz
      
  • 通過ll命令查看linux下的文件夾:
    在這里插入圖片描述

frp配置和使用

我們看到有frpc,frpc_full.ini,frpc.ini以及 frps,frps_fill.ini, frps.ini這幾個文件
如果是作為客戶端,那么配置frpc.ini文件,如果是作為反向代理的服務端則使用frps.ini文件。這個實驗中,我們用vultr的VPS作為外網服務器,提供反向代理服務。
修改frps.ini文件:

[common]
bind_port = 7000           #與客戶端綁定的進行通信的端口
vhost_http_port = 8080     #訪問客戶端web服務自定義的端口號

保存文件並啟動

  • 直接啟動:

./frps -c ./frps.ini,

  • 后台啟動:

nohup ./frps -c ./frps.ini &

啟動以后,frp作為服務端就在工作了,開始監聽7000端口的請求,並轉發到響應的內網服務器上。
我的內網服務器是我直接的測試PC,為了測試http內網穿透的功能。配置了一個最簡單的Django網站,並使用了8199這個端口,當然也可以部署其他的web應用,這里只是做一個示例,具體的配置就不詳細展開了。
在這里插入圖片描述
下面我們來配置frpc.ini這個文件,直接打開文本編輯器,然后打開frpc.ini文件:

[common]
server_addr = 45.77.xxx.xxx
server_port = 7000

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000

[web]
type = http      
local_port = 8199
custom_domains = test.xxx123.com

然后在在命令行模式啟動frpc.exe, 這里只是一個示范,在實際的應用中並不建議運行在windows上。請注意設置域名的解析到服務器IP上,然后訪問 http://test.xxx123.com,發現網站可以正常打開,到此已經完成了基本的設置。
在這里插入圖片描述

性能的考慮:

我們有時候使用的穿透用反向代理服務器有可能是在境外,我的實驗機就是用的Vultr的VPS,所以會出現大量的丟包和延遲現象,frp支持kcp協議,能夠大大改善這種情況,是訪問速度明顯提升。在服務器端配置kcp端口

# frps.ini
[common]
bind_port = 7000
# kcp 綁定的是 udp 端口,可以和 bind_port 一樣
kcp_bind_port = 7000

同時可以在客戶端開啟kcp協議:

# frpc.ini
[common]
server_addr = x.x.x.x
# server_port 指定為 frps 的 kcp_bind_port
server_port = 7000
protocol = kcp

負載均衡

可以將多個相同類型的 proxy 加入到同一個 group 中,從而實現負載均衡的功能。

目前只支持 TCP 和 HTTP 類型的 proxy。

# frpc.ini
[test1]
type = tcp
local_port = 8080
remote_port = 80
group = web
group_key = 123

[test2]
type = tcp
local_port = 8081
remote_port = 80
group = web
group_key = 123

用戶連接 frps 服務器的 80 端口,frps 會將接收到的用戶連接隨機分發給其中一個存活的 proxy。這樣可以在一台 frpc 機器掛掉后仍然有其他節點能夠提供服務。
TCP 類型代理要求 group_key 相同,做權限驗證,且 remote_port 相同。
HTTP 類型代理要求 group_key, custom_domains 或 subdomain 和 locations 相同


免責聲明!

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



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