Nginx反向代理实例与负载均衡实现(全网详解)

反向代理概念

Nginx反向代理(Reverse Proxy)是指代理服务器接收客户端的请求,然后将请求转发给后端服务器,再将后端服务器的响应返回给客户端。与正向代理不同,正向代理是客户端向代理服务器发送请求,再由代理服务器向目标服务器转发请求。

在反向代理中,客户端不需要知道后端真实的服务器地址,只需要知道代理服务器的地址即可。这种架构能够提高服务器的安全性、可伸缩性和可靠性,同时也能够对后端服务器进行负载均衡,提高系统的性能和可用性。

添加反向代理配置

proxy_connect_timeout 180;
proxy_send_timeout 180;
proxy_read_timeout 180;

proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

location / {
    proxy_pass http://43.143.82.81:80;
}   

示例

解决需求:
访问http://43.143.82.81/ 实际上是访问 http://106.52.36.65:80


user  nginx;
worker_processes  1;

events {
    worker_connections  1024;
}


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

    sendfile        on;
    keepalive_timeout  65;

    gzip  on;

    server {
        listen       80;
        server_name  localhost;

        proxy_connect_timeout 180;
        proxy_send_timeout 180;
        proxy_read_timeout 180;

        proxy_set_header Host $http_host; #
        proxy_set_header X-Real-IP $remote_addr; #实际访问的ip地址
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme; #协议

        location / {
            proxy_pass http://106.52.36.65:80;
        }

    }


}

访问:

http://192.168.56.10/

负载均衡概念:负载均衡(Load Balancing)是一种将请求流量分配到多个服务器上,以达到提高系统性能、可用性和可伸缩性的技术。当系统流量过大时,单个服务器难以承受,容易出现性能瓶颈,甚至崩溃。而负载均衡则可以在多台服务器之间分配负载,将请求流量平均分担到多台服务器上,从而提高系统的响应速度和可用性。

负载均衡实现

在反向代理基础上实现负载均衡

负载均衡策略

1.轮询(默认分配机制)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除宕机的服务(心跳检测)。

upstream backserver {
    server 192.168.3.2;
    server 192.168.3.3;
}

实例:

user  nginx;
worker_processes  1;

events {
    worker_connections  1024;
}


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

    sendfile        on;
    keepalive_timeout  65;

    gzip  on;

    # 轮询访问
    upstream lvs {
         server 192.168.3.2;
         server 192.168.3.3;
    }

    server {
        listen       80;
        server_name  localhost;

        proxy_connect_timeout 180;
        proxy_send_timeout 180;
        proxy_read_timeout 180;

        proxy_set_header Host $http_host; #
        proxy_set_header X-Real-IP $remote_addr; #实际访问的ip地址
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme; #协议

        location / {
            # 以变量形式输出ip地址
            proxy_pass http://lvs;
        }

    }


}

2.权重weight(加权重,权重越大的机器会优先处理请求)

指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的 。

upstream backserver {
    server 192.168.3.2 weight=1;	
    server 192.168.3.3 weight=2;  #权重为2,优先处理请求
}

3.ip_hash( IP绑定)

每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

upstream backserver {
    ip_hash;
    server 192.168.3.2;
    server 192.168.3.3;
}

4.fair(第三方)

按后端服务器的响应时间来分配请求,响应时间短的优先分配。

upstream backserver { 
	server 192.168.3.2; 
	server 192.168.3.3; 
	fair; 
} 

5.url_hash(第三方)

按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。

upstream backserver { 
	server 192.168.3.2; 
	server 192.168.3.3; 
	hash $request_uri; 
	hash_method crc32; 
}

负载均衡优点:

  1.  提高系统性能:通过将请求分散到多个服务器上,降低单个服务器的负载,从而提高系统的性能。
  2. 提高系统可用性:通过多台服务器的冗余性,当某一台服务器出现故障时,可以自动将请求流量切换到其他服务器上,提高系统的可用性。
  3. 提高系统的可扩展性:通过增加服务器的数量,可以扩大系统的容量,适应不断增长的请求流量。
  4. 方便管理和维护:通过集中管理和分配请求流量,方便系统的管理和维护。 

你可能感兴趣的:(Nginx,nginx,负载均衡,服务器)