使用frp将内网设备映射到公网VPS的IP上,实现内网穿透
https://github.com/fatedier/frp 是一个款广受好评的反向代理工具,主要用来实现内网穿透。配置简单,照着官方事例几分钟就能学会,而且性能非常的好。可以把家里的主机、树莓派什么的,映射到公网 VPS 的 IP 上去。
具体的简要教程我就不赘述了,官方教程浅显易懂。这里我分享一点点自己的使用心得:
如何在 80 端口被其他服务占用的情况下,把多个域名解析到这台公网主机上,然后再反向代理到一台、或多台内网设备上。
公网主机
在公网 IP 这台部署了 frps 服务的主机上,安装一个 nginx,再其中配置 N 个虚拟服务器,利用 proxy_pass 代理到 localhost 的同一个端口上:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| server { listen 80; server_name main.domain.com;
location / { proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_buffering on; proxy_pass http://localhost:8080; } }
server { listen 80; server_name main2.domain.com;
location / { proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_buffering on; proxy_pass http://localhost:8080; } }
|
与此同时,公网 VPS 上的 frps.ini 当中的 vhost_http_port 配置项,也要设置为 8080
内网主机
而内网的各个主机,frpc.ini 配置当中,需要把不同 http 服务名字区分开,切记不得重复。且同一主机上的 local_port 也不得重复,比如我用 docker 在内网某主机上部署了很多不同端口的 web 服务,只需要 docker 配置好宿主机的不同端口即可,同时在 frpc.ini 配置里也映射好 端口 与 域名 的关系。
1 2 3 4 5 6 7 8 9
| [web_main] type = http local_port = 8080 custom_domains = main.domain.com
[web_main2] type = http local_port = 8081 custom_domains = main2.domain.com
|