nginx配置负载均衡(3主机1proxy)

题目

A(服务器)

基于ip的虚拟主机

http://a-ip1 RS1

http://a-ip2 RS2

http://a-ip3 RS3

B(服务器)

  1. 负载均衡

  1. 访问B机器 请求被转发到 a-ip1 a-ip2 a-ip3,分别接受到的请求量为 25% 25% 50%

  1. 如果有rs连续5次无法提供,则暂停转发请求 10s

  1. A要记录真实的客户端cip


基本思路(可以做思维导图!?)

  1. 由于硬件条件不足,可以创建多台虚拟机

[用临时创建多个ip的方式实现];[最好在网页中多好标记方便查看实验结果]

[在主服务器nginx里面配置三个server]

  1. 在proxy服务器配置文件内添加proxy模块

  1. 在proxy模块里ip地址后面添加max_fail,wight等配置

  1. 在主服务器里设置log的格式

🙋:一定要在修改完配置文件后用[nginx -t]来检测配置文件是否有错误!


配置步骤

📌

##在主服务器

  1. 创建临时ip

ip addr add dev ens33 10.3.148.251/24
ip addr add dev ens33 10.3.148.252/24
ip addr add dev ens33 10.3.148.253/24
  • 倒数后面的两个参数可以自定义----[ens33] and [10.3.148.253/24]

  • 目前假设临时ip分别是251,252,253结尾

  1. 重启服务

systemctl restart network 
  1. ping一下看通不通

ping xxx.xxx.xxx.xxx
  1. 修改配置文件(3个主服务器)

vim /etc/nginx/nginx.conf        ##编译安装路径
##以下内容一定要在http块里面写##

##第一个ip地址
server {
           listen 10.3.148.147:80;           ##监听此ip:端口号-80
           server_name _;                    ##设置域名;区别同ip下不同的路径
           location / {
              root /usr/share/nginx/html;    ##doc_root路径
              index index.html;              ##doc_root路径下目标路径下的html文件
           }

##第二个ip地址
server {
             listen 10.3.148.148:80;
             server_name _;
             location / {
                root /usr/share/nginx/html1;
                index index.html;
             }

##第三个ip地址
server {
           listen 10.3.148.149:80;
           server_name _;
           location / {
               root /usr/share/nginx/html2;
               index index.html;
           } 
######done#####

📌配置主机文件时需要注意的店

  • sever块一定要在http块里面

  • 注意{}的使用它们是成对存在的

  • 80端口通常需要写(default values)

  • 此实验室用不同端口来代表不同主机

  • 也可以创建临时的多个ip来代表不同主机

  1. 配置实验环境(添加目录及网站)

mkdir /usr/share/nginx/html{1,2}
echo rs2 > /usr/share/nginx/html1/index.html
echo rs3 > /usr/share/nginx/html2/index.html

📢此目的是 我们的实验是实现负载均衡

所以要有三台不同的主机;环境有限只能在一个虚拟机里面有三个虚拟ip

每个虚拟ip都要有不同的doc_root

但是我们安装的nginx的目录都是相同的

因此我们需要在/usr/share/nginx/下创建多个html{1,2,3}来区别doc_root

  1. 检测配置(重中之重)

nginx -t
  1. 重启nginx

systemctl restart nginx 
  1. 测试realserver是否能通讯

方法1
curl 192.168.40.252
curl 192.168.40.251
curl 192.168.40.250
方法2

直接在浏览器里面输入此网址

💊如果是以域名输入的时候

💊这个最好在输入前在window host的本机解析里面输入我们的DNS(不然会load很慢)

  1. 以上操作全部完成就可以去设置proxy服务器!恭喜下一步!



##在proxy服务器

  1. 编辑proxy配置文件[目的:让服务器成为proxy服务器]

因为有三个不同的ip所以在用模块[upstream]来包含住三个ip

upstream后面要加上一个别名!

一定要与server里面的proxy_pass的一样

[松哥原话###此时配置让proxy跳转到某一个主机组]

proxy服务器里面的配置文件

http{

    upstream ligoudan {
        server 10.3.148.251:80;        ##一定要在http里面
        server 10.3.148.251:81;        ##在server外面
        server 10.3.148.251:82;        ##目的为让proxy服务器能识别主服务的3个ip
    }

    server {
        listen       80;
        server_name  www.gz2301.com;

        location / {
           proxy_pass http://ligoudan;   ##服务器成为proxy的关键语句


           # 配置请求头相关。为了然后端rs能够收到c-ip
           proxy_set_header Host http_host;
           proxy_set_header X-Real-IP remote_addr;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
           

           # 限制 proxy-rs 之间的各种连接建立时间
           proxy_connect_timeout 30;
           proxy_send_timeout 60;
           proxy_read_timeout 60;
           

           # 加快 rs--> proxy,proxy--client 的速率
           proxy_buffering on;
           proxy_buffer_size 32k;
           proxy_buffers 4 128k;
           proxy_busy_buffers_size 256k;
           proxy_max_temp_file_size 256k;
        }
    }
}
  1. 检查语句是否错误&&重启电脑

nginx -t
systemctl restart nginx

以上操作负载均衡以及反向代理都完成。恭喜!

有一个问题(查询RS日志谁来访问过)

因为完成反向代理有用户访问我们的3个RS都会先经过PROXY服务器

统一有proxy服务器转发到3台RS服务器

假设查看RS的服务器日志都是由PROXY的ip地址访问的

无法区分由哪一位用户访问哪一个RS主机

因此我们要用修改日志格式来区分ip地址

主要是用http_x_forwarded_for的参数来区分(转发)

修改日志格式配置(通常都是主机以及proxy服务器一并修改)

vim /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   10.3.135.4                    客户端ip
$remote_user  -                             用户名
[$time_local] [21/Mar/2023:14:18:58 +0800]  日期
request       GET / HTTP/1.1                请求方法  URI 协议/版本
status        304                           http状态码
body_bytes_sent  0                          请求结构体发送大小
http_referer     -                          请的请求是从哪跳转的
http_user_agent   Mozillaxxx                客户端信息
http_x_forwarded_for  -                     请求从哪转发过来的

个人对转发和跳转的理解

跳转:

因为是跳所以理解为跨域的

举例---例如是我们访问百度搜查一个内容“好利来官网”,搜查到后我们点击进入好利来官网

这样就完成了跳转【从百度跳转至好利来官网】

转发:

转发我目前唯一的应用场景是proxy反向代理

一个用户访问192.168.40.1,此ip地址是proxy服务器,后面连接了好几台rs主机

他们存在一个局域网类

proxy相当于指挥员,指挥用户访问某一台rs主机,使这个请求转发到rs主机里面

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值