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

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

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

 

 

 


 

反向代理实例1

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

 准备tomcat服务

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

  2-开放防火墙8088端口

##添加8088端口
[root@VM_0_4_centos bin]# firewall-cmd --add-port=8088/tcp --permanent success

##重新加载配置 [root@VM_0_4_centos bin]# firewall
-cmd --reload success

##查看开放端口(去儿呢) [root@VM_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服务器

 

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

 反向代理配置

   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

[root@VM_0_4_centos conf]# cd /usr/local/nginx/sbin/
[root@VM_0_4_centos sbin]# ./nginx -s reload

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

 


 

反向代理实例2

需求描述:

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

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

准备tomcat服务

  1-两个tomcat服务器

  2-开放防火墙8088 8089

  3-测试tomcat服务器;

 

 配置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

 

 

 

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配置文件

  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; } } }

 

测试负载均衡

 

 

 

 upsteam参数说明

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

 

 

 

 

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; 
}

 

posted on 2020-02-12 11:36  我不吃番茄  阅读(383)  评论(0编辑  收藏  举报