nginx学习3:实现nginx反向代理和负载均衡

tinydu 2020-02-12

nginx学习3:实现nginx反向代理和负载均衡

正向代理和反向代理的区别(这里不赘述什么是正向代理和反向代理)

一句话概括:正向代理隐藏真实客户端,反向代理隐藏真实服务端;即正向代理服务器不知道客户端是谁,反向代理客户端不知道服务器是谁;

nginx学习3:实现nginx反向代理和负载均衡


反向代理实例1

需求描述:输入nginx监听IP:8081,可以访问真实的IP:8088 tomcat服务

 准备tomcat服务

1-准备tomcat服务(8088端口)

2-开放防火墙8088端口

##添加8088端口[_0_4_centos bin]# firewall-cmd --add-port=8088/tcp --permanent
success##重新加载配置
[_0_4_centos bin]# firewall-cmd --reload
success##查看开放端口(去儿呢)
[_0_4_centos bin]# firewall-cmd --list-all
public
  target: default
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: ssh dhcpv6-client
  ports: 8081/tcp 8088/tcp
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules:

   3-测试tomcat服务器

nginx学习3:实现nginx反向代理和负载均衡

准备ngnix(参考:https://www.cnblogs.com/wobuchifanqie/p/12240696.html)

nginx学习3:实现nginx反向代理和负载均衡

 反向代理配置

   1-在/usr/local/nginx/conf/nginx.conf中加入如下配置: proxy_pass http://XX.XXX.176.26:8088;

#user  nobody;
worker_processes  1;

events {
    worker_connections  1024;
}


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

    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       8081;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
        proxy_pass http://XX.XXX.176.26:8088;
            index  index.html index.htm;
        }

}

   2-重新加载nginx

[_0_4_centos conf]# cd /usr/local/nginx/sbin/
[_0_4_centos sbin]# ./nginx -s reload

测试输入IP:8081直接跳转到IP:8081

nginx学习3:实现nginx反向代理和负载均衡


反向代理实例2

需求描述:

  输入nginx监听IP:8082/api,可以访问真实的IP:8088 tomcat服务; 

  输入nginx监听IP:8082/admin,可以访问真实的IP:8089 tomcat服务

准备tomcat服务

1-两个tomcat服务器

2-开放防火墙8088 8089

3-测试tomcat服务器;

 nginx学习3:实现nginx反向代理和负载均衡

 配置nginx配置文件

1-在/usr/local/nginx/conf/nginx.conf中加入如下配置(红色部分);并重新加载配置

worker_processes  1;
events {
    worker_connections  1024;
}


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

    server {
        listen       8081;
        server_name  localhost;

        location / {
            root   html;
        proxy_pass http://XX.XXX.176.26:8088;
            index  index.html index.htm;
        }

  ##加入新的http server块
    server {
        listen       8082;
        location ~ /api/ {
            proxy_pass   http://XX.XXX.176.26:8088;
        }
    location ~ /admin/ {
            proxy_pass   http://XX.XXX.176.26:8089;
        }

    }

}

2-开放防火墙8082端口

测试输入nginx监听URI

nginx学习3:实现nginx反向代理和负载均衡

location 指令说明

1、= :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求。

2、~:用于表示 uri 包含正则表达式,并且区分大小写。

3、~*:用于表示 uri 包含正则表达式,并且不区分大小写。

4、^~:用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location 块中的正则 uri 和请求字符串做匹配。

注意:如果 uri 包含正则表达式,则必须要有 ~ 或者 ~* 标识


负载均衡

需求描述:

  输入nginx监听IP:8083,可以一定规则访问真实的IP:8088 tomcat和IP:8089服务;

准备tomcat服务器

1-准备两个tomcat 8088和8089;分别都可以访问/api/a.html;

nginx学习3:实现nginx反向代理和负载均衡

 配置nginx配置文件

1-配置ngnix.conf文件

worker_processes  1;

#pid        logs/nginx.pid;

events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    ##定义负载均衡真实服务器IP:端口号 weight表示权重
    upstream myserver{
        server   49.233.176.26:8088 weight=1;
        server   49.233.176.26:8089 weight=1;
     }
    server {
        listen   8083;
       location / {
            proxy_pass   http://myserver;
            proxy_connect_timeout 10;
        }
    }  


}

测试负载均衡

nginx学习3:实现nginx反向代理和负载均衡

 upsteam参数说明

自定义负载均衡真实服务器信息 IP+端口号以及权重

 nginx学习3:实现nginx反向代理和负载均衡

nginx 分配服务器策略

第一种 轮询(默认)
    每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。

第二种 weight
    weight 代表权重默认为 1,权重越高被分配的客户端越多

upstream server_pool{ 
    server 192.168.5.21 weight=10; 
    server 192.168.5.22 weight=10; 
}

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

upstream server_pool{ 
    ip_hash; 
    server 192.168.5.21:80; 
    server 192.168.5.22:80; 
}


  第四种 fair(第三方)
    按后端服务器的响应时间来分配请求,响应时间短的优先分配。

upstream server_pool{ 
    server 192.168.5.21:80; 
    server 192.168.5.22:80; 
    fair; 
}

相关推荐