- 需要的资源:一个公网Ip,多个二级域名,多个内网应用
- 软件工具有:内网穿透工具 frp,以及Nginx,直接点击链接,安装对应的软件即可
我使用的环境是 一个window公网服务器,多个内网windows服务器,
第一步:公网服务器安装 Frp 和 Nginx,以及配置- 安装 Frp,下载 Frp,下载后将压缩包分别上传至windows公网服务器上及内网服务器上,在公网服务器上解压,进入解压目录,找到 frps.ini,进行以下配置:
[common]
# 详细的公网配置文档 https://gofrp.org/docs/
# frp监听的端口,用作服务端和客户端通信隧道
bind_port = 7000
# 服务端通过此端口接监听和接收公网用户的http请求
vhost_http_port = 7071
# 服务端通过此端口接监听和接收公网用户的https请求
vhost_https_port = 7072
# frp提供了一个控制台,可以通过这个端口访问到控制台。可查看frp当前有多少代理连接以及对应的状态
dashboard_port = 7500
# 服务端的subdomain_host需要和客户端配置文件中的subdomain、local_port 、local_ip配合使用,
# 可通过{subdomain}.{subdomain_host} 的域名格式来访问自己本地的 web 服务。
# 假如服务端的subdomain_host为abc.com,客户端某个配置组中的
# subdomain为a,local_port为8585,local_ip为:192.168.1.2
# 则:访问 a.abc.com ,等同于访问本地的192.168.1.2:8585,如果loca_ip没有配置就是:localhost:8585
subdomain_host = abc.com
- 公网服务器启动 Frp 服务端,在当前目录打开命令行执行以下命令:frps.exe -c frps.ini 启动后不要关闭该命令行,关闭即关闭 FRP服务
- 安装nginx,下载Nginx,选择windows 稳定版下载,解压即可
- 配置Nginx,进入解压目录,找到conf/nginx.conf,打开nginx.conf 文件 进行以下配置:
server {
listen 80;
server_name *.dev.msh.com dev.msh.com;
location / {
# 7071端口即为frp监听的http端口
proxy_pass http://127.0.0.1:7071;
proxy_set_header Host $host:80;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_connect_timeout 7d;
proxy_send_timeout 7d;
proxy_read_timeout 7d;
}
# 防止爬虫抓取
if ($http_user_agent ~* "360Spider|JikeSpider|Spider|spider|bot|Bot|2345Explorer|curl|wget|webZIP|qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot|NSPlayer|bingbot")
{
return 403;
}
}
- 以上配置完成之后,启动nginx,双击nginx.exe即可,如果已启动,执行 nginx -s reload 即可使更新后配置文件生效。
这里需要开启的防火墙端口有 80、7000 和 7001。具体开启防火墙方式这里不具体说明
第三步:客户端的Frp安装及配置- 这里使用上述已下载的frp安装包,放到一个内网服务器上,然后解压,进入解压目录,找到 frpc.ini,进行以下配置:
# 注意这里配置的是 frpc.ini 上述第一步使用的是 frps.ini [common] # 部署frp服务端的公网服务器的ip server_addr = XXX.XXX.XXX.XXX # 和服务端的bind_port保持一致 server_port = 7000 # 代理服务一 ,[]内的代理服务名称在全局范围内确保唯一,每个人的每个代理服务不能重名, # 否则会影响正常使用。 [http-test] type = http # local_port代表你想要暴露给外网的本地web服务端口 local_port = 8585 # subdomain 在全局范围内要确保唯一,每个代理服务的subdomain不能重名,否则会影响正常使用。 # 客户端的subdomain需和服务端的subdomain_host配合使用 subdomain = test # 代理服务二 ,各项配置说明请参考配置组一 [http-test2] type = http local_port = 8686 # 代理访问内网其他ip应用服务 local_ip=192.168.3.2 subdomain = test2
- 内网服务器启动 Frp 客户端,在当前目录打开命令行执行以下命令:frpc.exe -c frpc.ini 启动后不要关闭该命令行,关闭即关闭 FRP服务,如果窗口提示:start proxy success,代表frp服务端和frp客户端的通信隧道建立成功
- 测试访问:分别访问test.abc.com 和 test2.abc.com ,查看应用服务器是穿透出外网地址,访问成功,代表配置完成
frp除了http外还有https,两者是类似的,不同在于Ngixn上,反向代理443端口,开启ssl,以及在nginx上配置多个域名443端口的访问



