1.为什么需要代理
A-->B 无法访问
C-->B 可以访问
A-->C 可以访问C
A如果想访问B就可以通过C来访问
A-->C-->B C就是代理
2.代理类型
服务器/程序---->C----->其他服务器
这是正向代理,也就是通常用的翻墙
客户端--->C--->服务器
这是反向代理
拿局域网防火墙来说
局域网想访问公网,防火墙限制不能直接访问,需要通过某一台内网机器访问,这就是正向代理
公网想访问局域网的某台服务器,不能直接访问,需要通过外网能访问到的机器访问,这就是反向代理
正向代理访问外网
反向代理暴露内网
3.反向代理实现
1)nginx:
此文章实现 https://blog.csdn.net/xuanjiewu/article/details/79458266
通过配置,能把内网(可以访问到的机器)端口暴露,也可以做负载均衡,修改后需要重新加载nginx配置,
缺点是需要内网有可访问的公网机器,并且部署在上面,而且只能暴露当前内网
2)隧道:
此文章实现 https://blog.csdn.net/hyz792901324/article/details/99999325
实现的效果是使用user登录$server1之后建立本地3307端口到远程$server2:3306端口的隧道,通过访问本地3307端口访问远程$server2:3306端口,
前提是$server1可以访问$server2:3306端口;
缺点是每次都需要手工登录用户
3)nps/npc(本文重点)
此文章实现 https://gitee.com/mirrors/nps?_from=gitee_search
nps可以公网访问的机器,nps只需要一台
npc放到需要暴露的内网的任意机器,npc可以有多个(重点重点)
也就是说假如你有一个公网机器,你可以暴露多个内网(家用,工作地点,客户公司)等局域网的任意机器,而且一个内网用一个npc就可以
npc链接nps服务器,然后nps有界面管理
每个npc创建后会生成一个id,在nps的web界面管理端tcp转发的时候,填写上内网的id号,nps服务器的端口号,npc客户端所在内网的机器
(可以是当前内网任意的ip)ip:端口号,这样就可以通过nps的端口号来访问内网的端口