手把手教你用frp和Nginx搭建内网穿透服务(含多子域名配置)

张开发
2026/5/23 5:19:04 15 分钟阅读
手把手教你用frp和Nginx搭建内网穿透服务(含多子域名配置)
零基础实战基于frp与Nginx的多子域名内网穿透方案最近在帮朋友部署家庭实验室的远程访问方案时发现许多技术爱好者对自建内网穿透服务既充满好奇又存在畏难情绪。这种将本地服务安全暴露到公网的能力对于远程办公、智能家居控制或是个人项目演示都极具价值。本文将用最直白的语言带你从零构建支持多子域名的内网穿透系统整个过程就像搭积木一样简单明了。1. 核心工具选型与原理浅析在开始配置前我们需要理解两个核心组件的工作机制。frp作为轻量级反向代理工具其精妙之处在于建立了双向通信隧道——内网的frpc客户端会主动连接具有公网IP的frps服务端这种内网主动出站的设计完美避开了防火墙限制。而Nginx则扮演着智能交通警察的角色负责将不同域名的访问请求精准分流。工具对比表组件角色关键能力推荐版本frps服务端建立中继隧道≥0.30.0frpc客户端暴露内网服务≥0.30.0Nginx流量调度中心域名路由、端口隐藏≥1.18.0提示虽然最新版frp已支持HTTPS但建议初次配置时先使用HTTP协议验证基础功能待调试通过后再升级安全配置。2. 服务端部署云主机攻坚战首先在具有公网IP的云服务器上创建专用部署目录mkdir -p /opt/frp cd /opt/frp 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关键配置文件frps.ini需要特别注意三个安全参数[common] bind_port 7000 vhost_http_port 8080 token 你的高强度密码 subdomain_host yourdomain.com启动服务时推荐使用systemd守护进程sudo tee /etc/systemd/system/frps.service EOF [Unit] DescriptionFRP Server Afternetwork.target [Service] Typesimple ExecStart/opt/frp/frps -c /opt/frp/frps.ini Restarton-failure [Install] WantedBymulti-user.target EOF3. 客户端配置内网服务曝光术内网机器上的frpc.ini配置示例展示了多服务暴露技巧[common] server_addr 你的公网IP server_port 7000 token 与服务端一致的密码 [web_development] type http local_port 3000 subdomain dev [home_assistant] type http local_port 8123 subdomain ha [file_browser] type http local_port 8081 subdomain files测试阶段可前台运行观察日志./frpc -c frpc.ini4. Nginx流量调度艺术这个配置片段实现了三个魔法效果隐藏后端端口自动识别子域名保持原始访问信息server { listen 80; server_name *.yourdomain.com yourdomain.com; location / { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_connect_timeout 300s; proxy_send_timeout 300s; proxy_read_timeout 300s; } }重载配置前务必检查语法nginx -t systemctl reload nginx5. 域名系统的最后拼图在DNS解析平台需要设置两条记录主域名A记录 → 云服务器IP*.yourdomain.com泛解析 → 同一IP验证解析是否生效dig short dev.yourdomain.com ping dev.yourdomain.com6. 安全加固与性能调优基础架构搭建完成后这些措施能让服务更可靠防火墙策略ufw allow 80/tcp ufw allow 7000/tcp ufw enable连接保活在frpc.ini中添加[common] tcp_mux true heartbeat_interval 30 heartbeat_timeout 90日志轮转sudo tee /etc/logrotate.d/frp EOF /var/log/frp/*.log { daily missingok rotate 7 compress delaycompress notifempty create 644 root root } EOF7. 常见故障排查指南遇到连接问题时按照这个顺序检查基础连通性测试telnet 公网IP 7000服务端日志查看journalctl -u frps -f客户端调试模式./frpc -c frpc.ini --log-leveldebugNginx请求追踪tail -f /var/log/nginx/access.log最近帮某创业团队部署时发现当子域名超过5个时建议在Nginx中增加worker_connections参数值避免出现502 Bad Gateway错误。这个细节在官方文档中很少提及却是高并发场景下的关键调优点。

更多文章