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
原文地址:https://www.cnblogs.com/Zzang/p/14845578.html