大家好,欢迎来到停止重构的频道。
本期我们讨论网络代理。
在往期《大型网站 安全性》介绍过,出于网络安全的考虑,一般大型网站都需要做网络区域隔离,以防止攻击者直接操控服务器。
网站系统的应用及数据库都会放在这个网络安全区域里。这样的话就会产生代理的问题。
外网请求需要进来,第三方服务调用需要出去。本期我们将详细讨论代理问题,我们按这样的顺序讨论 :
1、 反向代理,外网请求进来
2、 正向代理,请求外网服务
反向代理,接收外网请求
外网请求需要经过统一网关才能反向代理进网络隔离区,网关可以是负载均衡服务、也可以是Nginx等服务软件。
如果是Nginx,反向代理的配置是这样的。
这里需要说明的是,如果外网请求是https,那么其实不需要整个网站系统的各个服务都是https,只需要保证网关那一层配置https即可,系统内部的调用仍然使用http。
如果是使用负载均衡等云服务,则https只需要在负载均衡服务配置即可,网站系统本身的调用还是http,因为网站系统内部使用https通信并没有好处,反而会降低性能。
正向代理,调用外网服务
一些时候,网站系统需要调用第三方服务,超大型的网站系统会分离几个网络隔离区,容灾备份需要夸网络隔离区备份。
以上场景,网站系统都不得不调用网络隔离区以外的服务器,此时需要经过同一代理服务器正向代理到目标服务器。
正向代理可以使用Nginx作为服务软件,正向代理一般有两种方式,一种是7层代理,另一种是4层代理。
网络分层模型一般按OSI模型分为7层。
第7层为应用层,就是常听到的HTTP、HTTPS、RTMP、SMTP等协议。
第4层为传输层,即TCP、UDP等基础协议。
对应的7层代理和4层代理就是对应的这两个网络分层。
如果是使用7层代理,Nginx配置是这样的。
这个配置跟以上反向代理配置的方式是一致的,且可以通过匹配url关键字代理到多个目标服务器。
网站系统调用外网服务需要将IP/端口指向代理服务器,当然,我们更推荐使用域名调用,通过修改服务器host文件即可把调用指向代理服务器。
当然,除了修改IP指向,也可以设置http_proxy、https_proxy等参数设置代理,但这种方式不太推荐,因为这样管理起来不太好。
另一种是4层代理 Nginx配置是这样的,但是需要一个端口对应一个目标服务器,网站系统调用外网服务也需要将IP/端口指向代理服务器。
而且由于4层代理是基于TCP/UDP这些基础协议的,所以HTTP、RTMP这些基于TCP的请求都可以共用一个代理端口。
当然4层代理比7层代理配置更加复杂,需要一个端口对应一个目标服务器。
但是我们更推荐4层代理。
一是性能和稳定性都会相对高一点点,另外是更好管理,由于一个端口是对应一个目标外网服务,所以如果出现一些突发问题,可以在代理服务器直接关闭对应端口即可立刻断开指定外网服务,且不影响其他外网服务的调用。
总结
本期聊了网站系统的代理方案,这其实是往期网站系统安全性中的其中一个内容,本期作了更详细的讨论。