Nginx反向代理服务器、负载均衡和正向代理

文章目录

Nginx 是一个高性能的 HTTP 和反向代理服务器,第一个公开版本 0.1.0 发布于 2004年10月4日。官方测试 nginx 能够支撑5万并发链接,并且 cpu、内存等资源消耗却非常低,并发能力强,运行非常稳定。

Nginx 是一款轻量级的 Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师 Igor Sysoevr 所开发,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

Nginx 作为负载均衡服务器:Nginx 既可以在内部直接支持 RailsPHP 程序对外进行服务,也可以支持作为 HTTP代理服务器对外进行服务。

功能:web 服务器、web reverse proxy、smtp reverse proxy

正向代理

正向代理的过程隐藏了真实的请求客户端,服务器不知道真实的客户端是谁,客户端请求的服务都被代理服务器代替请求。

我们常说的代理也就是正向代理,正向代理代理的是请求方,也就是客户端;比如我们要访问youtube,可是不能访问,只能先安装个FQ软件代你去访问,通过FQ软件才能访问,FQ软件就叫作正向代理。

FQ软件就是正向代理

正向代理中,proxy和client同属一个LAN

反向代理

通常的代理服务器,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中由代理服务器向Internet上的web服务器发起请求,最终达到客户机上网的目的(也就是正向代理)。

反向代理的过程隐藏了真实的服务器,客户不知道真正提供服务的人是谁,客户端请求的服务都被代理服务器处理。反向代理代理的是响应方,也就是服务端;我们请求 www.baidu.com 时这 www.baidu.com 就是反向代理服务器,真实提供服务的服务器有很多台,反向代理服务器会把我们的请求分转发到真实提供服务的各台服务器。Nginx就是性能非常好的反向代理服务器,用来做负载均衡。

反向代理中,proxy和server同属一个LAN

正向代理和反向代理对比示意图

两者的区别在于代理的对象不一样:正向代理代理的对象是客户端,反向代理代理的对象是服务端

正向代理中,proxy和client同属一个LAN,对server透明;

反向代理中,proxy和server同属一个LAN,对client透明。

Nginx负载均衡

1、什么是负载均衡?

当一台服务器的性能达到极限时,我们可以使用服务器集群来提高网站的整体性能。那么,在服务器集群中,需要有一台服务器充当调度者的角色,用户的所有请求都会首先由它接收,调度者再根据每台服务器的负载情况将请求分配给某一台后端服务器去处理。

那么在这个过程中,调度者如何合理分配任务,保证所有后端服务器都将性能充分发挥,从而保持服务器集群的整体性能最优,这就是负载均衡问题。

详情可查看负载均衡,理论知识讲解

2、需求

nginx作为负载均衡服务器,用户请求先到达nginx,再由nginx根据负载配置将请求转发至各个服务器。

nginx负载均衡服务器:192.168.3.43

测试服务器1:192.168.3.43:8080

测试服务器2:192.168.3.43:8082

3、nginx配置

upstream tomcatserver1 {
    server 192.168.3.43:8080;
    server 192.168.3.43:8082; #多台测试服务器
}

upstream tomcatserver2 {
    server 192.168.3.43:8082;
}

server {
    listen 80;
    server_name  8080.zcinfo.com;

    #charset koi8-r;

    #access_log  logs/host.access.log  main;

    location / {
        proxy_pass   http://tomcatserver1;
        index  index.html index.htm;
    } 
}

server {
    listen 80;
    server_name  8082.zcinfo.com;

    #charset koi8-r;

    #access_log  logs/host.access.log  main;

    location / {
        proxy_pass   http://tomcatserver2;
        index  index.html index.htm;
    }
}

如果两台服务器性能差不多这样设置重启nginx就行了,但是现在假如两台服务器性能不一样,还需要设置性能权重,让性能高服务器做更多事情。只需要加入 weight=??? 即可,如下:

upstream tomcatserver1 {
   server 192.168.3.43:8080 weight=2;
   server 192.168.3.43:8082 weight=1; 
}

upstream tomcatserver2 {
   server 192.168.3.43:8082;
}

server {
    listen 80;
    server_name  8080.zcinfo.com;

    #charset koi8-r;

    #access_log  logs/host.access.log  main;

    location / {
        proxy_pass   http://tomcatserver1;
        index  index.html index.htm;
    }  
}

server {
    listen 80;
    server_name  8082.zcinfo.com;

    #charset koi8-r;

    #access_log  logs/host.access.log  main;

    location / {
        proxy_pass   http://tomcatserver2;
        index  index.html index.htm;
    }
}

重新启动nginx,会发现8080出现了两次,8082出现一次这样轮循。

ps:关于nginx负载均衡的一些参数介绍例子

节点说明:
在http节点里添加:
 
#定义负载均衡设备的 Ip及设备状态 
upstream myServer {   
    server 127.0.0.1:9090 down; 
    server 127.0.0.1:8080 weight=2; 
    server 127.0.0.1:6060; 
    server 127.0.0.1:7070 backup; 
}
 
在需要使用负载的Server节点下添加
 
proxy_pass http://myServer;
 
upstream 每个设备的状态:
 
down 表示单前的server暂时不参与负载 
weight  默认为1.weight越大,负载的权重就越大。 
max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误 
fail_timeout:max_fails 次失败后,暂停的时间。 
backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。

参考信息:
https://blog.lh1010.com/archives/542.html
https://blog.csdn.net/u013144287/article/details/78551398

发表评论