樂猪先生

使用frp配置内网穿透

2017-12-20

由于准备开发微信公众号的业务。。。。

准备工作

  1. 首先你需要一台带有公网IP地址的服务器
  2. 你需要一个域名,比如hashx.cn。

外网域名配置

  1. 首先A记录解析frp.hashx.cn到你的公网服务器上
  2. 这步可选。在泛解析一个域名。比如当你访问abc.frp.hashx.cn或者xyz.frp.hashx.cn也可以访问到你的服务器。这个当你有多人开发的时候很实用。如果自己一个人开发就解析一个就可以了。
    frp_dns.png

安装服务端

服务端的安装非常的简单,只需要从Github上下载对应的平台程序后解压就可以了。
这里由于我使用的公网服务器是CentOS7,所以下载了frp_0.13.0_linux_amd64.tar.gz这个平台版本。解压后的文件如下

1
2
3
4
5
6
7
8
.
├── frpc #客户端程序
├── frpc_full.ini
├── frpc.ini # 客户端配置文件
├── frps #服务端程序
├── frps_full.ini
├── frps.ini #服务端配置文件
└── LICENSE

对于服务端的配置我们这里只需要使用frps和frps.ini就可以了。下面我贴出我的配置文件

1
2
3
4
5
6
7
8
9
10
11
12
bind_port = 7000
vhost_http_port = 8080
subdomain_host = frp.hashx.cn #这个是定义配置了子域名,在frpc中直接配置subdomain选项就可是使用wx.frp.hashx.cn这样的域名了
privilege_token = ooxx # 这里是为了安全的考虑,加入一个身份认证的 token 配置,这里只要服务端和客户端配置一致即可
dashboard_port = 7500
dashboard_user = root
dashboard_pwd = admin_codelaradock
log_file = ./frps.log
log_level = info
log_max_days = 3

Nginx 反向代理配置

其中,因为我的服务器上有相关其他的程序共用,80 端口上交给了 nginx ,而在微信的接口配置时,只能是 80 or 443 端口,因此,这里我还借用了 nginx 的反向代理功能,配置如下:

1
2

安装客户端

由于我本地开发机是使用的Vagrant,所以我需要将上面下载的程序中的frpcfrpc.ini拷贝到vagrant虚拟机中进行配置就ok了。配置文件如下

1
2
3
4
5
6
7
8
9
10
11
12
[common]
server_addr = frp.hashx.cn
server_port = 7000
privilege_token = ooxx
[web]
type = http
local_port = 80
;正是在frps中配置了subdomain_host所以这里只需要指定subdomain作为前缀
;最终在微信公众后台配置的域名为wx.frp.hashx.cn
subdomain = wx

配置结束后执行运行./frpc -c frpc.ini进行启动。

如果你是使用的wamp集成开发环境可以参考这篇文章里作者的配置

配置开发环境虚拟主机

由于我们使用了域名作为主机头的方式,所以我们本地开发环境也需要配置一个虚拟主机,虚拟主机的server_name就是上面的微信后台填写的域名wx.frp.hashx.cn。我本地是使用的lnmp一键包,所以最终填写后的虚拟主机配置文件为

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
server
{
listen 80;
#listen [::]:80;
server_name wx.frp.keer.me ;
index index.html index.htm index.php default.html default.htm default.php;
root /srv/code/frp;
include none.conf;
#error_page 404 /404.html;
# Deny access to PHP files in specific directory
#location ~ /(wp-content|uploads|wp-includes|images)/.*\.php$ { deny all; }
include enable-php.conf;
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 12h;
}
location ~ /.well-known {
allow all;
}
location ~ /\.
{
deny all;
}
access_log /home/wwwlogs/wx.frp.hashx.cn.log;
}

作为测试你可以到/srv/code/frp(根据你的nginx配置可能有所不同)下面新建一个index.php来测试看看是否可以正常的访问。

扫描二维码,分享此文章