一、环境搭建
第一步:连接到你的云服务器
我这使用的是 SSH连接。
第二步:更新系统软件包(保持系统最新)
1 | apt update && apt upgrade -y |
作用:更新软件源列表并升级所有已安装的软件包,确保系统安全和稳定。
第三步:安装 frp 服务端 (frps)
frp 是一个轻量级的内网穿透工具,服务端运行在你的云服务器上,负责接收公网请求并转发到内网。
3.1 下载 frp
去frp发布页查询目前最新版本,然后复制对应版本的文件连接,使用以下命令进行下载。
1 | cd /root |
作用:从 GitHub 下载 frp 0.68.0 版本的 Linux 压缩包。
由于服务器网络问题,我这里选用的是
1 | wget https://ghproxy.net/https://github.com/fatedier/frp/releases/download/v0.68.0/frp_0.68.0_linux_arm64.tar.gz |
3.2 解压
1 | tar -zxvf frp_0.68.0_linux_amd64.tar.gz |
作用:解压得到 frp_0.68.0_linux_amd64 文件夹。
3.3 进入文件夹并查看内容
1 | cd frp_0.68.0_linux_amd64 |
你会看到 frps 和 frps.toml 等文件。frps 是服务端程序,frps.toml 是配置文件。
3.4 配置 frps
1 | nano frps.toml |
删除原有内容,输入以下内容:
1 | bindPort = 7000 |
按 Ctrl+X,按 Y,按 Enter 保存。
作用:
bindPort = 7000:frp 客户端(你内网的 frpc)连接此端口建立隧道。vhostHTTPPort = 8080:frp 将接收到的 HTTP 流量转发到此端口,之后由 Nginx 接收。vhostHTTPSPort = 8443:类似,用于 HTTPS 流量。
3.5 测试运行 frps
1 | ./frps -c frps.toml |
如果看到 start frps success 字样,按 Ctrl+C 停止。测试通过后,我们把它做成系统服务。
3.6 创建 systemd 服务(实现开机自启)
1 | nano /etc/systemd/system/frps.service |
粘贴以下内容:
1 | [Unit] |
保存退出。
作用:让 systemd 管理 frps,开机自动启动,异常退出时会自动重启。
3.7 启动 frps 服务
1 | systemctl daemon-reload |
作用:重新加载 systemd 配置,设置 frps 开机自启并立即启动。
3.8 检查状态
1 | systemctl status frps |
应该显示 active (running)。
确认状态显示 active (running) 后,按 q 退出。
第四步:安装 Nginx(作为公网入口)
Nginx 是一个高性能的 Web 服务器和反向代理。这里它负责接收来自公网的 HTTP/HTTPS 请求,并根据域名转发给 frp 的虚拟主机端口。
4.1 安装 Nginx
1 | apt install nginx -y |
4.2 验证 Nginx 是否运行
1 | systemctl status nginx |
浏览器访问 http://120.79.200.141,应该能看到 Nginx 欢迎页。
第五步、在内网服务器上安装frp客户端
假设你已经可以通过 SSH 登录到 192.168.3.69(或者在那台机器上直接操作)。
内网服务器通常需要通过本地网络访问。假设你有一台电脑在内网,可以用 SSH 连接 192.168.3.69。
1 | cd /root |
只需要 frpc 和 frpc.toml两个文件即可。
至此环境搭建已经完成。
二、开始配置内网穿透
假设你有两个网站:site1.example.com 和 site2.example.com(请替换为你自己的真实域名)。
1、域名解析
去你的域名服务商(如阿里云、Cloudflare)添加 A 记录:
- 主机记录
site1→ 记录值120.79.200.141 - 主机记录
site2→ 记录值120.79.200.141
(如果你用的是二级域名如 site1.example.com,主机记录填 site1)
等待 DNS 生效(通常几分钟到几小时)。
然后继续完成以下步骤:
2、在云服务器创建网站的配置文件
创建配置文件,第一个网站:site1.example.com
连接云服务器,执行:
1 | nano /etc/nginx/sites-available/site1 |
粘贴以下内容(注意把 site1.example.com 换成你的域名):
1 | server { |
保存退出。
作用:当用户访问 site1.example.com 时,云服务器上的Nginx 将请求转发到家里的 8080 端口(即 frps 监听的 HTTP 虚拟主机端口)。
创建第二个网站的配置文件
1 | nano /etc/nginx/sites-available/site2 |
内容类似,把 server_name 换成第二个域名。
3、启用站点
1 | ln -s /etc/nginx/sites-available/site1 /etc/nginx/sites-enabled/ |
作用:在 sites-enabled 目录创建符号链接,Nginx 会加载这些配置。
4、测试 Nginx 配置语法
1 | nginx -t |
如果显示 syntax is ok 和 test is successful,则配置正确。
5、重载 Nginx 使配置生效
1 | systemctl reload nginx |
6、开放云服务器防火墙和安全组
6.1 检查 ufw 状态
1 | ufw status |
如果显示 inactive,跳过;如果 active,则需要放行端口。
6.2 放行云服务器的必要端口(如果 ufw 开启)
1 | ufw allow 22/tcp # SSH |
然后 ufw reload。
6.3 阿里云安全组设置(非常重要)
登录阿里云控制台,找到你的实例 → 安全组 → 配置规则 → 添加入方向:
- 端口:80/80,授权对象:0.0.0.0/0
- 端口:443/443,授权对象:0.0.0.0/0
- 端口:7000/7000,授权对象:0.0.0.0/0
作用:允许公网访问这些端口。
在内网服务器(192.168.3.69)上配置 frp 客户端 (frpc)
假设你已经可以通过 SSH 登录到 192.168.3.69(或者在那台机器上直接操作)。
内网服务器通常需要通过本地网络访问。假设你有一台电脑在内网,可以用 SSH 连接 192.168.3.69。
1、 配置 frpc.toml
打开frpc.toml文件
1 | nano frpc.toml |
输入以下内容(注意修改域名和本地端口):
1 | serverAddr = "120.79.200.141" |
保存退出。
作用:告诉 frpc 连接到你的云服务器,并将指定域名的 HTTP 请求转发到内网服务器的对应端口。
2、测试运行 frpc
1 | ./frpc -c frpc.toml |
如果看到 start proxy success,说明隧道建立成功。按 Ctrl+C 停止,然后我们让它后台运行。
3、使用 systemd 管理 frpc(可选,推荐)
类似云服务器,创建服务文件:
1 | nano /etc/systemd/system/frpc.service |
内容:
1 | [Unit] |
启动:
1 | systemctl daemon-reload |
第八步:测试访问
在内网服务器上确保你的网站服务正在运行(例如 python -m http.server 3000 测试)。然后在外网用浏览器访问 http://site1.example.com,应该能看到你的网站内容。
常见问题排查
- 访问不了:检查云服务器安全组是否开放 80 端口;检查 Nginx 配置中的
server_name是否与域名完全一致;检查 frpc 日志(journalctl -u frpc -f)。 - 502 Bad Gateway:frps 未运行或端口不对;检查 frps 的
vhostHTTPPort是否 8080,Nginx 的proxy_pass是否指向http://127.0.0.1:8080。 - 404 Not Found:frpc 配置中的
customDomains可能未匹配上,或者内网网站服务未启动。
移动frp和配置文件到指定目录启动
(这一步用不着,只是我喜欢把软件放在指定目录,方便管理)
移动 frpc 可执行文件和配置文件
假设你当前 frpc 在 /home/risespark/frp/ 目录下:
我想把frpc和配置文件移动到指定目录"/mnt/1T-disk/DIY-docker配置文件/我的阿里云服务器-内网穿透/"
1 | # 移动 frpc 可执行文件到新目录 |
创建一个软链接到简单路径,这样既保留你的目录结构,又避免 systemd 解析问题
1 | # 1. 创建一个无空格无中文的软链接目录 |
修改 systemd 服务文件
1 | sudo nano /etc/systemd/system/frpc.service |
1 | [Unit] |
保存退出。
1 | # 3. 确保 frpc 可执行权限 |
这样应该不会再报错,并且配置文件和程序仍然实际存储在你指定的中文目录下(通过软链接访问)。
验证
1 | sudo journalctl -u frpc -n 20 |
应该看到 start proxy success。
然后测试访问网站。



