正向代理与反向代理
代理是在服务器和客户端之间假设的一层服务器,代理将接收客户端的请求并将它转发给服务器,然后将服务端的响应转发给客户端。
不管是正向代理还是反向代理,实现的都是下面的功能。
正向代理是为我们服务的,即为客户端服务的,客户端可以根据正向代理访问到它本身无法访问到的服务器资源。
正向代理对我们是透明的,对服务端是非透明的,即服务端并不知道自己收到的是来自代理的访问还是来自真实客户端的访问。
反向代理是为服务端服务的,反向代理可以帮助服务器接收来自客户端的请求,帮助服务器做请求转发,负载均衡等。
反向代理对服务端是透明的,对我们是非透明的,即我们并不知道自己访问的是代理服务器,而服务器知道反向代理在为他服务。
实现Nginx负载均衡的主要组件:
Nginx模块 | 说明 |
---|---|
ngx_http_proxy_module | proxy代理模块,用于把请求发送给服务器节点或upstream服务器池 |
ngx_http_upstream_module | 负载均衡模块,可以实现网站的负载均衡功能及节点的健康检查 |
upstream模块介绍
ngx_http_upstream_module模块支持的代理方式有proxy_pass,fastcgi_pass等,主要使用proxy_pass
。
upstream模块允许nginx定义一组或多组节点服务器组,使用时通过proxy_pass代理把网站的请求发送到定义好的对应的节点组中。
示例:创建节点服务器池
upstream blog {
server 192.168.30.5:80 weight=5;
server 192.168.30.6:81 weight=10;
server 192.168.30.7:82 weight=15;
}
upstream
:创建节点服务器组的关键字,必须有;blog
:节点服务器组的名字,必须有,可自定义名字;server
:关键字,后面可加IP或者域名或者IP:端口,不指定端口默认80;weight
:权重,数值越大被分配的请求越多。默认为1
设置节点服务器的状态值除了weight之外,还有:max_fails
:允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误.fail_timeout
:max_fails次失败后,暂停的时间。down
:表示当前的节点服务器不参与负载,标志机器永远不可用,可配合iP_hash使用backup
:其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。