工作中使用最多的穿透工具 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 来内网穿透的配置。让开发变得更简单!
