网络正向代理与反向代理

网络代理是一种存在与网络的中间人,代理是存在与客户端和服务器之间的角色,从用途上看可以分为正向代理和反向代理。一直以来对这两个名词理解不是特别深刻,经过前段时间的项目,对这两种代理有了更深的认识,用一句话来归纳两者的区别就是“两者服务的对象不同”。

正向代理是代理客户端的,是为客户端服务的,可以想到的用途有局域网内访问外网、翻墙、局域网加速、网络访问控制、隐私保护等等。正向代理试图以客户的身份来访问服务端,正向代理更倾向于解决客户或是客户的管理者的问题,例如公司对员工上网的限制,公司节省流量的考虑,个人要访问国外资源的需要等等。典型的正向代理软件有:Squid、Tinyproxy等等。最常用的就属Squid了,Squid的一些相关好的资料请参考本文最后的参考资料。值得一提的是Squid是可以代理http和https协议的,其中代理https协议并不存在大家认为的安全性问题(https协议本身就是防中间人攻击的),具体代理原理可以参考HTTP 代理原理及实现(一)

反向代理则是代理服务端的,是为服务端服务的,可以想到的用途有负载均衡、SSL加密、缓存静态资源、压缩等。常见的反向代理软件有Nginx、Haproxy、Apache等等,如果只谈负载均衡还有一些工作在网络层的软件如LVS或是硬件F5等。反向代理服务器可以对客户端发来的请求进行负载均衡转发(支持多种负载均衡策略),更改请求的HOST头,对客户请求进行过滤(如设置黑名单等)等。我们项目中使用的Nginx,主要用来进行负载均衡、请求转发。

近期我自己也写了个简单的反向代理,它可以对于特定的URL请求进行过滤,并对服务器返回的内容进行修改,替换成你需要的内容。这个在我们的测试中解决了外网访问的问题,因为外网使用的域名和内网测试不同,为了屏蔽差异,我通过这个反向代理对个别URL的内容进行了修改,修改成外网可使用的内容。具体代码见hrcproxy.go,代码采用go语言编写,目前实现了简单的字符串替换,后续考虑再增加表达式相关的替换。

参考资料:

  1. 正向代理与反向代理的区别
  2. Squid中文权威指南
  3. 区网控制者: Proxy 服务器 - Squid
  4. 构建Squid代理服务器
  5. HTTP 代理原理及实现(一)
  6. Nginx通过二级目录(路径)映射不同的反向代理,规避IP+端口访问
  7. Reverse Proxy In Go
  8. How DNS lookups work when using an HTTP proxy (or not) in IE
  9. 三种解密 HTTPS 流量的方法介绍
  10. ZeroSSL,支持多域名的在线 Let’s Encrypt SSL 证书申请工具

文章未经特殊标明皆为本人原创,未经许可不得用于任何商业用途,转载请保持完整性并注明来源链接 《ITechLib》

留言:

(lesstile enabled - surround code blocks with ---)