MENU

使用frp配置内网穿透

December 20, 2017 • Linux

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

准备工作

  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这个平台版本。解压后的文件如下

.
├── frpc #客户端程序
├── frpc_full.ini
├── frpc.ini # 客户端配置文件
├── frps #服务端程序
├── frps_full.ini
├── frps.ini #服务端配置文件
└── LICENSE

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

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 的反向代理功能,配置如下:

安装客户端

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

[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一键包,所以最终填写后的虚拟主机配置文件为

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来测试看看是否可以正常的访问。