前言
环境:centos 7.9 nginx-1.18.0.tar.gz nginx 1.18.0
准备环境
1台名为LB1负载均衡服务器,2台web服务器,命名分别为web01、web02
,三台服务器都安装nginx-1.18.0.tar.gz
这个nginx
包,保证版本相同。
nginx负载均衡两个重要组件
http_proxy_module模块:proxy代理模块,用于把请求后抛给服务器节点或upstream服务器池;
http_upstream_module模块:负载均衡模块,可以实现网站的负载均衡功能和节点的健康检查;
nginx会默认安装以上两个模块;
安装nginx
nginx
的安装可以看本人的另外一篇文章https://blog.youkuaiyun.com/MssGuo/article/details/114285260
,这里就不多做解释,主要的安装命令如下:
useradd -s /bin/false -M nginx
yum install make gcc gcc-c++ zlib* pcre* openssl* #自己看哪个包没有的就自己安装(或者yum -y install pcre pcre-devel zlib-devel zlib openssl-devel openssl)
tar -zxvf nginx-1.18.0.tar.gz
cd nginx-1.18.0
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx
make
make install
配置负载均衡服务器LB1的nginx.conf文件
web01和web02的配置这里就不说了,保证web01和web02都搭建相同的网站就可了,这里主要讲解一下LB1的nginx.conf
文件是如何配置的,是如何配置才能使得LB1成为负载均衡服务器的,如下:
vim nginx.conf
user nginx;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
sendfile on;
keepalive_timeout 65;
#配置定义web服务器池,包含两个web节点
upstream server_polls{ #upstream 是关键字,server_polls是服务器池的名字,这个名字是自定义的
server 192.168.43.120:80 weight=1; #server是关键字,webight=1是参数,表示权重,还可以加很多参数
server 192.168.43.121:80 weight=1;
}
server { #虚拟主机
listen 80;
server_name 192.168.43.130;
server_tokens off;
access_log logs/fujiseiko_first.access.log main;
location / {
proxy_pass http://server_polls; #这一句,就表示客户访问192.168.43.130:80时转发请求到server_polls池里的节点
proxy_set_header Host $host; #表示LB向后请求节点服务器时添加主机头来明确访问的节点服务器的哪一个虚拟主机
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
以上配置就大概可以描述成这样: 将主机即负载均衡服务器192.168.43.130
的80
端口对外提供web
服务,用户A请求192.168.43.130
的80
端口的web
服务,而该LB主机实际上是将请求转发给了服务器池里的web01
或web02
服务器,upstream
可以定义多个,不同的location
可以匹配到不同的upstream
,这样,就做到了负载均衡。