当前位置: 首页 > news >正文

nginx反向代理负载均衡

反向代理原理:

反向代理服务器架设在服务器端,通过缓冲经常被请求的页面来缓解服务器的工作量,将客户机请求 转发给内部网络上的目标服务器;并将从服务器上得到的结果返回给Internet上请求连接的客户端,此 时代理服务器与目标主机一起对外表现为一个服务器。

实验部分:Nginx反向代理实战

现在许多大型web网站都用到反向代理。除了可以防止外网对内网服务器的恶性攻击、缓存以减少服务 器的压力和访问安全控制之外,还可以进行负载均衡,将用户请求分配给多个服务器。

环境准备:4台Rockey Linux8.10,192.168.118.{129,131}提供nginx服务,192.168.118.130为代理,192.168.118.128(测试)

搭建负载均衡服务的需求如下:

1 ) 把单台计算机无法承受的大规模并发访问或数据流量分担到多台节点设备上,分别进行处理, 减少 用户等待响应的时间, 提升用户体验。

2 ) 单个重负载的运算分担到多台节点设备上做并行处理, 每个节点设备处理结束后, 将结果汇总, 返 回给用户, 系统处理能力得到大幅度提高。

3 ) 7 x 24 小时的服务保证, 任意一个或多个有限后面节点设备宕机, 不能影响业务。 在负载均衡集群中, 同组集群的所有计算机节点都应该提供相同的服务。 集群负载均衡器会截获所有对 该服务的入站请求。 然后将这些请求尽可能地平均地分配在所有集群节点上。

nginx配置部分

web配置

全部都要安装nginx

yum install nginx -y

 配置用于测试的web服务(两台提供web服务的服务器)/etc/nginx/conf.d/vhost.conf

server {
    listen       80;
    server_name  bbs.test.com;
 location / {
    root   /usr/share/nginx/html/bbs;
    index  index.html index.htm;
     }
    access_log /usr/share/nginx/html/bbs/logs/access_bbs.log main;
 }

server {
    listen       80;
    server_name  www.test.com;
    location / {
        root     /usr/share/nginx/html/www;
        index  index.html index.htm;
    }
    access_log /usr/share/nginx/html/www/logs/access_www.log main;
 }

 文件环境:日志可以加一个write权限,然后关掉selinux(setenforce 0)

rm -rf /usr/share/nginx/html/*
mkdir -p /usr/share/nginx/html/{www,bbs}/logs
echo "bbs: This is a test page which from ip: $(hostname -I)" > /usr/share/nginx/html/bbs/index.html
echo "bbs: This is a test page which from ip: $(hostname -I)" > /usr/share/nginx/html/www/index.html

#--------------------
[root@localhost html]# tree /usr/share/nginx/html/
/usr/share/nginx/html/
├── bbs
│   ├── index.html
│   └── logs
│       └── access_bbs.log
└── www
    ├── index.html
    └── logs
        └── access_www.log

 检查语法:nginx -t

重启systemctl start nginx

然后先测试下本机是否可以正常访问:curl -H用于添加自定义的 HTTP 请求头

[root@localhost html]# curl -H host:www.test.com 192.168.118.129
www: This is a test page which from 192.168.118.129
[root@localhost html]# curl -H host:bbs.test.com 192.168.118.129
bbs: This is a test page which from 192.168.118.129
[root@localhost html]# curl -H host:www.test.com 192.168.118.131
www: This is a test page which from 192.168.118.131
[root@localhost html]# curl -H host:bbs.test.com 192.168.118.131
bbs: This is a test page which from 192.168.118.131

现在开始配置简单的负载均衡,为了减少麻烦先关闭所有实验主机的firewalld或者自己添加放行端口

配置代理服务

默认负载均衡逻辑为轮询,负载均衡算法在upstream中添加算法名称即可

upstream www_server_pools {
        server 192.168.118.129:80 weight=1;
        server 192.168.118.131:80 weight=1;
}

server {
        listen  80;
        server_name www.test.com;
        location / {
                proxy_pass http://www_server_pools;
                #传递原始的host头部信息
                proxy_set_header Host $host;
        }
}

server {
        listen  80;
        server_name bbs.test.com;
        location / {
                proxy_pass http://www_server_pools;
                #传递原始的host头部信息
                proxy_set_header Host $host;
        }
}

上面逻辑是:当匹配到传入的server_name之后,访问location里面的内容,其中设置了一行proxy_set_header表示将传入的host头部信息给传递给upstream里面的主机,由于upstream中设置了权重比为1:1,所以会轮流访问129和131主机

配置测试主机的hosts文件(主机:192.168.118128)

[root@localhost conf.d]# tail -1 /etc/hosts
192.168.118.130 www.test.com bbs.test.com

效果:

[root@localhost conf.d]# for ((i=1;i<=6;i++)); do curl www.test.com; done
www: This is a test page which from 192.168.118.129
www: This is a test page which from 192.168.118.131
www: This is a test page which from 192.168.118.129
www: This is a test page which from 192.168.118.131
www: This is a test page which from 192.168.118.129
www: This is a test page which from 192.168.118.131
[root@localhost conf.d]# for ((i=1;i<=6;i++)); do curl bbs.test.com; done
bbs: This is a test page which from 192.168.118.129
bbs: This is a test page which from 192.168.118.131
bbs: This is a test page which from 192.168.118.129
bbs: This is a test page which from 192.168.118.131
bbs: This is a test page which from 192.168.118.129
bbs: This is a test page which from 192.168.118.131

此时我们查看后端的访问日志内容的话,会发现访问的内容的源IP都是从代理来的,我们不希望看到这一点:

 我们需要在代理配置中添加这一行参数:

proxy_set_header X-Forwarded-For $remote_addr; #这是反向代理时,节点服务器获取用户真实IP的必要功能配置

然后nginx -s reload,看看后端日志,成功

 

相关文章:

  • 数据结构 day02
  • 2024年度中国家居冠军榜公布,冠珠瓷砖荣获“行业领军品牌”
  • 深度学习(1)-简单神经网络示例
  • 力扣 乘积最大子数组
  • 【数据结构基础_链表】
  • 基因组数据分析中涉及基因结构的问题
  • 论文解读之DeepSeek R1
  • 【函数题】6-10 二分查找
  • 全方位探索DeepSeek
  • ROS turtlesim 无法通过 键盘控制 turtle 移动
  • DeepSeek与ChatGPT:AI语言模型的全面对决
  • 单链表的概念,结构和优缺点
  • 使用Python和OpenCV实现图像像素压缩与解压
  • Llama3.0论文学习笔记: The Llama 3 Herd of Models
  • 硬件实用技巧:核心板与底板之间的连接方式:DIP、板对板连接器、金手指和邮票孔
  • volatile关键字
  • 贝壳和鹅卵石分类数据集4250张2类别
  • ReactiveSwift模拟登录功能
  • Java+数据可视化的红酒信息分享系统(程序+论文+讲解+安装+调试+售后等)
  • C++17中的LegacyContiguousIterator(连续迭代器)
  • 构筑高地共伴成长,第六届上海创新创业青年50人论坛在沪举行
  • 印巴战火LIVE丨“快速接近战争状态”?印度袭击巴军事基地,巴启动反制军事行动
  • 上海消防全面推行“检查码”,会同相关部门推行“综合查一次”
  • 聆听百年唐调正声:唐文治王蘧常吟诵传习的背后
  • 习近平向中国人民解放军仪仗队致意
  • 习近平同俄罗斯总统普京举行会谈