Nginx 是一个高性能的 HTTP 和反向代理服务器,第一个公开版本 0.1.0 发布于 2004年10月4日。官方测试 nginx 能够支撑5万并发链接,并且 cpu、内存等资源消耗却非常低,并发能力强,运行非常稳定。
Nginx 是一款轻量级的 Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个 BSD-like 协议下发行。由俄罗斯的程序设计师 Igor Sysoevr 所开发,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。中国大陆使用 nginx 网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
Nginx 作为负载均衡服务器:Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务,也可以支持作为 HTTP 代理服务器对外进行服务。
功能:web 服务器、web reverse proxy、smtp reverse proxy。
Nginx 反向代理服务器、负载均衡和正向代理 - 图1
Nginx 反向代理服务器、负载均衡和正向代理 - 图2

正向代理

正向代理的过程隐藏了真实的请求客户端,服务器不知道真实的客户端是谁,客户端请求的服务都被代理服务器代替请求。
我们常说的代理也就是正向代理,正向代理代理的是请求方,也就是客户端;比如我们要访问 youtube,可是不能访问,只能先安装个 FQ 软件代你去访问,通过 FQ 软件才能访问,FQ 软件就叫作正向代理。
Nginx 反向代理服务器、负载均衡和正向代理 - 图3
FQ 软件就是正向代理。
Nginx 反向代理服务器、负载均衡和正向代理 - 图4
正向代理中,proxy 和 client 同属一个 LAN。

反向代理

通常的代理服务器,只用于代理内部网络对 Internet 的连接请求,客户机必须指定代理服务器,并将本来要直接发送到 Web 服务器上的 http 请求发送到代理服务器中由代理服务器向 Internet 上的 web 服务器发起请求,最终达到客户机上网的目的(也就是正向代理)。
反向代理的过程隐藏了真实的服务器,客户不知道真正提供服务的人是谁,客户端请求的服务都被代理服务器处理。反向代理代理的是响应方,也就是服务端;我们请求 www.baidu.com 时这 www.baidu.com 就是反向代理服务器,真实提供服务的服务器有很多台,反向代理服务器会把我们的请求分转发到真实提供服务的各台服务器。Nginx 就是性能非常好的反向代理服务器,用来做负载均衡。
Nginx 反向代理服务器、负载均衡和正向代理 - 图5
Nginx 反向代理服务器、负载均衡和正向代理 - 图6
反向代理中,proxy 和 server 同属一个 LAN。
正向代理和反向代理对比示意图:
Nginx 反向代理服务器、负载均衡和正向代理 - 图7
两者的区别在于代理的对象不一样:正向代理代理的对象是客户端,反向代理代理的对象是服务端
正向代理中,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 配置
  1. upstream tomcatserver1 {
  2. server 192.168.3.43:8080;
  3. server 192.168.3.43:8082; #多台测试服务器
  4. }
  5. upstream tomcatserver2 {
  6. server 192.168.3.43:8082;
  7. }
  8. server {
  9. listen 80;
  10. server_name 8080.zcinfo.com;
  11. #charset koi8-r;
  12. #access_log logs/host.access.log main;
  13. location / {
  14. proxy_pass http://tomcatserver1;
  15. index index.html index.htm;
  16. }
  17. }
  18. server {
  19. listen 80;
  20. server_name 8082.zcinfo.com;
  21. #charset koi8-r;
  22. #access_log logs/host.access.log main;
  23. location / {
  24. proxy_pass http://tomcatserver2;
  25. index index.html index.htm;
  26. }
  27. }

如果两台服务器性能差不多这样设置重启 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 出现一次这样轮循。
以下是关于 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