6、nginx负载均衡

一、安装nginx

以下1-3步骤都是在nginx均衡负载lb01机器操作:
1、下载
mkdir -p /server/tools
cd /server/tools
wget http://nginx.org/download/nginx-1.18.0.tar.gz
(从其他机器拷贝过来:scp nginx-1.18.0.tar.gz 172.16.1.5:/server/tools)

2、安装依赖
yum install pcre pcre-devel -y
yum install openssl openssl-devel -y #https加密。

3、编译安装步骤
useradd -u1111 -s /sbin/nologin nginx -M
id nginx
tar xf nginx-1.18.0.tar.gz
cd nginx-1.18.0/
./configure --user=nginx --group=nginx --prefix=/application/nginx-1.18.0/ --with-http_stub_status_module --with-http_ssl_module --with-pcre
make&&make install
ln -s /application/nginx-1.18.0/ /application/nginx
/application/nginx/sbin/nginx
netstat -lntup|grep nginx

二、配置相关文件

1、lb01配置nginx.conf
官方例子upstream backend

[root@lb01 /application/nginx/conf]#vim nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    upstream backend {
        server 10.0.0.7:80  weight=1;
        server 10.0.0.8:80  weight=1;
        #此处1:1可以改;按1:1的方式给7,8分配请求
    }

    server {
        listen       80;
        server_name  www.etiantian.org;
        location / {
            proxy_pass http://backend;
            proxy_set_header Host  $host;
        }
   }

 server {
        listen       80;
        server_name  blog.etiantian.org;
        location / {
            proxy_pass http://backend;
            proxy_set_header Host  $host;
        }
   }
}
默认情况浏览器请求负载均衡器,会携带host字段,但是Nginx代理向后请求节点
默认在请求头里不带host字段。
配置Nginx代理向后请求节点默认在请求头里带host字段配置参数:
proxy_set_header Host  $host;

2、lb01配置hosts文件

[root@lb01 /application/nginx/conf]#vim /etc/hosts
127.0.0.1  localhost localhost.localdomain localhost4 localhost4.localdomain4
::1        localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.1.5 lb01
172.16.1.6 lb02
172.16.1.7 web01
172.16.1.8 web02
172.16.1.9 web03
172.16.1.31 nfs01
172.16.1.41 backup
172.16.1.51 db01 db0l.etiantian.org
172.16.1.61 m01

10.0.0.5 www.etiantian.org blog.etiantian

3、web配置
1)web01:

[root@web01 /application/nginx/conf/extra]#cat 01_www.conf
    server {
        listen       80;
        server_name  www.etiantian.org;
        location / {
            root   html/www;
            index  index.html index.htm;
        }
    }
    
[root@web01 /application/nginx/html/www]#cat index.html 
www7

2)web02:

[root@web02 /application/nginx/conf/extra]# cat 01_www.conf
    server {
        listen       80;
        server_name  etiantian.org;
	rewrite ^/(.*) http://www.etiantian.org/$1 permanent;
    }
    server {
        listen       80;
        server_name  www.etiantian.org;
        location / {
            root   html/www;
            index  index.html index.htm;
        }

autoindex on;
	access_log  logs/access_www.log  main;
    }
[root@web02 /application/nginx/conf/extra]# cat ../../html/www/index.html 
www8

PS:修改配置之后检查语法,重新加载

三、测试

1、虚拟机测试

[root@lb01 /application/nginx/conf]#curl www.etiantian.org
www7
[root@lb01 /application/nginx/conf]#curl www.etiantian.org
www8
[root@lb01 /application/nginx/conf]#curl www.etiantian.org
www7
[root@lb01 /application/nginx/conf]#curl www.etiantian.org
www8
[root@lb01 /application/nginx/conf]#for n in {1..100};do curl www.etiantian.org;sleep 1;done
www7
www8
www7
www8
....................测试成功

2、浏览器测试
我的是win10
在C:\Windows\System32\drivers\etc目录下找到hosts文件
在文件末尾加入10.0.0.5 www.etiantian.org,保存
浏览器输入www.etiantian.org,回车,不断刷新页面,发现www7与www8轮流显示。

四、日志

[root@web02 /application/nginx/logs]#cat access_www.log
10.0.0.5 - - [05/Oct/2020:20:10:49 +0800] "GET / HTTP/1.0" 200 5 "-" "curl/7.29.0" "-"
10.0.0.5 - - [05/Oct/2020:20:10:51 +0800] "GET / HTTP/1.0" 200 5 "-" "curl/7.29.0" "-"
此处ip是lb01代理的ip(之前在代理服务器curl  www.etiantian.org留下的日志),我们需要记录的是用户的IP

增加proxy_set_header X-Forwarded-For $remote_addr;
#<==这是反向代理时,节点服务器获取用户真实IP的必要功能配置。
在反向代理请求后端节点服务器的请求头中增加获取的客户端IP的字段信息,然后节点后端可以通过程序或者相关的配置接收X-Forwarded-For传过来的用户真实IP的信息。

[root@lb01 /application/nginx/conf]#vim /application/nginx/conf/nginx.conf
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    upstream backend {
        server 10.0.0.7:80  weight=1;
        server 10.0.0.8:80  weight=1;
    }

    server {
         listen       80;
         server_name  www.etiantian.org;
         location / {
                proxy_pass http://backend;
                proxy_set_header Host $host;
                proxy_set_header X-Forwarded-For $remote_addr;
         }
     }
}

浏览器输入www.etiantian.org访问,web02的日志就会看到VMware8的ip

扩展:
server 10.0.0.8:80 weight=1 backup;#backup参数相当于负载均衡高可用了,做备份。

更多参数
由于参数众 多,最好把这些参数放到一个配置文件里,然后用include方式包含到虚拟主机配置里, 效果如下:

[root@lb01 /application/nginx/conf]#vim /application/nginx/conf/nginx.conf
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    upstream backend {
        server 10.0.0.7:80  weight=1;
        server 10.0.0.8:80  weight=1;
    }

    server {
         listen       80;
         server_name  www.etiantian.org;
         location / {
                proxy_pass http://backend;
                include  proxy.conf;
         }
     }
}

[root@lb01 /application/nginx/conf]# cat proxy.conf
                proxy_set_header Host $host;
                proxy_set_header X-Forwarded-For $remote_addr;
                proxy_connect_timeout 60; 
				proxy_send_timeout 60;
				proxy_read_timeout 60; 
				proxy_buffer_size 4k; 
				proxy_buffers 4 32k; 
				proxy_busy_buffers_size 64k; 
				proxy_temp_file_write_size 64k;

proxy_connect_timeout 60;
定义与代理服务器建立连接的超时。请注意,此超时通常不能超过75秒。
proxy_send_timeout 60;
设置将请求传输到代理服务器的超时。超时仅在两个连续的写操作之间设置,而不用于整个请求的传输。如果代理服务器在此时间内未收到任何信息,则连接将关闭。
proxy_read_timeout 60;
定义用于从代理服务器读取响应的超时。超时仅在两次连续的读取操作之间设置,而不用于传输整个响应。如果代理服务器在此时间内未传输任何内容,则连接将关闭。
proxy_buffer_size 4k;
设置size用于读取从代理服务器接收到的响应的第一部分的缓冲区的。这部分通常包含一个小的响应头。默认情况下,缓冲区大小等于一个内存页。根据平台的不同,它可以是4K或8K。但是,它可以做得更小。
proxy_buffers 4 32k;
为单个连接设置用于从代理服务器读取响应的缓冲区的number和size。默认情况下,缓冲区大小等于一个内存页。根据平台的不同,它可以是4K或8K。
proxy_busy_buffers_size 64k;
当缓冲启用从代理的服务器响应,限制总size的缓冲区,可以是正忙于发送到客户端的响应,而响应尚不充分阅读的。同时,其余的缓冲区可用于读取响应,并在需要时将响应的一部分缓冲到临时文件中。默认情况下,size受限于proxy_buffer_size和proxy_buffers指令设置的两个缓冲区的大小 。
proxy_temp_file_write_size 64k;
size当启用了从代理服务器到临时文件的响应的缓冲时,一次 限制写入临时文件的数据的数量。默认情况下,size受proxy_buffer_size和proxy_buffers指令设置的两个缓冲区的限制 。临时文件的最大大小由proxy_max_temp_file_size指令设置 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Tony带水!

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

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

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

打赏作者

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

抵扣说明:

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

余额充值