nginx负载均衡和反向代理的区别
nginx负载均衡和反向代理的区别有:1、实现负载均衡一定要需要反向代理;2、反向代理主要是缓存东西,而负载均衡则是减少高并发情况;3、负载均衡是做反向代理的目的之一。
下面是详细介绍:
负载均衡需要通过反向代理来实现。
反向代理就是指nginx作为前端服务器,将请求转发到后端,再将后端服务器的结果,返回给客户端。
它在中间做了一个代理服务器的角色。
负载均衡对反向代理增加了一些策略,因为后端是多台服务器,nginx会根据设定的策略将请求转发给一个相对空闲的服务器,对负载进行分流,减轻服务器压力。
示例
负载均衡
worker_processes 1;
events {
worker_connections 1024;
}
http{
upstream lxx {//默认是80端口
server 192.168.0.62 weight=2;
server 192.168.0.161 weight=3;
}
server {
listen 80;
location / {
proxy_pass http://lxx;
}
}
}
反向代理
worker_processes 1;
events {
worker_connections 1024;
}
http{
upstream lxx {//默认是80端口
server 192.168.0.62 weight=2;
server 192.168.0.161 weight=3;
}
server {
listen 80;
location / {
proxy_pass http://lxx;
#Proxy Settings
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_max_temp_file_size 0;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
}
}
从配置上来看,它只是多了Proxy Settings下面的一些设置参数!但从实际的表现结果来看,感觉区别并不是很大,负载均衡已经可以把用户的请求按照相关算法和规则发送到web集群的某台机器,而反向代理也是实现了如此的功能,它们的具体的区别在哪里?
答:负载均衡是做反向代理的目的之一。
缓存,反向代理主要是缓存东西,以便减少并发操作。
做了反向代理才能实现负载均衡。负载均衡是做反向代理的目的之一。
如果没有反向代理,压力直接放到一个单一的http server上。而有了反向代理,典型情况下,一个ngnix做反向代理,后面有若干个http Server。所有的流量想到ngnix,这个东西根据配置的策略,或者轮转,或者随机或者压力分流,把流量导向给后面的Http server。从而达到负载均衡。
反向代理就是后端服务不直接对外暴露,请求首先发送到nginx,然后nginx将请求转发到后端服务器,比如tomcat等。如果后端服务只有一台服务器,nginx在这里只有一个作用就是起到了代理后端服务接收请求的作用,称之为反向代理。
可是在现实的应用场景中,一台后端服务器出现单点故障的概率很大或者单台机器的吞吐量有限,无法承担过多请求。这时候就需要在nginx后端配置多台服务器,利用nginx内置的规则讲请求转发到后端不同的机器上。这时候就起到了负载均衡的作用。