FRP內網穿透與Nginx結合,實現多子域名轉發服務(三級子域名)


0.環境准備

  • 已備案的域名1個
  • 帶公網ip的雲服務器1台
  • 本地pc一個(待穿透)
  • frp-0.30.0 的frps (github自行下載)
  • nginx

1. 雲服務器上安裝Frp

#下載
wget https://github.com/fatedier/frp/releases/download/v0.20.0/frp_0.20.0_linux_amd64.tar.gz 

#解壓
tar -zxvf frp_0.20.0_linux_amd64.tar.gz

#修改frps(frp server 服務端)
vi frps.ini
>>>

[common]
#綁定端口
bind_port = 7000
# frpc Client客戶端連接Frps服務端時的token 為了安全 建議添加
token = admin

# web端管理控制面板相關配置
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = admin

#需要穿透http的統一訪問端口(http類型的內網穿透,必須設置vhost_http_port,並且所有的http類型的客戶端都將通過同一個vhost_http_port訪問。)
vhost_http_port = 7001
#https的訪問端口(如果需要的話)
#vhost_https_port = 7443

# 二級frp域名 三級sub子域名做saas
# 如果 frps 配置了 subdomain_host,則frpc中想自定義custom_domains 中不能是屬於 subdomain_host 的子域名或者泛域名。
subdomain_host = frp.xxx.com
<<<

#啟動服務端
#1.非后台運行
./frps -c ./frps.ini
#2.后台運行
nohup ./frps -c frps.ini & > frp.log

#查看啟動成功
netstat -anp |grep frp

2. 雲服務提供商控制台 DNS域名解析配置

需要解析共兩條A記錄:

frp.xxx.com 和 *.frp.xxx.com

例:

記錄值 記錄類型(A類型) ip地址
frp A ip地址
*.frp A ip地址

都指向你的雲服務器ip,稍等一會ping frp.xxx.com,如果能ping通說明解析成功

3. 配置Frpc Client客戶端

穿透機器/本地pc 解壓包

修改frpc.ini

>>>
#frps公共服務端配置
[common]
# 公網ip,frps所在的服務器的ip
server_addr = xxx.xxx.xxx.xxx
# frps服務端連接端口
server_port = 7000
# 連接token,與frps中的token一致
token = admin

# 定義第一個轉發
[web01]
type = http
# 本地(內網)服務的端口
local_port = 8001
# 與frps中的subdomain_host連接起來就是pc1.frp.xxx.com
subdomain = pc1

# 定義第二個轉發
[web02]
type = http
# 本地(內網)服務的端口
local_port = 8002
# 與frps中的subdomain_host連接起來完整訪問地址就是pc.frp.xxx.com
subdomain = pc
<<<
  • PC cmd運行:frpc.exe -c frpc.ini

2種訪問方式:

  1. 一種純域名,nginx做好做二級域名三級泛域名及反向代理,直接訪問

    http://pc1.frp.xxx.com

    http://pc2.frp.xxx.com

  2. 一種sub域名+穿透端口號(vhost_http_port),nginx無需做二級域名三級泛域名配置

    http://pc1.frp.xxx.com:7001

    http://pc2.frp.xxx.com:7001

4. 配置nginx,實現第一種訪問方式

server {
	# 監聽nginx 80端口
	listen 80;
	# 域名配置 記得一定要加上*.frp.xxx.com +  frp.xxx.com這個,只加frp.xxx.com是不行的,無法支持泛域名做sub模式
	server_name *.frp.xxx.com frp.xxx.com;
	location / {
		proxy_pass http: //127.0.0.1:7001;
		# 這個Host的header一定要加,不然轉發后frp拿不到通過哪個域名訪問的,導致轉發失敗
		proxy_set_header   Host             $host;
		proxy_set_header   X-Real-IP        $remote_addr;
		proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
	}
}
  • nginx重新刷新加載配置 ./nginx -s reload


免責聲明!

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



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