背景

微信开发等场景需要使用公网地址,但开发者本地通常没有公网IP,需要搭建内网穿透来方便调试。通常可以使用花生壳Ngrokfrp等。花生壳需要实名认证, 需要6块钱,且使用别人服务器有一定的安全隐患。这里我们使用frp搭建自己的内网穿透服务。

需要准备材料

  1. 软件安装包
    GitHub发行版地址
  2. tcp透传服务器搭建 java 搭建穿透服务器_服务器


  • 值得注意的是 客户端和服务端版本需要保持一致。
  • 根据自己的操作系统, 通常下载上图标记的版本
  1. 需要一个域名和一台公网服务器,如果没有这两样可以劝退了,frp的基本原理就是先访问指定的公网服务器, 然后通过在服务器上frp服务端和内网机器的客户端之间通讯,完成数据转发的。其它内网穿透思路类似。

安装

无论是windows还是linux 解压之后,即可启动运行,frps是服务端,frpc是客户端,需要通过配置文件置指定客户端和服务端的通讯端口以及各种协议转发配置。

  • linux
wget https://github.com/fatedier/frp/releases/download/v0.36.2/frp_0.36.2_linux_amd64.tar.gz
tar -zxvf frp_0.36.2_linux_amd64.tar.gz
  • windows
    下载解压即可

配置文件(web)

这里只说明映射web服务器的配置方法。

  1. 客户端配置frpc.ini
[common]
# 服务器公网地址
server_addr = 8.8.8.221
# 服务器监听端口, 即客户端与服务端通讯端口
server_port = 7000

[web]
# 转发协议
type = http
# 本地应用地址
local_port = 8080
# 域名, 此域名应是正常可进行公网解析的域名
custom_domains = www.XXXX.com
  1. 服务端配置frps.ini
[common]
# 服务器监听端口, 即客户端与服务端通讯端口, 与客户端对应
bind_port = 7000
# 本地应用映射端口, 此端口会被占用, 我们访问时实际上访问的就是此端口, 然后通过客户端转发到本地服务
vhost_http_port = 8080

配置文件各操作系统通用

启动

# 服务端
./frps -c ./frps.ini
# 客户端
./frpc -c ./frpc.ini

windows启动时必须使用cmd窗口启动

拓展

实际开发中我们通常想通过80端口来访问服务器,然后转发到本地调试,但服务器的80端口通常被nginx占用,此时可以通过nginx转发的方法实现不改变其他应用, 同时使用80/443端口进行调试,即我们访问时, 先访问服务器的nginx,然后到frp server,然后到本地应用。配合以上frp配置,nginx转发配置如下:

server {
		listen 80;
		server_name www.XXXX.com;

		location / {
			proxy_redirect          off;
			proxy_set_header Host $host:$server_port;
			proxy_set_header X-Forwarded-For $remote_addr;
			client_max_body_size      20m;
			client_body_buffer_size 128k;
			proxy_connect_timeout   600;
			proxy_send_timeout      600;
			proxy_read_timeout      900;
			proxy_buffer_size       4k;
			proxy_buffers           4 32k;
			proxy_busy_buffers_size 64k;
			proxy_temp_file_write_size 64k;
			proxy_pass http://127.0.0.1:8080/;
		}
	}

官方文档

frp官方文档