当前位置: 首页 > news >正文

基于Docker的内网穿透实战:frp 0.68 + Nginx最佳实践

在实际应用中,我们常常遇到这样的需求:

  • 家里的NAS服务器、开发环境、测试服务,需要暴露到公网访问

  • 企业内部系统,仅允许在特定域名或端口暴露,但没有公网IP

  • 多个内网应用,希望通过一个统一的外网入口访问

传统方法(如端口映射、VPN)存在种种局限。 这时候,轻量、高效、开源的 frp(Fast Reverse Proxy) 成为了解决方案的首选。

本文将以 frp 0.68为例,结合Docker容器化部署,并通过Nginx反向代理优化访问体验,完整讲解一套生产级实践方案。

1️⃣ frp适用场景概览

frp 是一款高性能的反向代理应用,主要应用于:

  • 内网穿透:将内网服务(如SSH、Web)暴露到公网

  • 远程办公:安全地访问公司内部资源

  • 异地数据同步:建立点对点连接

  • 微服务通信:跨网段通信

  • 个人项目发布:将家里的开发环境一键发布到公网展示

相较于传统VPN,frp部署简单、资源占用小,支持多种协议(TCP、UDP、HTTP、HTTPS、STCP、SUDP),尤其适合快速搭建和灵活扩展。


2️⃣ 快速部署教程(基于 micrograils/frp 镜像)

假设我们有一台云服务器,公网域名为:www.sample.com。 目标是将家中一台机器的本地Web服务(localhost:8080)安全暴露到公网。

2.1 服务端(frps)部署

① 配置 frps.toml

创建 frps.toml 文件:

bindAddr = "0.0.0.0"
bindPort = 7000vhostHttpPort = 8080auth.method = "token"
auth.token = "strong_token_here"transport.tls.force = true[webServer]
addr = "0.0.0.0"
port = 7500
user = "admin"
password = "admin"

说明

  • 监听 7000 端口接受客户端连接

  • 监听 8080 端口作为 HTTP 虚拟主机端口

  • 开启 token认证 和 TLS强制加密

  • 管理后台开放7500端口


② 启动 frps 容器

docker run -d \--name frps \-p 7000:7000 \-p 8080:8080 \-p 127.0.0.1:7500:7500 \-v $(pwd)/frps.toml:/etc/frp/frps.toml \-e FRP_MODE=server \micrograils/frp:latest

Tips

  • 管理后台7500端口只绑定127.0.0.1,避免暴露到公网

  • 容器内读取本地挂载的配置文件


2.2 客户端(frpc)部署

在本地机器(比如家庭服务器)创建 frpc.toml

serverAddr = "你的服务器公网IP或域名"
serverPort = 7000transport.tls.enable = trueauth.method = "token"
auth.token = "strong_token_here"[webServer]
addr = "0.0.0.0"
port = 7400
user = "admin"
password = "admin"[[proxies]]
name = "home-web"
type = "http"
localIP = "127.0.0.1"
localPort = 8080
customDomains = ["www.sample.com"]

③ 启动 frpc 容器(使用host网络)

docker run -d \--name frpc \--network host \-v $(pwd)/frpc.toml:/etc/frp/frpc.toml \-e FRP_MODE=client \micrograils/frp:latest

说明

  • 使用 --network host,frpc容器直接访问本机服务

  • 将本地8080端口通过frp注册到服务器

  • 绑定域名 www.sample.com


3️⃣ 优化:Server端引入前置Nginx,隐藏8080端口

frp默认的 HTTP服务使用 vhostHttpPort(比如8080), 如果直接访问,需要带端口号,如:

http://www.sample.com:8080

体验极差!

标准解决方法:在服务器上用Nginx反向代理,将80端口请求转发到8080端口。


① 安装Nginx

Ubuntu/Debian系统:

sudo apt update
sudo apt install nginx

② 配置Nginx反向代理

编辑 /etc/nginx/sites-available/default 或创建新conf:

server {listen 80;server_name www.sample.com;location / {proxy_pass http://127.0.0.1:8080;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}
}

③ 重启Nginx

sudo systemctl restart nginx

④ 测试访问

现在可以直接通过:

http://www.sample.com

优雅访问你本地服务器的Web服务啦!

(无须携带8080端口,体验更好,SEO友好)


4️⃣ 完善实践建议

在实际生产部署中,还推荐做如下优化:

项目

建议

HTTPS加密

给Nginx配置 Let's Encrypt 免费SSL证书(推荐用certbot自动续期)

防火墙加固

只允许必要端口开放,如7000/80/443,管理端口7500仅内网可访问

frp限速

根据需求在frps中配置带宽控制(bandwidth.limit)

多域名管理

支持多个customDomains,在frp配置中扩展

容灾备份

保留 frps 和 frpc 的配置文件快照


5️⃣ 小结

通过 frp + Docker + Nginx 的组合方案,我们可以:

  • 快速、安全地将内网服务暴露到公网

  • 保持访问体验优雅(无端口号访问)

  • 实现灵活的多域名、多服务映射

  • 保证通信过程加密认证,提高安全性

对于中小企业办公、远程访问、个人项目展示,这是一套成本低、扩展性强的内网穿透实战方案。

如果你的应用场景中,需要更多定制(比如双向认证、动态注册等),frp也提供了丰富的扩展功能,值得深入挖掘!


📢 最后提示

  • 本文所有部署基于 frp 0.68版,不同版本请注意配置项差异

  • 示例用镜像 micrograils/frp,推荐搭配Docker统一管理,简洁高效

  • Nginx反向代理不仅提升体验,也是未来统一接入网关建设的基础

相关文章:

  • 【大模型面试每日一题】Day 4:低资源语言建模方案
  • spring boot中@Validated
  • TIME_WAIT状态+UDP概念及模拟实现服务器和客户端收发数据
  • Java Properties 遍历方法详解
  • 【C++】频繁分配和释放会产生内存碎片
  • Can‘t create thread to handle bootstrap
  • 排序算法——选择排序
  • Vue3 后台管理系统模板
  • 解决STM32待机模式无法下载程序问题的深度探讨
  • transformer-实现解码器Decoder
  • 【Vue2】4-开发者工具安装
  • Splunk 使用Role 实现数据隔离
  • C++23 std::invoke_r:调用可调用 (Callable) 对象 (P2136R3)
  • 基于Qt开发的前景分析
  • 楼宇智能化四章【期末复习】
  • Windows服务器部署全攻略:Flask+Vue+MySQL跨平台项目实战(pymysql版)
  • 乐西高速大凉山1号隧道实现双幅贯通:成都到昭觉9小时变3.5小时
  • C#扩展方法与Lambda表达式基本用法
  • 大模型——使用 StarRocks 作为向量数据库
  • 2025年“深圳杯”数学建模挑战赛C题-分布式能源接入配电网的风险分析
  • 五大光伏龙头一季度亏损超80亿元,行业冬天难言结束
  • 专访 | 杜普兰蒂斯:爱上中国文化,下一步努力提升速度
  • 陕西省副省长窦敬丽已任宁夏回族自治区党委常委、统战部部长
  • 打造全域消费场景,上海大世界百个演艺娱乐新物种待孵化
  • 上海74岁老人宜春旅游时救起落水儿童,“小孩在挣扎容不得多想”
  • 助力企业高质量出海,上海静安发放服务包、服务券