前言 {#%E5%89%8D%E8%A8%80}
在开发过程中,我们常常需要将本地开发的服务或者内网应用暴露到公网进行测试或使用。FRP (Fast Reverse Proxy)
是一款高效的内网穿透工具,可以帮助你将内网服务暴露到外部网络。而 Nginx
作为一个高性能的 Web 服务器和反向代理服务器,通常用于处理 HTTP/HTTPS 请求。在本文中,我们将介绍如何安装和使用 FRP,并结合 Nginx 配置域名和 HTTPS 访问,从而实现安全的内网穿透和远程访问。
一、FRP 简介 {#%E4%B8%80%E3%80%81frp-%E7%AE%80%E4%BB%8B}
FRP 是一个支持反向代理的内网穿透工具,通过它,你可以将位于内网的服务暴露到公网。FRP 由两部分组成:服务端(frps
)和客户端(frpc
)。frps
运行在公网服务器上,负责接收来自客户端的连接并转发到本地的内网服务,而 frpc
则运行在内网设备上,负责将本地服务映射到 FRP 服务器上。
FRP 支持多种协议,包括 HTTP、HTTPS、TCP、UDP 等,因此它在各种场景下都非常实用。
二、安装 FRP(安装方法二选一) {#%E4%BA%8C%E3%80%81%E5%AE%89%E8%A3%85-frp(%E5%AE%89%E8%A3%85%E6%96%B9%E6%B3%95%E4%BA%8C%E9%80%89%E4%B8%80)}
systemd方式来管理frps和1panel商店管理二选一即可, 先放上frp官方文档:https://gofrp.org/zh-cn/docs/setup/systemd/
方法一安装 FRP 服务器端(frps) {#%E6%96%B9%E6%B3%95%E4%B8%80%E5%AE%89%E8%A3%85-frp-%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%AB%AF%EF%BC%88frps%EF%BC%89}
使用systemd管理
1.链接到服务器终端,执行命令 sudo su
切换为root用户,可避免一些权限引起的问题 {#1.%E9%93%BE%E6%8E%A5%E5%88%B0%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%BB%88%E7%AB%AF%EF%BC%8C%E6%89%A7%E8%A1%8C%E5%91%BD%E4%BB%A4-sudo-su-%E5%88%87%E6%8D%A2%E4%B8%BAroot%E7%94%A8%E6%88%B7%EF%BC%8C%E5%8F%AF%E9%81%BF%E5%85%8D%E4%B8%80%E4%BA%9B%E6%9D%83%E9%99%90%E5%BC%95%E8%B5%B7%E7%9A%84%E9%97%AE%E9%A2%98}
2.在github选择frp版本 和自己服务器对应的架构 下载对应的frp包 {#2.%E5%9C%A8github%E9%80%89%E6%8B%A9frp%E7%89%88%E6%9C%AC-%E5%92%8C%E8%87%AA%E5%B7%B1%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%AF%B9%E5%BA%94%E7%9A%84%E6%9E%B6%E6%9E%84-%E4%B8%8B%E8%BD%BD%E5%AF%B9%E5%BA%94%E7%9A%84frp%E5%8C%85}
我这里下载linux-amd64位,目前最新版本是0.61.0
wget https://github.com/fatedier/frp/releases/download/v0.61.0/frp_0.61.0_linux_amd64.tar.gz
如国内机器访问GitHub网络不通畅 可使用下面命令 github代理服务:https://gh-proxy.com/
===========================================================
`wget https://gh-proxy.com/github.com/fatedier/frp/releases/download/v0.61.0/frp_0.61.0_linux_amd64.tar.gz`
3.解压并修改配置文件 {#3.%E8%A7%A3%E5%8E%8B%E5%B9%B6%E4%BF%AE%E6%94%B9%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6}
我这里选择把frps 可执行命令放到 /usr/local/bin 目录下。frps.toml 配置文件放到 /etc/frps/目录下
# 解压缩
tar -zxvf frp_0.61.0_linux_amd64.tar.gz
复制可执行目录frps 到/usr/local/bin目录下
==============================
cp frp_0.61.0_linux_amd64/frps /usr/local/bin/
#赋予frps 可执行权限
chmod +x /usr/local/bin/frps
新建一个存在配置文件的目录
=============
mkdir /etc/frps
把配置文件复制到/etc/frps/目录下
=====================
`cp frp_0.61.0_linux_amd64/frps.toml /etc/frps/`
修改frps.toml配置文件内容
# vim 和nano 编辑器二选一即可
vim /etc/frps/frps.toml
nano /etc/frps/frps.toml
`把下面内容粘贴进配置文件并保存`
frps.toml
bindAddr = "0.0.0.0"
# frps绑定端口 (必选)
bindPort = 7000
# frp 穿透访问内网中的网站监听端口 配合后面使用nginx做域名绑定访问
vhostHTTPPort = 7001
# frps 日志 (可选)
log.to = "/logs/frps.log"
# frps 日志等级 (可选)
log.level = "info"
# frps 日志存放天数 (可选)
log.maxDays = 15
验证
===
auth.method = "token"
auth.token = "123321"
`#如需要web面板 把下面这块内容也加进配置文件
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "admin"
webServer.password = "123456"`
此处bingdPort端口7000 记得防火墙放行哦 ( 如需要访问web面板 webServer.port 的7500也需要放行
4.配置 systemd 守护进程 并开启开机自启 {#4.%E9%85%8D%E7%BD%AE-systemd-%E5%AE%88%E6%8A%A4%E8%BF%9B%E7%A8%8B-%E5%B9%B6%E5%BC%80%E5%90%AF%E5%BC%80%E6%9C%BA%E8%87%AA%E5%90%AF}
创建 frps.service 文件
使用文本编辑器 在 /etc/systemd/system
目录下创建一个 frps.service
文件,用于配置 frps 服务。
# 二选一
vim /etc/systemd/system/frps.service
nano etc/systemd/system/frps.service
`粘贴下面内容 保存并退出`
frps.service
[Unit]
# 服务名称,可自定义
Description = frp server
After = network.target syslog.target
Wants = network.target
\[Service\]
Type = simple
启动frps的命令,需修改为您的frps的安装路径,即上面第3步的路径
===================================
ExecStart = /usr/local/bin/frps -c /etc/frps/frps.toml
`[Install]
WantedBy = multi-user.target
`
使用 systemd 命令管理 frps 服务
# 启动frp
sudo systemctl start frps
# 停止frp
sudo systemctl stop frps
# 重启frp
sudo systemctl restart frps
# 查看frp状态
sudo systemctl status frps
方法二安装 FRP 服务器端(frps) {#%E6%96%B9%E6%B3%95%E4%BA%8C%E5%AE%89%E8%A3%85-frp-%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%AB%AF%EF%BC%88frps%EF%BC%89}
使用1panel商店一键安装,前提是服务器已经安装好1panel面板
应用商店frps服务端 点击安装即可
安装完成后在已安装中找到frps服务端 点击进入安装目录
进入安装目录后找到data目录下frps.toml文件做以下修改
新增一行 vhostHTTPPort = 7001 即可 点击保存
保存后 到应用商店已安装 重启frps服务端使刚才修改的配置生效即可
应用商店安装方式默认打开frps的web面板了 端口为7500。
面板方式配置nginx {#%E9%9D%A2%E6%9D%BF%E6%96%B9%E5%BC%8F%E9%85%8D%E7%BD%AEnginx}
我这里教程使用是1panel面板,感谢小张 提供的1panel面板来做本教程使用
1.新增网站,注意不要忘记解析域名 {#1.%E6%96%B0%E5%A2%9E%E7%BD%91%E7%AB%99%EF%BC%8C%E6%B3%A8%E6%84%8F%E4%B8%8D%E8%A6%81%E5%BF%98%E8%AE%B0%E8%A7%A3%E6%9E%90%E5%9F%9F%E5%90%8D}
说明: 代理ip 写127.0.0.01:7001也可。因为有些人环境差异(docker不同容器网络不通等,故此处写了服务器公网ip)
2.申请ssl,配置https访问 {#2.%E7%94%B3%E8%AF%B7ssl%EF%BC%8C%E9%85%8D%E7%BD%AEhttps%E8%AE%BF%E9%97%AE}
到此服务端已经配置完成。 如果你使用的不是1panel面板,那么使用nginx配置即可, 面板最终操作还是会生成nginx.conf配置文件。
说明: 此处域名配置泛解析是为了方便使用,当然也可以配置具体的二级域名。后期客户端使用多个域名时,在域名设置中新增即可
手搓nginx配置文件(和上面面板配置nginx二选一即可) {#%E6%89%8B%E6%90%93nginx%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6(%E5%92%8C%E4%B8%8A%E9%9D%A2%E9%9D%A2%E6%9D%BF%E9%85%8D%E7%BD%AEnginx%E4%BA%8C%E9%80%89%E4%B8%80%E5%8D%B3%E5%8F%AF)}
server_name 后面的xxxx.xxx.com换成自己域名即可,可以写多个域名也可以写泛域名
ssl_certificate 和 ssl_certificate_key 改为自己的ssl证书路径
server {
listen 80 ;
listen 443 ssl http2 ;
server_name xxxx.xxx.com;
index index.php index.html index.htm default.php default.htm default.html;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Real-IP $remote_addr;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
access_log /www/sites/frp-all/log/access.log main;
error_log /www/sites/frp-all/log/error.log;
if ($scheme = http) {
return 301 https://$host$request_uri;
}
ssl_certificate /www/sites/frp-all/ssl/fullchain.pem;
ssl_certificate_key /www/sites/frp-all/ssl/privkey.pem;
ssl_protocols TLSv1.3 TLSv1.2 TLSv1.1 TLSv1;
ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:!aNULL:!eNULL:!EXPORT:!DSS:!DES:!RC4:!3DES:!MD5:!PSK:!KRB5:!SRP:!CAMELLIA:!SEED;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
error_page 497 https://$host$request_uri;
proxy_set_header X-Forwarded-Proto https;
add_header Strict-Transport-Security "max-age=31536000";
`location ^~ / {
proxy_pass http://127.0.0.1:7001;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
add_header X-Cache $upstream_cache_status;
add_header Cache-Control no-cache;
proxy_ssl_server_name off;
proxy_ssl_name $proxy_host;
add_header Strict-Transport-Security "max-age=31536000";
}
}
`
windows 客户端使用 {#windows-%E5%AE%A2%E6%88%B7%E7%AB%AF%E4%BD%BF%E7%94%A8}
下载frpc 客户端,github提供的压缩包里面同时包含frps服务端 和frpc客户端了
解压后修改frpc.toml配置文件, 记得修改为自己的内容
frpc.toml
serverAddr = "111.111.111.111"
serverPort = 7000
auth.method = "token"
auth.token = "123321"
`[[proxies]]
name = "test"
type = "http"
localIP = "127.0.0.1"
localPort = 8082
customDomains = ["test.frp.xxx.com"]`
在当前目录输入cmd打开黑窗口后执行
frpc -c frpc.toml
看到 start proxy success frpc启动成功后访问域名
到此教程就结束了
如果windows客户端需要开机自启frpc可参考另一篇文章: https://www.wxy97.com/archives/39