工作中使用最多的穿透工具 Frp , 解决了很多问题,使用起来也很简单,这次就来记录一下如何将 frp 和 nginx 搭配起来使用
# 安装 Frp
Frp Github 官方文档
找到 Releases
下载最新版,这里是 v0.54.0
, 需要根据系统版本下载对应版本
下载之后解压到 frp 目录下,主要有以下几个文件, frpc
是客户端, frps
是服务端, frpc.toml
是客户端配置文件, frps.toml
是服务端配置文件
[root@VM-12-5-opencloudos frp]# ls | |
frpc frpc.toml frps frps.toml LICENSE |
# 配置 Frp 服务端
配置 frp 服务端很简单,编辑 frps.toml
, 如果只是简单的使用,输入以下 3 行即可
bindPort = 7000 | |
vhostHTTPPort = 7070 | |
auth.token = "这里输入你的密码" |
bindPort
指监听的端口,默认是 7000, 也可以自己改成任意端口vhostHTTPPort
指 http 代理的端口,这里我设置为 7070auth.token
是客户端链接的 token, 可以理解为密码,客户端也要设置
# 配置 Nginx
这里我写了一个 Nginx 的配置文件,可以很方便地将请求代理到 Frp 服务
server { | |
listen 80; | |
server_name *.域名.com; | |
client_max_body_size 20m; | |
location / { | |
proxy_pass http://127.0.0.1:7070; | |
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 10m; | |
proxy_send_timeout 10m; | |
proxy_read_timeout 10m; | |
} | |
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; | |
} | |
} |
# 配置 Frp 客户端
客户端配置比服务端稍复杂一点,如果只是简单使用也非常简单
默认配置如下:
serverAddr = "127.0.0.1" | |
serverPort = 7000 | |
[[proxies]] | |
name = "test-tcp" | |
type = "tcp" | |
localIP = "127.0.0.1" | |
localPort = 22 | |
remotePort = 6000 |
这里需要把 serverAddr
改成服务端的 ip, serverPort
改成服务端的监听端口,另外再加一个 auth.token
, 需要和服务端的一样
以下是我的配置
serverAddr = "124.xxx.xxx.xxx" | |
serverPort = 7000 | |
auth.token = "xxxxxxxxx" | |
[[proxies]] | |
name = "web" | |
type = "http" | |
localIP = "127.0.0.1" | |
localPort = 8002 | |
customDomains = ["web.dev.域名.cn"] |
将本地 8002 端口代理到服务端的 7070 端口,并且经过 Nginx 的反向代理,访问域名,即访问的本机的 8002 端口.
# 启动 Frp 服务端
一条命令即可启动服务端
./frps -c ./frps.toml |
这里直接使用 systemd
来管理,并设置开机启动
# /etc/systemd/system/frps.service | |
[Unit] | |
Description = frp server | |
After = network.target syslog.target | |
Wants = network.target | |
[Service] | |
Type = simple | |
ExecStart = /root/frp/frps -c /root/frp/frps.toml | |
[Install] | |
WantedBy = multi-user.target |
systemctl start frps | |
systemctl enable frps |
# 结束
以上就是使用 Frp+Nginx 来内网穿透的配置。让开发变得更简单!