公网 FRPS 暴露的端口不是 80/443,而内网本地服务仍然是 80/443 时,FRPS链路图
› 社区话题 › Linux/macOS 与自动化运维 › FRP 与 NPS 穿透技术深度解析:通信端口、流量链路与最佳实践 › 公网 FRPS 暴露的端口不是 80/443,而内网本地服务仍然是 80/443 时,FRPS链路图
2025年7月20日 - 下午11:43 #815
追光
管理员
当 公网 FRPS 暴露的端口不是 80/443,而内网本地服务仍然是 80/443 时,链路依然是通过 FRPS 的 remote_port 或 vhost_http_port 进行入口 → 隧道转发 → FRPC 转发到本地端口。
跳转不是“HTTP 重定向”,而是 FRP 隧道层转发。而为了去掉端口号,我们一般都用nginx做反向代理,链路如下:
用户 → 公网Nginx (80/443) → 反代到 FRPS (8080) → 隧道 → FRPC → 内网服务 (80/443)这种情况下,链路多了一层 公网 Nginx 反向代理,它的作用是 接管标准端口 80/443,让用户无感知地访问网站。
✅
完整流量链路(详细)
[ 用户浏览器 ]
│
│ TCP:80 (HTTP 请求) 或 TCP:443 (HTTPS 请求)
▼
[ 公网 Nginx ]
│
│ (反代到 FRPS 8080)
│ proxy_pass http://127.0.0.1:8080;
▼
[ FRPS ]
│
│ (通过 bind_port = 7000 隧道发送给 FRPC)
│
▼
[ FRPC ]
│
│ (转发到内网服务 127.0.0.1:80)
▼
[ Nginx 内网服务 ]✔ 从用户角度:访问域名不带端口(80/443),但实际上 FRPS 监听的是 8080,通过反代隐藏了端口差异。
✅
这个链路的特点
公网 80/443 由外部 Nginx 接管,你可以加:
SSL(HTTPS 证书)
WAF(安全防护)
HTTP/2、缓存
FRPS 无需直接占用 80/443,避免与其他服务冲突。
FRP 仍然用隧道传输(控制通道 bind_port),公网 Nginx 只是入口代理。
✅
配置要点
公网 Nginx 反代配置
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}FRPS 配置
[common]
bind_port = 7000
vhost_http_port = 8080FRPC 配置
[common]
server_addr = x.x.x.x
server_port = 7000
[web]
type = http
local_port = 80
custom_domains = example.com✅
链路性能注意点
额外一层 Nginx 反代会增加 一次 TCP 握手,但性能损耗非常低。
如果使用 HTTPS,建议 SSL 终止在公网 Nginx,FRPS 和 FRPC 之间走纯 HTTP,减少加解密负担。
可以开启 Nginx 的 gzip + 缓存,减少带宽压力。