网络代理是一种存在与网络的中间人,代理是存在与客户端和服务器之间的角色,从用途上看可以分为正向代理和反向代理。一直以来对这两个名词理解不是特别深刻,经过前段时间的项目,对这两种代理有了更深的认识,用一句话来归纳两者的区别就是“两者服务的对象不同”。
正向代理是代理客户端的,是为客户端服务的,可以想到的用途有局域网内访问外网、翻墙、局域网加速、网络访问控制、隐私保护等等。正向代理试图以客户的身份来访问服务端,正向代理更倾向于解决客户或是客户的管理者的问题,例如公司对员工上网的限制,公司节省流量的考虑,个人要访问国外资源的需要等等。典型的正向代理软件有:Squid、Tinyproxy等等。最常用的就属Squid了,Squid的一些相关好的资料请参考本文最后的参考资料。值得一提的是Squid是可以代理http和https协议的,其中代理https协议并不存在大家认为的安全性问题(https协议本身就是防中间人攻击的),具体代理原理可以参考HTTP 代理原理及实现(一)。
反向代理则是代理服务端的,是为服务端服务的,可以想到的用途有负载均衡、SSL加密、缓存静态资源、压缩等。常见的反向代理软件有Nginx、Haproxy、Apache等等,如果只谈负载均衡还有一些工作在网络层的软件如LVS或是硬件F5等。反向代理服务器可以对客户端发来的请求进行负载均衡转发(支持多种负载均衡策略),更改请求的HOST头,对客户请求进行过滤(如设置黑名单等)等。我们项目中使用的Nginx,主要用来进行负载均衡、请求转发。
近期我自己也写了个简单的反向代理,它可以对于特定的URL请求进行过滤,并对服务器返回的内容进行修改,替换成你需要的内容。这个在我们的测试中解决了外网访问的问题,因为外网使用的域名和内网测试不同,为了屏蔽差异,我通过这个反向代理对个别URL的内容进行了修改,修改成外网可使用的内容。具体代码见hrcproxy.go,代码采用go语言编写,目前实现了简单的字符串替换,后续考虑再增加表达式相关的替换。
参考资料:
- 正向代理与反向代理的区别
- Squid中文权威指南
- 区网控制者: Proxy 服务器 - Squid
- 构建Squid代理服务器
- HTTP 代理原理及实现(一)
- Nginx通过二级目录(路径)映射不同的反向代理,规避IP+端口访问
- Reverse Proxy In Go
- How DNS lookups work when using an HTTP proxy (or not) in IE
- 三种解密 HTTPS 流量的方法介绍
- ZeroSSL,支持多域名的在线 Let’s Encrypt SSL 证书申请工具
文章未经特殊标明皆为本人原创,未经许可不得用于任何商业用途,转载请保持完整性并注明来源链接 《ITechLib》