nginx负载均衡upstream和proxy_pass----(linux运维23)

1.集群的准备

集群:一群做着相同工作的服务器

1.1虚拟环境的集群搭建

将首先关闭web01虚拟机,进行克隆。开机配置ip hostname
web集群的配置如下:

主机名称ip
web01192.168.246.7
web02192.168.246.8
web03192.168.246.9
修改主机名
hostnamectl set-hostname web02
修改ip
sed -i 's#\.8#.9#g' /etc/sysconfig/network-scripts/ifcfg-eth[01]
sed -i '/UUID/d' /etc/sysconfig/network-scripts/ifcfg-eth[01]
重启网络
systemctl restart network

重新连接即可

1.2 企业里边集群的部署

1.先部署好一个lnmp服务器,上传代码信息
2.进行访问测试
3.批量部署多台web服务器(ansible)
4,。将nginx配置文件进行分发
5.将站点目录分发给所有主机

2. 负载均衡服务器的配置

原理:
在这里插入图片描述

2.1利用模板机克隆一台新的机器

修改 ip,主机名称。方式同上

hostnameip
lb01192.168.246.5

2.2 安装nginx

配置yum源:https://nginx.org/en/linux_packages.html

vim //etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

安装nginx:

yum -y install nginx

启动:

systemctl start nginx
systemctl enable nginx

2.3 编写负载均衡的nginx的配置文件

两个模块
1.负载均衡
ngx_http_upstream_module --upstream
2.反向代理(比如:内网–》内网—》外网(由内到外))
ngx_http_proxy_module --proxy_pass

2.4 简单的负载均衡配置文件

vim /etc/nginx/conf.d/lb.conf
upstream yq{
       server 192.168.246.7:80;
       server 192.168.246.8:80;
       server 192.168.246.8:80;
    }
    server {
        listen       80;
        server_name  www.yq.com;
        location / {
           proxy_pass http://yq;
        }
    }
systemctl restart nginx

这样简单的配置在是有一个网站的运行的时候是没有问题的,但是多个网站就会出现:
1.网站页面错乱
2.服务器出问题也买显示错误
3.无法搜集客户的地址ip进行统计分析

2.5 特别注意:upstream yq与 proxy_pass http://yq中的后边yq必须是一样的

2.6实现负载均衡功能

三台web操作(都要操作):

mkdir /html/{bbs,www} -p
web01
for name in www bbs ;do echo "$name 192.168.246.7">/html/$name/idenx.html;done

web02
for name in www bbs ;do echo "$name 192.168.246.8">/html/$name/idenx.html;done

web03
for name in www bbs ;do echo "$name 192.168.246.9">/html/$name/idenx.html;done
chown -R www.www /html

nginx配置文件:
/etc/nginx/conf.d/下创建www.conf bbs.conf
www.conf:

server{
  listen 80;
  server_name www.yq.com;
  access_log /var/log/nginx/www_log.log main;
  error_log /var/log/nginx/www_log.log warn;
  location /{
       root /html/www;
       index index.html;  
   }
}

bbs.conf:

server{
  listen 80;
  server_name bbs.yq.com;
  access_log /var/log/nginx/www_log.log main;
  error_log /var/log/nginx/www_log.log warn;
  location /{
       root /html/bbs;
       index index.html;
   }
}
systemctl reload nginx

配置windows的hosts文件

192.168.246.5 blog.yq.com www.yq.com

浏览器访问:

www.yq.com
bbs.yq.com

负载均衡服务器lb01:

vim /etc/hosts
172.16.1.5 www.yq.com bbs.yq.com
curl www.yq.com
curl bbs.yq.com

3. ngx_http_upstream_module详解

3.1 不同的调度功能 weight

1.默认的是平均的分配
2.自己分配(能力强的分配多)
修改配置文件的:

upstream yq{
       server 192.168.246.7:80 weight=3;
       server 192.168.246.8:80 weight=2;
       server 192.168.246.8:80 weight=1;
    }

这样访问六次,
3次在web01(192.168.246.7)
2次web02(192.168.246.8)
1次web01(192.168.246.9)

3.2 实现备用功能 backup

配置文件

upstream yq{
       server 192.168.246.7:80;
       server 192.168.246.8:80;
       server 192.168.246.8:80 backup;
    }

前两台服务器不能工作了,就会使用第三台

3.3 最大失败次数,失败后重新发送请求(max_fails=5 fail-timeout=10s)

配置文件

upstream yq{
       server 192.168.246.7:80 max_fails=5 fail_time=10s;
       server 192.168.246.8:80;
       server 192.168.246.8:80;
    }

web01连接五次失败后,10s会再次发送连接

3.4 不同的调度算法

1.rr轮训调度算法
2.wrr权重调度算法(weight)
3.ip_hash(出现反复登录的时候)

当我们登录网站时候会出现卡在登录界面,这个时候就是请求每次都是不同的web服务器了

解决办法:ip_hash

配置文件

upstream yq{
       ip_hash;
       server 192.168.246.7:80;
       server 192.168.246.8:80;
       server 192.168.246.8:80 backup;
    }

这种办法当访问少的时候就是根据他的MD5的是一直访问的是一个服务器,负载均衡不均的问题

3.2 缓存服务器也可以解决此问题(后续)

4.lest_conn(根据服务器的连接数分配资源)

4. ngx_http_proxy_module 模块

可以解决的问题:

4.1 访问不同的网址,不能显示不同网站问题

编辑配置文件:

upstream yq  {
       server 192.168.246.7:80;
       server 192.168.246.8:80;
       server 192.168.246.9:80;
    }
server {
         
        listen       80;
        server_name  www.yq.com;
        location / {
           proxy_pass http://yq;
           #不同的网址显示不同的界面
           proxy_set_header Host $host;
        }
    }

4.2 访问用户的地址信息无法进行统计

proxy_set_header X-Forwarded-For $remote_addr;

upstream yq  {
       server 192.168.246.7:80;
       server 192.168.246.8:80;
       server 192.168.246.9:80;
    }
server {
         
        listen       80;
        server_name  www.yq.com;
        location / {
           proxy_pass http://yq;
           #不同的网址显示不同的界面
           proxy_set_header Host $host;
           # 访问网站用户地址信息无法进行分析统计
	   proxy_set_header X-Forwarded-For $remote_addr;
        }
    }

日志文件的格式

cat /etc/nginx/nginx.conf
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  /var/log/nginx/access.log  main;
    
    $remote_addr   			显示用户访问源IP地址信息
    $remote_user            显示认证的用户名信息
	[$time_local]           显示访问网站时间
	"$request"              请求报文的请求行信息
    $status                 用户访问网站状态码信息
	$body_bytes_sent        显示响应的数据尺寸信息
	$http_referer           记录调用网站资源的连接地址信息(防止用户盗链)                             
	$http_user_agent        记录用户使用什么客户端软件进行访问页面的  (谷歌 火狐 IE 安卓 iphone)
	$http_x_forwarded_for   负载均衡ip

$http_x_forwarded_for就是访问的ip地址
访问网站查看日志文件:
web01上

cat /var/log/nginx/access_www.log
192.168.246.5 - - [20/Sep/2021:10:52:31 +0800] "GET /wenwen.html HTTP/1.0" 200 6 "-" 
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) 
Chrome/92.0.4515.131 Safari/537.36" "192.168.246.1"

192.168.246.5是负载均衡代理服务器的地址,最后192.168.246.1是访问的ip地址

4.3 错误页面会显示问题

upstream yq  {
       server 192.168.246.7:80;
       server 192.168.246.8:80;
       server 192.168.246.9:80;
    }
server {
         
        listen       80;
        server_name  www.yq.com;
        location / {
           proxy_pass http://yq;
           #不同的网址显示不同的界面
           proxy_set_header Host $host;
           #错误页面不显示给用户
           proxy_next_upstream error timeout http_404 http_502 http_403;
           # 访问网站用户地址信息无法进行分析统计
	   proxy_set_header X-Forwarded-For $remote_addr;
        }
    }
systemctl reload nginx

4.4 完整配置文件

upstream yq  {
       server 192.168.246.7:80;
       server 192.168.246.8:80;
       server 192.168.246.9:80;
    }
server {
         
        listen       80;
        server_name  www.yq.com;
        location / {
           proxy_pass http://yq;
           #不同的网址显示不同的界面
           proxy_set_header Host $host;
           #错误页面不显示给用户
           proxy_next_upstream error timeout http_404 http_502 http_403;
           # 访问网站用户地址信息无法进行分析统计
	   proxy_set_header X-Forwarded-For $remote_addr;
        }
    }
server {

        listen       80;
        server_name  bbs.yq.com;
        location / {
           proxy_pass http://yq;
           proxy_set_header Host $host;
           proxy_next_upstream error timeout http_404 http_502 http_403;
        }
    }

systemctl reload nginx

这个是博客网站的配置文件;可加可不加

server {
        listen       80;
        server_name  blog.yq.com;
        location / {
           proxy_pass http://yq;
           proxy_set_header Host $host;
           proxy_next_upstream error timeout http_404 http_502 http_403;
        }
    }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

长安有故里y

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

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

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

打赏作者

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

抵扣说明:

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

余额充值