NGINX实现反向代理和负载均衡(详细到爆)

nginx [engine x]是HTTP和反向代理服务器,邮件代理服务器和通用TCP / UDP代理服务器。

它高并发性能很好,官方测试能够支撑 5 万的并发量;运行时内存和 CPU 占用率低,配置简单,容易上手,而且运行非常稳定。

1. 下载NGINX

1.1 下载地址:http://nginx.org/en/download.html
NGINX实现反向代理和负载均衡(详细到爆)_第1张图片

1.2 解压下载好的安装包,目录如下:
NGINX实现反向代理和负载均衡(详细到爆)_第2张图片
1.3 双击nginx.exe,命令窗口一闪而过,NGINX启动成功,默认端口号是80,浏览器直接访问:localhost
出现如下界面,表示启动成功
NGINX实现反向代理和负载均衡(详细到爆)_第3张图片

2. 反向代理配置
2.1 正向代理和反向代理

作用于客户端,也就是代理的对象是客户端,称为正向代理。
反过来说,作用于服务端,也就是代理的对象是服务器,称为反向代理。
NGINX实现反向代理和负载均衡(详细到爆)_第4张图片

1.正向代理,代理的是客户端; 客户端访问的依然是目标服务器的地址。
2.反向代理,代理的是服务端; 客户端访问的是反向代理服务器的地址,而不是目标服务器的地址。

NGINX实现反向代理和负载均衡(详细到爆)_第5张图片
2.2 nginx 反向代理

例如:访问127.0.0.1,直接跳转到127.0.0.0:8080(这是一个Tomcat的地址)
首先我们来看一下NGINX的配置文件,conf 目录下的nginx.conf 文件。
去掉# 注释的内容后

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;
        
        location / {
            root   html;
            index  index.html index.htm;
        }

        
        location = /50x.html {
            root   html;
        }
      
    }

}

nginx.conf内容分为三个块:
worker_processes:主要配置并发数量。
events:配置最大连接数。
http:是最重要的块,代理、日志、缓存等配置都在此处完成。

http块,又分为http全局块、server块。
实现反向代理,需要配置server块,配置如下:

server {
        listen       80;
        server_name  localhost;
        
        location / {
            proxy_pass    http://localhost:8080;
            index  index.html index.htm;
        }
 
        location = /50x.html {
            root   html;
        }
      
    }

server_name:NGINX服务器的地址,真实IP或127.0.0.1或localhost。
listen:NGINX服务器的端口,可以修改。
location下,proxy_pass:代理的服务器地址。
location下,index:默认的页面

以上面的配置为例:浏览器访问:localhost,实际返回显示的页面:http://localhost:8080/index.html
NGINX实现反向代理和负载均衡(详细到爆)_第6张图片
可以看到,我们访问的是NGINX的服务器,返回的却是Tomcat的信息,这就是反向代理。

3 nginx 负载均衡

静态负载均衡算法:主要包括轮询算法、基于比率的加权轮询算法或者基于优先级的加权轮询算法。
动态负载均衡算法:主要包括基于任务量的最少连接优化算法、基于性能的最快响应优先算法、预测算法及动态性能分配算法等。
通过上面负载均衡的配置,对nginx.conf 配置文件已经很熟悉了,下面直接来配置。

3.1 轮询

server 中配置如下:
修改配置文件nginx.conf 之前,先关闭nginx(命令是 nginx.exe -s stop),修改之后,在启动

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;
	
	upstream OrdinaryPolling {
      server 127.0.0.1:8080;
      server 127.0.0.1:8099;
    }

    server {
        listen       80;
        server_name  localhost;

        location / {
            proxy_pass http://OrdinaryPolling;
            index  index.html index.htm;
            #关掉nginx的缓存,如果不关掉,你会发现每次请求都是从同一个服务器返回的,其实是nginx并没有请求服务器,直接把缓存返回
            add_header Cache-Control no-store;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
       
    }

真实环境应该是,返回的结果是一样的,这里为了测试循环访问两个服务器,返回的页面做了区分。
NGINX实现反向代理和负载均衡(详细到爆)_第7张图片

3.2 加权轮询

3.1 轮询算法,其实是加权轮询算法的一种特殊情况,即每个服务器的权重都是一样,weight=1(默认)。
下面看一下,加权轮询的配置:
也就是在需要代理的服务器地址后面加上weight 参数。

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;
	## 加上weight 参数
	upstream OrdinaryPolling {
      server 127.0.0.1:8080 weight=5;
      server 127.0.0.1:8099 weight=1;
    }

    server {
        listen       80;
        server_name  localhost;

        location / {
            proxy_pass http://OrdinaryPolling;
            index  index.html index.htm;
            #关掉nginx的缓存,如果不关掉,你会发现每次请求都是从同一个服务器返回的,其实是nginx并没有请求服务器,直接把缓存返回
            add_header Cache-Control no-store;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
       
    }

NGINX实现反向代理和负载均衡(详细到爆)_第8张图片
这里可以明显感觉到,访问8080服务器的次数明显多了很多。

3.3 基于IP路由
## 加上参数 ip_hash
upstream OrdinaryPolling {
	  ip_hash;
      server 127.0.0.1:8080 weight=5;
      server 127.0.0.1:8099 weight=1;
    }
3.4 基于服务器响应时间负载分配

服务器的响应时间越短,访问的次数越多。

## 加上参数 fair
upstream OrdinaryPolling {
      server 127.0.0.1:8080 weight=5;
      server 127.0.0.1:8099 weight=1;
      fair;
    }

你可能感兴趣的:(nginx,nginx,java,tomcat)