2026/5/14
FRP 与云端 Nginx:本地服务公网入口
记录 frps/frpc 如何把本地 Debian 服务转发到云服务器,并由云端 Nginx 统一域名入口、备案 fallback 和临时端口收敛。
本文目录
这篇只记录云端入口和 FRP。具体应用如何运行放在 Debian 服务文章,MyBlog 更新放在博客部署文章。
目标结构
公网用户
-> 云服务器 Nginx 80/443
-> 127.0.0.1:9001 / 9002 / 9003
-> frps
-> frpc
-> 本地 Debian 服务
当前映射示例:
| 服务 | 本地端口 | 云端临时端口 | 后续域名 |
|---|---|---|---|
| n8n | 5678 | 9001 | n8n.example.com |
| MyBlog | 18080 | 9002 | example.com |
| 小程序服务 | 8000 | 9003 | mini.example.com |
备案和 DNS 完成前可以临时使用 IP + 端口。正式后应关闭临时端口,只保留 80/443。
frps 配置
bindPort = 7000
auth.method = "token"
auth.token = "<frp-token>"
allowPorts = [
{ start = 9001, end = 9009 },
{ start = 2222, end = 2222 }
]
webServer.addr = "127.0.0.1"
webServer.port = 7500
webServer.user = "<dashboard-user>"
webServer.password = "<dashboard-password>"
要点:
allowPorts限制客户端能开的端口。- dashboard 只监听本机。
auth.token不公开。
systemd:
[Service]
ExecStart=/usr/local/bin/frps -c /etc/frp/frps.toml
Restart=always
RestartSec=3
frpc 配置
serverAddr = "<cloud-ip>"
serverPort = 7000
auth.method = "token"
auth.token = "<frp-token>"
[[proxies]]
name = "n8n"
type = "tcp"
localIP = "127.0.0.1"
localPort = 5678
remotePort = 9001
[[proxies]]
name = "myblog"
type = "tcp"
localIP = "127.0.0.1"
localPort = 18080
remotePort = 9002
[[proxies]]
name = "mini-app"
type = "tcp"
localIP = "127.0.0.1"
localPort = 8000
remotePort = 9003
检查:
sudo systemctl restart frpc
sudo journalctl -u frpc -n 80 --no-pager
云服务器:
ss -lntp | grep -E '7000|9001|9002|9003'
curl -I http://127.0.0.1:9002/
云端 Nginx
域名完成后,云 Nginx 反代到 FRP 本机端口:
server {
listen 80;
server_name example.com www.example.com;
location / {
proxy_pass http://127.0.0.1:9002;
proxy_http_version 1.1;
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 X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_connect_timeout 3s;
proxy_read_timeout 30s;
proxy_send_timeout 30s;
error_page 502 503 504 = @beian_fallback;
}
location @beian_fallback {
root /var/www/beian;
try_files /index.html =200;
}
}
备案页:
sudo mkdir -p /var/www/beian
sudo nano /var/www/beian/index.html
安全组
建议:
80/tcp 0.0.0.0/0
443/tcp 0.0.0.0/0
22/tcp 固定公网 IP 或小网段
7000/tcp 本地 Debian 出口 IP
9001/tcp 临时开放
9002/tcp 临时开放
9003/tcp 临时开放
不要开放“所有流量全端口”。
正式域名完成后删除:
9001/tcp
9002/tcp
9003/tcp
排障
502:
curl -I http://127.0.0.1:9002/
sudo journalctl -u frps -n 80 --no-pager
sudo tail -n 80 /var/log/nginx/error.log
认证失败:
frps 和 frpc 的 auth.token 不一致。
端口不允许:
remotePort 不在 allowPorts 范围内。
评论
Giscus 评论尚未配置。填写 GitHub Discussions 的仓库和分类 ID 后,这里会显示评论区。