资讯动态

基于frp与Nginx的HTTPS子域名内网穿透实战

发布时间:2026/8/15 3:08:04 来源:尧图企业网站定制
1. 为什么需要内网穿透很多朋友可能都遇到过这样的困扰家里或者公司内网搭建了一些服务比如NAS存储、智能家居控制面板、开发测试环境等但这些服务只能在局域网内访问。一旦出门在外想查看家里的监控或者访问公司内部系统就变得非常困难。这就是内网穿透要解决的问题。我去年帮朋友的公司部署了一套内部管理系统他们办公室用的是动态IP每次重启路由器公网IP就会变导致远程办公非常不便。后来我们采用了frpNginx的方案完美解决了这个问题。现在他们的员工在任何地方都能安全访问内网服务而且用的是熟悉的域名方式访问体验和访问普通网站完全一样。2. 环境准备与工具介绍2.1 硬件与网络需求要实现这个方案你需要准备以下几样东西一台具有公网IP的云服务器阿里云、腾讯云等都行一个已经备案的域名需要暴露的内网服务比如本地开发的Web应用内网中能够长期运行的设备比如树莓派、旧电脑等我建议云服务器选择1核2G以上的配置因为Nginx和frp对资源消耗都不大。域名备案通常需要3-20个工作日建议提前准备。内网设备最好能7×24小时运行确保服务持续可用。2.2 软件工具选择frp是一个用Go语言开发的高性能反向代理工具它分为服务端(frps)和客户端(frpc)。服务端运行在公网服务器上客户端运行在内网设备上。两者通过TCP长连接保持通信当外部请求到达服务端时frps会通过这个长连接将请求转发给frpc再由frpc转发给内网服务。Nginx则是我们熟知的Web服务器和反向代理工具。在这里它主要承担三个角色将HTTP请求转发到frp服务端口处理HTTPS加密通信实现基于域名的虚拟主机路由3. frp服务端配置详解3.1 安装与基础配置首先在云服务器上下载frp。我习惯放在/opt目录下wget https://github.com/fatedier/frp/releases/download/v0.30.0/frp_0.30.0_linux_amd64.tar.gz tar -zxvf frp_0.30.0_linux_amd64.tar.gz cd frp_0.30.0_linux_amd64编辑frps.ini配置文件[common] bind_port 7000 vhost_http_port 8080 vhost_https_port 8443 token your_secure_token_here subdomain_host frp.yourdomain.com dashboard_port 7500 dashboard_user admin dashboard_pwd admin123这里有几个关键参数需要注意bind_port是frp控制通道端口保持默认7000即可vhost_http_port和vhost_https_port是实际处理HTTP/HTTPS请求的端口token是客户端连接时的认证凭证建议设置复杂一些dashboard相关参数开启了frp的管理界面方便监控连接状态3.2 启动与防火墙设置使用以下命令启动frpsnohup ./frps -c ./frps.ini frps.log 21 别忘了在云服务器安全组和本地防火墙中开放相关端口7000frp控制端口8080HTTP转发端口8443HTTPS转发端口7500管理界面端口4. 域名解析与SSL证书配置4.1 DNS解析设置在域名管理后台添加两条A记录frp.yourdomain.com → 云服务器IP*.frp.yourdomain.com → 云服务器IP这样无论是a.frp.yourdomain.com还是b.frp.yourdomain.com都会解析到你的云服务器。4.2 使用Lets Encrypt获取免费SSL证书我推荐使用certbot工具自动获取和续期证书sudo apt install certbot python3-certbot-nginx sudo certbot --nginx -d frp.yourdomain.com -d *.frp.yourdomain.com证书会自动配置到Nginx中并且每90天会自动续期。这是目前最方便的HTTPS解决方案完全免费且自动化程度高。5. frp客户端配置实战5.1 基础客户端配置在内网设备上下载对应版本的frp然后编辑frpc.ini[common] server_addr your.server.ip server_port 7000 token your_secure_token_here [web_app] type http local_port 8000 subdomain app [home_assistant] type http local_port 8123 subdomain ha这个配置定义了两个服务app.frp.yourdomain.com 映射到内网的8000端口ha.frp.yourdomain.com 映射到内网的8123端口5.2 客户端自启动设置为了让frpc能随系统启动可以创建systemd服务sudo vim /etc/systemd/system/frpc.service添加以下内容[Unit] DescriptionFrp Client Service Afternetwork.target [Service] Typesimple Usernobody Restarton-failure RestartSec5s ExecStart/path/to/frpc -c /path/to/frpc.ini [Install] WantedBymulti-user.target然后启用服务sudo systemctl enable frpc sudo systemctl start frpc6. Nginx高级配置技巧6.1 基础反向代理配置编辑Nginx配置文件通常在/etc/nginx/conf.d/下新建一个frp.confserver { listen 80; server_name *.frp.yourdomain.com frp.yourdomain.com; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name *.frp.yourdomain.com frp.yourdomain.com; ssl_certificate /etc/letsencrypt/live/frp.yourdomain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/frp.yourdomain.com/privkey.pem; 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; } }这个配置实现了HTTP自动跳转到HTTPS通配符域名支持请求转发到frp的HTTP端口(8080)完整的HTTPS加密6.2 性能优化配置在高并发场景下可以添加以下优化参数proxy_http_version 1.1; proxy_set_header Connection ; proxy_buffering off; proxy_request_buffering off; proxy_read_timeout 300s; proxy_send_timeout 300s;这些配置可以显著提升长连接性能特别适合WebSocket应用。7. 安全加固与故障排查7.1 安全最佳实践定期更换tokenfrp的token相当于密码建议每3个月更换一次限制访问IP在frps.ini中添加allow_ports限制可转发的端口范围启用TLS加密在[common]部分添加tls_enable true启用端到端加密禁用dashboard生产环境建议关闭dashboard或设置强密码7.2 常见问题排查问题1客户端连接失败检查token是否一致确认服务器防火墙和安全组设置查看frps和frpc的日志文件问题2能连接但无法访问服务检查本地服务是否正常运行确认Nginx配置中的proxy_pass地址正确查看frp管理界面确认连接状态问题3HTTPS证书警告确保证书包含所有子域名通配符或SAN证书检查证书是否过期确认Nginx配置中证书路径正确在实际部署过程中我遇到过Nginx偶尔返回502错误的情况后来发现是frpc进程占用了太多内存。解决方案是在frpc.ini中添加了pool_count 5限制连接池大小问题就解决了。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价