Nginx反向代理与负载均衡

目录

 

一、简介

二、环境搭建

三、配置参数实践


一、简介

负载均衡

  对用户的访问请求进行调度管理

  对用户的访问请求进行压力分担

反向代理

  接收用户请求代替用户向后端访问

  反向代理与数据转发的区别

实验配置信息:

HOSTNAME

IP

说明

lb01

192.168.231.141

Nginx主负载服务器

web01

192.168.231.142

web01服务器

web02

192.168.231.143

web02服务器

二、环境搭建

1.安装部署nginx过程:

可查看上一篇博客:

https://blog.csdn.net/yuanfangPOET/article/details/83446907

2.编写nginx配置文件(统一web服务器配置)

worker_processes  1;

events {

    worker_connections  1024;

}

http {

    include       mime.types;

    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '

                      '$status $body_bytes_sent "$http_referer" '

                      '"$http_user_agent" "$http_x_forwarded_for"';

    server {

        listen       80;

        server_name  bbs.etiantian.org;

        location / {

            root   html/bbs;

            index  index.html index.htm;

        }

      access_log  logs/access_bbs.log  main;

    }        

    server {

        listen       80;

        server_name  www.etiantian.org;

        location / {

            root   html/www;

            index  index.html index.htm;

        }

        access_log  logs/access_www.log  main;

    }

}

3.统一nginx测试环境 (web文件)

在nginx/html目录下创建www,bbs目录和web文件index.html

统一规格web01 www

 web01 bbs

4.测试:

[root@lb01 ~]# curl -H host:www.realxw.com 192.168.231.142

web01 www

[root@lb01 ~]# curl -H host:www.realxw.com 192.168.231.143

web02 www

[root@lb01 ~]# curl -H host:bbs.realxw.com 192.168.231.142

web01 bbs

[root@lb01 ~]# curl -H host:bbs.realxw.com 192.168.231.143

wbe02 bbs

5.配置负载服务文件:

worker_processes  1;

events {

    worker_connections  1024;

}

http {

    include       mime.types;

    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

    upstream server_pools{

        server 192.168.231.142:80;

        server 192.168.231.143:80;

        }

    server {

        listen       80;

        server_name  www.realxw.com;

        location / {

        proxy_pass http://server_pools;

        }

    }

    server {

        listen       80;

        server_name  bbs.realxw.com;

        location / {

        proxy_pass http://server_pools;

        }

}

}

6.测试:

[root@lb01 conf]# curl -H host:bbs.realxw.com 192.168.231.141

web01 www

[root@lb01 conf]# curl -H host:bbs.realxw.com 192.168.231.141

web02 www

三、配置参数实践

3.1 模块调度算法

     ①. 定义轮询调度算法-rr-默认调度算法

    ②. 定义权重调度算法-wrr

     ③. 定义静态调度算法-ip_hash

     ④. 定义最小的连接数-least_conn

 3.2 nginx反向代理相关两个模块

upstream 模块 类似与一个池塘,将nginx节点放置到池塘中

proxy模块  用池塘里面的nginx节点,利用pr oxy进行调用

3.3 upstream模块核心参数简介

weight 权重

max_fails 失败的尝试次数

fail_timeout 失败的超时时间

backup  备份:所有节点凉掉后才会请求backip节点

 3.3.1  weight参数实践:

       worker_processes  1;

events {

    worker_connections  1024;

}

http {

    include       mime.types;

    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

    upstream server_pools{

        server 192.168.231.142:80 weight 1;

        server 192.168.231.143:80 weight 2;

        }

    server {

        listen       80;

        server_name  www.realxw.com;

        location / {

        proxy_pass http://server_pools;

        }

    }

    server {

        listen       80;

        server_name  bbs.realxw.com;

        location / {

        proxy_pass http://server_pools;

        }

}

}

3.3.2测试:

[root@lb01 conf]# curl -H host:www.realxw.com 192.168.231.141

web02 www

[root@lb01 conf]# curl -H host:www.realxw.com 192.168.231.141

web01 www

[root@lb01 conf]# curl -H host:www.realxw.com 192.168.231.141

web02 www

[root@lb01 conf]# curl -H host:www.realxw.com 192.168.231.141

web02 www

3.4.1 其他参数使用:

server 192.168.231.142:80 weight=1 max_fails=2 fail_timeout=10;

 server 192.168.231.143:80 weight=2 max_fails=2 fail_timeout=10 backup;

3.4.2 测试(web02为备份节点):

[root@lb01 conf]# curl 192.168.231.141

web01 www

[root@lb01 conf]# curl 192.168.231.141

web01 www

停掉web01:

[root@lb01 conf]# curl 192.168.231.141

web02 www

[root@lb01 conf]# curl 192.168.231.141

web02 www

3.5 ip_hash参数实践

每个客户端访问,都会将客户端IP通过哈希算法算出一个值,在随后的客户端进行访问时,只要hash值相同,就会被分配到同一台服务器,该调度算法可以解决动态网页的session共享问题,但会导致请求分配不均,即无法保证1:1的负载均衡,因为在国内大多数公司都是NAT上网横式,多个客户端会对应1个外部IP ,所以,这些客户端都会被分配到同一节点服务器,从而导致请求分配不均。

修改nginx.conf

worker_processes  1;

events {

    worker_connections  1024;

}

http {

    include       mime.types;

    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

    upstream server_pools{

        ip_hash;

        server 192.168.231.142:80;

        server 192.168.231.143:80;

        }

    server {

        listen       80;

        server_name  www.realxw.com;

        location / {

        proxy_pass http://server_pools;

        }

    }

}

测试:

[root@lb01 conf]# curl  -H host:bbs.realxw.com 192.168.231.141

web01 www

[root@lb01 conf]# curl  -H host:bbs.realxw.com 192.168.231.141

web01 www

[root@lb01 conf]# curl  -H host:bbs.realxw.com 192.168.231.141

web01 www

[root@lb01 conf]# curl  -H host:bbs.realxw.com 192.168.231.141

web01 www

3.6 nginx负载均衡相关重要参数

Nginx反向代理重要参敎

解释说明

proxy.pass http://server_pools; 

通过proxy_pass功能把用户的清求转向到反向代理定义的upstream服务器池

proxy_set_header Host $host

在代理向后端服务器发送的 http请求头中加入 host字段信息,用于当后端服务器配置有多个虚拟主机时,可以识别代理的是哪个虚拟主机。这是节点服务器多虚拟主机时的关键配置

proxy_set_header X-ForwardedFor

$remote_addr;

在代理向后端服务器发送的 http请求头中加入 X-Forward-For字段信息,用于后端服务器程序、日志等接收记录真实用户的 IP ,而不是代理服务器的 IP这是反向代理时,节点服务器获取用户真实 IP的必要功能配置

3.7 proxy_set_header Host $host;参数实践:

当后端服务器配置有多个虚拟主机时,添加proxy_set_header Host $host;

worker_processes  1;

events {

    worker_connections  1024;

}

http {

    include       mime.types;

    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

    upstream server_pools{

        server 192.168.231.142:80;

        server 192.168.231.143:80;

        }

    server {

        listen       80;

        server_name  www.realxw.com;

        location / {

        proxy_pass http://server_pools;

        proxy_set_header Host $host;

        }

    }

    server {

        listen       80;

        server_name  bbs.realxw.com;

        location / {

        proxy_pass http://server_pools;

        proxy_set_header Host $host;

  }

    }

}

3.8 proxy_set_header X-ForwardedFor $remote_addr;参数实践:

没添加之前:

客户端进行访问(需要在hosts文件中添加解析):

web01服务器access_www.log日志:

192.168.231.141 - - [26/Oct/2018:03:08:23 +0800] "GET / HTTP/1.0" 200 10 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:63.0) Gecko/20100101 Firefox/63.0" "-"

添加参数后:

server {

        listen       80;

        server_name  www.realxw.com;

        location / {

        proxy_pass http://server_pools;

        proxy_set_header Host $host;

        proxy_set_header X-Forwarded-For $remote_addr;

        }

    }

添加之后:

192.168.231.141 - - [26/Oct/2018:03:17:23 +0800] "GET / HTTP/1.0" 20    0 10 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.    36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36" "192.168.231.1"

3.9 相关参数:

http proxy 模块相关参数

 说明

proxy_set_header

设置http请求header项传给后端服务器节点,例如:可实现让代理后端的服务器节点获取访问客户端用户的真实IP地址

client_body_buffer_size

用于指定客户端请求主体缓冲区大小

proxy_connect_timeout

表示反向代理后端节点服务器连接的超时时间,即发起握手等候响应的超时时间

proxy_send_timeout

表示代理后端服务器的数据回传时间,即在规定时间内后端服务器必须传完所有数据,否则nginx将断开这个连接

proxy_read_timeout

设置nginx从代理的后端服务器获取信息的时间,表示连接建立成功后,nginx等待后端服务器的响应时间,其实是nginx已经进入后端的排队之中等候处理的时间

proxy_buffer_size

设置缓冲区大小,默认该缓冲区大小等于指令proxy_buffers设置的大小

proxy_buffers

设置缓冲区的数量和大小,nginx从代理的后端服务器获取的响应信息,会设置到缓冲区

proxy_busy_buffers_size

用于设置相同很忙时可以使用的proxy_buffers大小,官方推荐的大小为 proxy_buffers * 2

proxy_trmp_file_write_size

指定proxy缓存临时文件的大小

4.根据URI目录地址转发的应用场景:

基于目录进行转发-网站动静结合:

目录(uri)

ip

服务器目录

/upload

192.168.231.142

html/www/upload

/static

192.168.231.143

html/www/static

 

在相应的服务器目录中创建相应目录和index.html文件

创建/设置upstream负载信息

 upstream upload_pools{

        server 192.168.231.142;

        }

   upstream static_pools{

        server 192.168.231.143;

        }

调用upstream信息

 location /upload/ {

        proxy_pass http://upload_pools;

        proxy_set_header Host $host;

        proxy_set_header X-Forwarded-For $remote_addr;

        }

        location /static/ {

        proxy_pass http://static_pools;

        proxy_set_header Host $host;

        proxy_set_header X-Forwarded-For $remote_addr;

        }

 

修改nginx.conf

worker_processes  1;

events {

    worker_connections  1024;

}

http {

    include       mime.types;

    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '

                      '$status $body_bytes_sent "$http_referer" '

                      '"$http_user_agent" "$http_x_forwarded_for"';

 

    #access_log  logs/access.log  main;

    upstream upload_pools{

        server 192.168.231.142;

        }

   upstream static_pools{

        server 192.168.231.143;

        }

    server {

        listen       80;

        server_name  www.realxw.com;

 location /upload/ {

        proxy_pass http://upload_pools;

        proxy_set_header Host $host;

        proxy_set_header X-Forwarded-For $remote_addr;

        }

        location /static/ {

        proxy_pass http://static_pools;

        proxy_set_header Host $host;

        proxy_set_header X-Forwarded-For $remote_addr;

        }

        access_log  logs/access.log  main;

    }

 }

测试:

[root@lb01 conf]# curl -H host:www.realxw.com 192.168.231.141/static/

web02 static

[root@lb01 conf]# curl -H host:www.realxw.com 192.168.231.141/upload/

web01 upload

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

real向往

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值