frp + Nginx实现内网穿透 配置多个子域名访问内部服务

11 篇文章 0 订阅
2 篇文章 0 订阅

frp + Nginx实现内网穿透 配置多个子域名访问内部服务

缘起

公司搬家,新家不能装专线,静态ip消失,改为动态IP了,这样内部服务器在外网就没法访问了,所幸我们有一台云服务器,有公网ip。这里只提示写这篇博客的原因,下面的操作是在我个人腾讯云服务器(带公网ip)和个人PC上测试使用,亲测通过。公司阿里云服务器是生产环境,拿来测试会影响线上。

环境准备
  1. 已备案的域名一个
  2. 带公网ip的云服务器
  3. pc一个
  4. frp0.30.0 frp github下载地址
  5. nginx1.10.3
云服务器安装nginx和frp
  1. 安装 frp
    这里简单说一下frp,frp是用go语言开发的内网穿透工具,分为frpc,frps。frpc是客户端,安装在内网,frps是服务端,安装在具有公网ip的服务器上,frpc和frps协商一个通讯端口,frpc启动的时候会通过这个通讯端口去连接frps,实现内网穿透(并没有去看源码,只是大致猜测是这样)。frps可以配置vhost_http_port来实现虚拟主机服务,浏览器请求 [公网ip]:[vhost_http_port],frps会把这个请求转发给frpc,frpc接收到后再转发给服务提供者,可以实现内网服务访问,具体请看:frp中文文档
    从github上下载frp,放在/home下,打开frps.ini添加如下配置:
[common]

# frp连接的端口
bind_port = 7000

# http监听端口
vhost_http_port = 8080
# https监听端口
vhost_https_port = 8443

# frp客户端连接服务端时的token 为了安全 建议添加
token = tPaALZKtCBfN6IAp

# 二级域名 后面访问的格式是a.frp.xxx.net或b.frp.xxx.net
subdomain_host = frp.xxx.net

使用命令启动:

./frps -c ./frps.ini

ps:如果云服务器有防火墙或者云安全组策略(阿里云有,在控制台),需要开放你上面用到的端口。

域名解析

解析两条A记录:frp.xxx.net*.frp.xxx.net,都指向你的云服务器ip,稍等一会,ping frp.xxx.net,如果能ping通说明解析成功

配置frpc
  1. 下载frp到本地,解压
  2. 进入解压完成的目录,修改frpc.ini为下:
[common]
# 公网ip 就是frps所在的服务器的ip
server_addr = xxx.xxx.xxx.xxx
# frps规定的连接端口
server_port = 7000
# 连接token 与frps中的token
token = tPaALZKtCBfN6isP
# 定义第一个转发
[web01]
type = http
# 本地(内网)服务的端口
local_port = 8001
# 与frps中的subdomain_host连接起来就是a.frp.xxx.net
subdomain = a

# 定义第二个转发
[web02]
type = http
# 本地(内网)服务的端口
local_port = 8002
# 与frps中的subdomain_host连接起来就是b.frp.xxx.net
subdomain = b

然后启动:

./frpc -c ./frpc.ini

如果没有报错就是启动成功。
至此,访问地址a.frp.xxx.net:8080会被转发到本地(内网)的8001端口,而访问地址b.frp.xxx.net:8080会被转发到本地(内网)的8002端口

配置nginx

我们不想要url a.frp.xxx.net:8080这类似地址中的端口怎么办?那只能使用默认端口80了,这里可以用nginx进行转发,首先在云服务器安装nginx,这个不再赘述,网上有的是资料,然后配置nginx的conf文件,名字为nginx.conf,在nginx文件夹或者/etc/nginx里面,至于在哪,取决于你用的什么安装方式,此文件中添加一个server节点,配置如下:

server {
	# 监听的80端口
	listen 80;
	# 域名配置 记得一定要加上*.frp.xxx.net这个,只加frp.xxx.net是不行的,某运维大坑张XX在这坑我2天的时间
	server_name * .frp.xxx.net frp.xxx.net;
	location / {
		proxy_pass http: //127.0.0.1:8080;
		# 这个Host的header一定要加,不然转发后frp拿不到通过哪个域名访问的,导致转发失败
		proxy_set_header Host $host;
	}
}

然后重启nginx,大功告成。

参考链接
  1. https://blog.csdn.net/MENGHUANBEIKE/article/details/100792343?utm_source=app
  2. https://www.jianshu.com/p/00c79df1aaf0
  • 2
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值