新手问题 关于反向代理服务器的理解

ihlayy · 2012年11月29日 · 最后由 ihlayy 回复于 2012年11月30日 · 6923 次阅读

1) 什么情况下必须使用反向代理服务器?我感觉这玩意是有一定的用处,但是多加了一台服务器呢?

2) 另外负载均衡服务器是在反向代理服务器的上方吗?即 request->负载均衡服务器->反向代理->防火墙->web 服务器?

是不是架构会是

a. dns 服务器->反向代理服务器->>防火墙->web 服务器 b. 负载均衡服务器-> web 服务器

可能是 c: 负载均衡服务器->反向代理服务器->>防火墙->web 服务器 吗?

dns 服务器 和 负载均衡服务器 实际使用过程中会同时使用吗

按照理解 dns 服务器 和 负载均衡服务器 应该可以分成 2 层,解决不同的问题?多层的负载均衡?

像 ruby 有些部署方案都是一台机子启动多个 web 应用服务器 这样在前面加个 nginx 作反向代理统一管理这台机子,而不用负载均衡服务器去管理

#1 楼 @cxh116 那几台 web 服务器怎么负载均衡的,是前面加的那台反向代理,同时也实现了软件方式的负载均衡吗?

反向代理一般是指把请求代理到内网另一台服务器,这样内网服务器就可以不用暴露给外部用户,达到一定的安全。负载均衡一般是指把请求分配给不同的机器。

我们这边是先负载均衡后,后面再反向代理。

#2 楼 @ihlayy 架构这一块具体我也不太清楚。只是猜想 比如你有多台物理机用来跑 web 服务 最外层可以用 haproxy 或 lvs 做动态分发,web 服务器 nginx+ruby 实例 这样做的好处是通过 haproxy 或 lvs 可以随时增加或替换后面的 web 服务器,

http://www.cnblogs.com/dkblog/archive/2011/07/06/2098949.html

1) 反向代理 和 app server 可以放在一个机器上,不存在多不多个机器哈。像 nginx+unicorn 的部署方式,后台会起多个 unicorn worker,所以必须得有个 nginx 来做反向代理

2)负载均衡一般用在多台物理机

#5 楼 @vkill 为什么 后台起多个 unicorn worker,就一定要用 nginx 来做反向代理呢?

既然是 unicorn 起的 worker,那它就应该能把请求转发到 worker 啊。

我感觉不是必须的,但是用 nginx 做反向代理,能处理掉一定的静态资源吧?

#4 楼 @cxh116

反向代理本身有负载均衡的功能吧?比方说,前面有一台反向代理机器,后面有 3 台 web 服务器,请求通过反向代理转发到 web 服务器的规则定义在反向代理服务器的配置中?

#6 楼 @ihlayy rails 服务器没有采用多线程,一般一个进程同一时间只处理一个请求,所以需要启动多个 ruby 进程来提高并发能力 像 thin 类 web server,一个进程就是占用一个端口,为了方便管理这台机器,所以装个 nginx 反向代理, 这样负载均衡层只需要知道这台机子提供 ruby web server,不需要关心到底起了几个 ruby web server,每个 ruby web server 运行在什么端口

nginx 的反向代理是在 7 层上面,也就是 http 协议层,每个请求过来得先解析 http 协议,这样负载均衡的机器抗不起大访问量 而 lvs 和 haproxy 可以工作在 4 层,tcp 协议层,它不需要管你的 http 访问的是那页面,只要你访问是这个 ip,那么它就直接把请求转发到对应的 ruby web server,不解析 http 协议

lvs 和 haproxy 一般还可以处理一种比较常见的需求,就是会话保持,有些需求是需要同一用户的请求从 session 的创建到销毁只交给一台 web server 处理 不过 rails 应用 session 一般是保持在 cookie 里,一般没有此需求。像 java 就需要注意了

#8 楼 @cxh116 谢谢啊。灰常感谢大家的解答,献上小红花一朵。。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号