1.為什么需要使用內網穿透式的反向代理
它可以幫助我們完成兩件事:1.幫我們把一個內網機器上的服務發布到外網上,這樣在給用戶演示的情況下很有用。2.在開發階段,如果我們集成了某種需要回調的第三方服務,可以讓我們很方便的調試回調功能是否正常。
可以實現內網反向代理的工具有很多,如:ngrok、lanproxy、goproxy、nps、frp。而我選擇使用frp,原因是用了一圈后,發現它的配置比較簡潔。
2.使用前提
一台有外網ip的主機,本例使用的centos 7.8,ip:123.45.56.78
如果需要使用域名訪問web服務,還需要准備域名,如本次示例:mm.agent.ztimage.com,並指向123.45.56.78
frp程序文件:https://github.com/fatedier/frp/releases,本次使用的版本 v0.34.3
2.服務端設置
下載並解壓
# wget https://github.com/fatedier/frp/releases/download/v0.34.3/frp_0.34.3_linux_amd64.tar.gz # tar -zxvf -C /usr/local/frp frp_0.34.3_linux_amd64.tar.gz
配置 frps.ini (windows和linux版的配置是一樣的)
[common] bind_addr = 0.0.0.0 #綁定的服務IP bind_port = 18080 #frp服務端口
dashboard_port = 10001 #frp統計web 端口,訪問此端口可以查看frp的各種指標和信息
dashboard_user = goodboy #統計web的登錄用戶名
dashboard_pwd = 123456 #統計web的密碼
vhost_http_port = 10002 #使用web轉發時,服務端監聽的端口號
max_pool_count = 50 #最大提供轉發的數量
token = imgoodboy #客戶端連接時需要提供的token,也可以不設置
運行
# ./frps -c frps.ini
3.客戶端設置
配置 frqc.ini (windows和linux配置是一樣的)
[common] server_addr = 123.45.56.78 #服務器ip server_port = 18080 #frq服務端口號 token = imgoodboy #服務器端需要的token,如果服務端不需要,這個可以不設置
[ssh]
type = tcp #轉發協議
local_ip = 127.0.0.1 #本地提供ssh服務的ip
local_port = 22 #本地提供ssh服務的端口
remote_port = 10003 #遠程服務器所監聽的端口
[web01] type = http #轉發類型 local_port = 5000 #轉發至本地那個端口 custom_domains = mm.agent.ztimage.com #訪問域名
運行
# ./frpc -c frpc.ini
在本實例中提供了兩種數據的轉發
ssh:當訪問 “123.45.56.78:1003"時,會轉發至本地 22端口上
web01: 當訪問 ”mm.agent.ztimage.com:10002“時,會轉發至本地5000端口
4.開機啟動
本示例是將 客戶端設為開機啟動,服務端同理,只需更改ExecStart參數即可。
新增systemd unit配置文件 frp.service ,放在位置/usr/lib/systemd/system或/lib/systemd/system
[Unit] Description=frp service After=network.target [Service] Type=simple ExecStart=/usr/local/frp/frpc -c /usr/local/frp/frpc.ini ExecReload=/bin/kill -HUP $MAINPID ExecStop=/bin/kill -s QUIT $MAINPID [Install] WantedBy=multi-user.target
# systemctl enable frp.service #設為開機啟動 # systemctl daemon-reload #重載服務配置 # systemctl start frp.service #啟動frp服務