基于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反向代理不仅提升体验,也是未来统一接入网关建设的基础

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/81307.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

完美中国制度流程体系建设(70页PPT)(文末有下载方式)

资料解读:《完美中国制度流程体系建设》 详细资料请看本解读文章的最后内容。 该文档围绕完美中国制度流程体系建设展开,从风险管理流程等前期工作切入,全面剖析企业制度流程体系框架,结合案例指出常见问题,评估完美公…

计算机组成原理实验(5) 堆栈寄存器实验

实验五 堆栈寄存器实验 一、实验目的 1、熟悉堆栈概念 2、熟悉堆栈寄存器的组成和硬件电路 二、实验要求 按照实验步骤完成实验项目,对4个堆栈寄存器进行读出、写入数据操作。 三、实验说明 3.1 堆栈寄存器组实验构成(图3-1) 本系统…

RAGFlow报错:ESConnection.sql got exception

环境: Ragflowv0.17.2 问题描述: RAGFlow报错:ESConnection.sql got exception _ming_cheng_tks, 浙江, operatorOR;minimum_should_match30%) 2025-04-25 15:55:06,862 INFO 244867 POST http://localhost:1200/_sql?formatjson […

鼠标滚动字体缩放

在VsCode中编辑文件时,有时候发现Ctrl鼠标滚轮并不能缩放字体,下面是启用这个功能的方法。 第一步: 进入设置,可以从左下角按钮菜单进入,也可以使用【Ctrl,】。 第二步: 启用鼠标滚轮缩放功能 第三步&…

深度学习·经典模型·VisionTransformer

VIT embedding处理与标准的Transformer不同,其他基本一致 Embedding Graph: ( H , W , C ) (H,W,C) (H,W,C) Patch: ( N , P 2 C ) (N,P^2C) (N,P2C),其中 N H ∗ W P 2 N\frac{H*W}{P^2} NP2H∗W​, P P P是patch的大小 注意的是,论文了保留与Bert的…

Python Selenium 完全指南:从入门到精通

Python Selenium 完全指南:从入门到精通 📚 目录 环境准备与基础入门元素定位与交互操作等待机制与异常处理面向对象封装与框架设计进阶技巧与最佳实践性能优化与调试技巧实战案例分析 环境准备与基础入门 1. 安装 Selenium 与浏览器驱动 安装 Selen…

基于ffmpeg的音视频编码

1 音频编码 本质上是由pcm文件转到一个协议文件 比如说aac协议 1.1 音频基本知识回归 比特率 比特率是指单位时间内传输或处理的比特(bit)数量,通常用 bps(bits per second,比特每秒)来表示。它是衡量数…

BT137-ASEMI机器人功率器件专用BT137

编辑:LL BT137-ASEMI机器人功率器件专用BT137 型号:BT137 品牌:ASEMI 封装:TO-220F 批号:最新 引脚数量:3 封装尺寸:如图 特性:双向可控硅 工作结温:-40℃~150℃…

攻防世界 dice_game

dice_game ​​​​​​dice_game (1) motalymotaly-VMware-Virtual-Platform:~/桌面$ file game game: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]254…

Astral Ascent 星界战士(星座上升) [DLC 解锁] [Steam] [Windows SteamOS macOS]

Astral Ascent 星界战士(星座上升) [DLC 解锁] [Steam] [Windows & SteamOS & macOS] 需要有游戏正版基础本体,安装路径不能带有中文,或其它非常规拉丁字符; DLC 版本 至最新全部 DLC 后续可能无法及时更新文章…

git中reset和checkout的用法

git reset:重置分支的历史与工作区​ 核心作用​​:移动当前分支的指针(即改变分支的历史),并可选地修改暂存区(Index)和工作目录(Working Directory)。常用于撤销提交或…

权限提升—Linux提权内核溢出漏洞辅助项目

前言 今天开启Linux提权的篇章,主要是讲一下Linux的内核漏洞提权,利用方式和Windows系统漏洞提权差不多,也是网上的项目扫一下,然后根据漏洞编号去找exp即可。 信息收集 首先要说一下Linux用户的权限划分。 系统用户&#xff…

React Native Redux 使用指南 redux-toolkit

React Native Redux 使用指南 redux-toolkit 一个可预测和可维护的全局状态管理 JavaScript 库 Redux 和 React-Redux以及**reduxjs/toolkit 的关系:** Redux、React-Redux、reduxjs/toolkit 是 React 生态中状态管理的「黄金三角组合」,它们的关系可…

JVM——Java 虚拟机是如何加载 Java 类的?

引入 在 Java 世界的底层运作中,类加载机制扮演着一个既神秘又关键的角色。它就像是一个精心设计的舞台幕后 machinery,确保了 Java 程序能够顺利运行。今天,我们就深入探索 Java 虚拟机(JVM)是如何加载 Java 类的。 …

清华团队提出时序聚类数据库内高效方案,已被SIGMOD 2025接收

时间序列聚类是挖掘物联网等场景下频繁模式的关键技术,但现有SOTA方法(如K-Shape)面临两大瓶颈:1)传统数据库因LSM-Tree存储导致时间戳无序,难以直接支持高效聚类;2)跨时间范围查询需…

【阿里云大模型高级工程师ACP学习笔记】2.8 部署模型

一、学习目标 特别说明:这一章节是2025年3月官方重点更新的部分,几乎对内容重新翻新改造了一遍,重点突出了对于如何结合不同的阿里云产品来部署大模型进行了更加详细的介绍和对比,这里整理给大家,方便大家参考。 在备考阿里云大模型高级工程师ACP认证的过程中,学习《2.8 …

第T10周:数据增强

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 从 tensorflow.keras 中导入 layers 模块,包含了常用的神经网络层,用来搭建模型结构。 检查并列出系统中可用的物理 GPU 设备&#xff…

uniapp 支付宝小程序自定义 navbar 无效解决方案

如图: uniapp编译到支付宝小程序隐藏默认的导航栏失效了 解决方案: 在 pages.json 文件中找到 globalStyle 中加入以下代码: "mp-alipay": {"transparentTitle": "always","titlePenetrate":…

vue2 el-element中el-select选中值,数据已经改变但选择框中不显示值,需要其他输入框输入值才显示这个选择框才会显示刚才选中的值

项目场景&#xff1a; <el-table-column label"税率" prop"TaxRate" width"180" align"center" show-overflow-tooltip><template slot-scope"{row, $index}"><el-form-item :prop"InquiryItemList. …

centos7 离线安装python3 保留python2

一、事前准备&#xff1a; &#xff08;1&#xff09;查看centos具体版本 cat /etc/redhat-releaseCentOS Linux release 7.4.1708 (Core) &#xff08;2&#xff09;查看linux中当前python版本 centos7 默认安装python2.7.5 &#xff08;3&#xff09;查看python3的依赖&#…