【我的技术我做主】nginx反向代理负载均衡群集实战

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
简介:

使用nginx做负载均衡器,代理web服务器,用户请求的数据都指向nginx负载均衡器,nginx负责调度后端的web服务器提供服务。


环境搭建及说明:

nginx负载均衡器LNMP环境或只安装nginx服务;两块网卡,192.168.11.30(模拟公网ip),192.168.20.30(内网)

web服务器LAMP环境1:ip地址为内网 192.168.20.10 apache为2.4版本

web服务器LAMP环境2:ip地址为内网 192.168.20.11

web服务器LAMP环境3:ip地址为内网 192.168.20.12

三台web服务器网站目录,程序保持一致。内网ip保持与nginx负载均衡器同一个网段。


1、只有一个站点的配置:

web1、web2、web3上操作:

httpd配置文件加入,允许网站目录访问;开启vhost虚拟配置文件。

1
2
3
4
5
6
7
# vi /etc/httpd/httpd.conf
Include  /etc/httpd/extra/httpd-vhosts .conf
<Directory  /data/www >
     Options FollowSymLinks
     AllowOverride none
     Require all granted
< /Directory >

虚拟主机配置

1
2
3
4
5
# vi /etc/httpd/extra/httpd-vhosts.conf
<VirtualHost *:80>
     DocumentRoot  "/data/www"
     ServerName  www.yong.com
< /VirtualHost >

创建目录,写入index.html文件区分。

mkdir /data/www

在每一个web目录下写入index.html,内容分别为:This is LAMP 1 !;This is LAMP 2!;This is LAMP 3!

1
2
3
4
5
6
# curl 192.168.20.10
This is LAMP 1 !
# curl 192.168.20.11
This is LAMP 2!
# curl 192.168.20.12
This is LAMP 3!

nginx代理服务器操作:

写一个代理配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# cat /usr/local/nginx/conf/vhosts/nginxproxy.conf
upstream backend {
    server 192.168.20.10:80 weight=1 max_fails=3 fail_timeout=30s;
    server 192.168.20.11:80 weight=1 max_fails=3 fail_timeout=30s;
    server 192.168.20.12:80 weight=1 max_fails=3 fail_timeout=30s;
}
server {
    listen 80;
    server_name www.yong.com;
    index index.html;
    location / {
     proxy_pass http: //backend ;
   }
}


hosts添加本地ip地址解析,模拟公网ip对应域名;windows本地hosts也要增加解析;

1
2
# cat /etc/hosts
192.168.11.30 www.yong.com

使用curl测试,默认rr轮询,访问一次web1,一次web2,一次web3

使用for循环执行,查看访问结果:

1
2
3
4
5
6
7
8
9
10
11
# for n in `seq 10`;do curl www.yong.com;sleep 2;done
This is LAMP 2!
This is LAMP 1 !
This is LAMP 3!
This is LAMP 2!
This is LAMP 1 !
This is LAMP 3!
This is LAMP 2!
This is LAMP 1 !
This is LAMP 3!
This is LAMP 2!


2、多个站点的配置:

在web1,web2,web3,增加第2个站点 bbs.yong.com

httpd配置文件加入,允许网站目录访问;

1
2
3
4
5
<Directory  /data/bbs >
     Options FollowSymLinks
     AllowOverride none
     Require all granted
< /Directory >

虚拟主机配置增加

1
2
3
4
5
# vi /etc/httpd/extra/httpd-vhosts.conf
<VirtualHost *:80>
     DocumentRoot  "/data/bbs"
     ServerName bbs.yong.com
< /VirtualHost >

创建目录,写入index.html文件区分。

mkdir /data/bbs

在每一个web目录下写入index.html,内容分别为:This is BBS.yong.com 1!;This is BBS.yong.com 2!;This is BBS.yong.com 3!


nginx负载均衡服务器,虚拟主机增加server:

1
2
3
4
5
6
7
8
9
10
server {
     listen 80;
     server_name bbs.yong.com;
     index index.html;
     location / {
         proxy_pass http: //backend ;
         proxy_set_header Host $host;
         proxy_set_header X-Forwarded-For $remote_addr;
     }
}

hosts添加本地ip地址解析,模拟公网ip对应域名;windows本地hosts也要增加解析;

1
2
# cat /etc/hosts
192.168.11.30 www.yong.com bbs.yong.com


使用for循环执行,查看访问结果:

1
2
3
4
5
6
7
8
9
10
11
# for n in `seq 10`;do curl bbs.yong.com;sleep 2;done
This is BBS.yong.com 1!
This is BBS.yong.com 2!
This is BBS.yong.com 3!
This is BBS.yong.com 1!
This is BBS.yong.com 2!
This is BBS.yong.com 3!
This is BBS.yong.com 1!
This is BBS.yong.com 2!
This is BBS.yong.com 3!
This is BBS.yong.com 1!


3、upstream 下面增加ip_hash;

测试结果如下:保持用户连接,也会导致分配不均。

1
2
3
4
5
6
7
8
9
10
11
# for n in `seq 10`;do curl bbs.yong.com;sleep 2;done
This is BBS.yong.com 3!
This is BBS.yong.com 3!
This is BBS.yong.com 3!
This is BBS.yong.com 3!
This is BBS.yong.com 3!
This is BBS.yong.com 3!
This is BBS.yong.com 3!
This is BBS.yong.com 3!
This is BBS.yong.com 3!
This is BBS.yong.com 3!


4、增加一个upstream,单独针对bbs的请求进行负载均衡,并设置权重,配置文件如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
upstream backend {
     server 192.168.20.10:80 weight=2 max_fails=3 fail_timeout=30s;
     server 192.168.20.11:80 weight=1 max_fails=3 fail_timeout=30s;
}
upstream bbs {
     server 192.168.20.11:80 weight=1 max_fails=3 fail_timeout=30s;
     server 192.168.20.12:80 weight=2 max_fails=3 fail_timeout=30s;
}
server {
     listen 80;
     server_name www.yong.com;
     index index.html;
     location / {
         proxy_pass http: //backend ;
     }
}
server {
     listen 80;
     server_name bbs.yong.com;
     index index.html;
     location / {
         proxy_pass http: //bbs ;
         proxy_set_header Host $host;
         proxy_set_header X-Forwarded-For $remote_addr;
     }
}

实验结果如下

1
2
3
4
5
6
7
8
9
10
11
# for n in `seq 10`;do curl bbs.yong.com;sleep 2;done
This is BBS.yong.com 2!
This is BBS.yong.com 3!
This is BBS.yong.com 3!
This is BBS.yong.com 2!
This is BBS.yong.com 3!
This is BBS.yong.com 3!
This is BBS.yong.com 2!
This is BBS.yong.com 3!
This is BBS.yong.com 3!
This is BBS.yong.com 2!
1
2
3
4
5
6
7
8
9
10
11
# for n in `seq 10`;do curl www.yong.com;sleep 2;done
This is LAMP 2!
This is LAMP 1 !
This is LAMP 1 !
This is LAMP 2!
This is LAMP 1 !
This is LAMP 1 !
This is LAMP 2!
This is LAMP 1 !
This is LAMP 1 !
This is LAMP 2!

同理,如果有多台服务器,多个站点可以进行分配、关联对应。


51cto十周年博客活动正在进行,你也来参加吧

   活动地址http://51ctoblog.blog.51cto.com/26414/1679643






本文转自 模范生 51CTO博客,原文链接:http://blog.51cto.com/mofansheng/1681807,如需转载请自行联系原作者
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
目录
相关文章
|
7月前
|
弹性计算 负载均衡 网络协议
阿里云SLB深度解析:从流量分发到架构优化的技术实践
本文深入探讨了阿里云负载均衡服务(SLB)的核心技术与应用场景,从流量分配到架构创新全面解析其价值。SLB不仅是简单的流量分发工具,更是支撑高并发、保障系统稳定性的智能中枢。文章涵盖四层与七层负载均衡原理、弹性伸缩引擎、智能DNS解析等核心技术,并结合电商大促、微服务灰度发布等实战场景提供实施指南。同时,针对性能调优与安全防护,分享连接复用优化、DDoS防御及零信任架构集成的实践经验,助力企业构建面向未来的弹性架构。
557 76
|
5月前
|
缓存 负载均衡 网络协议
电商API接口性能优化技术揭秘:缓存策略与负载均衡详解
电商API接口性能优化是提升系统稳定性和用户体验的关键。本文聚焦缓存策略与负载均衡两大核心,详解其在电商业务中的实践。缓存策略涵盖本地、分布式及CDN缓存,通过全量或部分缓存设计和一致性维护,减少后端压力;负载均衡则利用反向代理、DNS轮询等技术,结合动态调整与冗余部署,提高吞吐量与可用性。文中引用大型及跨境电商平台案例,展示优化效果,强调持续监控与迭代的重要性,为电商企业提供了切实可行的性能优化路径。
|
6月前
|
应用服务中间件 Linux 网络安全
技术指南:如何把docsify项目部署到基于CentOS系统的Nginx中。
总结 与其他部署方法相比,将docsify项目部署到基于CentOS系统的Nginx中比较简单。以上步骤应当帮助你在不花费太多时间的情况下,将你的项目顺利部署到Nginx中。迈出第一步,开始部署你的docsify项目吧!
247 14
|
6月前
|
负载均衡 前端开发 应用服务中间件
Tomcat的负载均衡和动静分离(与nginx联动)
总的来说,负载均衡和动静分离是提高Web应用性能的两个重要手段。通过合理的配置和使用,我们可以让Web应用更好地服务于用户。
177 21
|
6月前
|
负载均衡 Java 应用服务中间件
Tomcat与Nginx的负载均衡与动静分离技巧
总的来说,Tomcat和Nginx各有各的优点,在负载均衡和动静分离这两方面它们都有很好的应用。灵活使用这两个工具能够让Web应用具有更好的扩展性和用户体验。
159 14
|
6月前
|
负载均衡 前端开发 JavaScript
LVS-DR模式、keepalived、Nginx与Tomcat合作,打造动静分离,高效负载均衡与高可用性
为了采用这样的架构,你需要对LVS-DR、Keepalived、Nginx与Tomcat有一定的理解和掌握,同时也需要投入一些时间去研究和配置,但是一旦你把它运行起来,你将会发现,这一切都是值得的。
203 11
|
8月前
|
负载均衡 算法 应用服务中间件
Nginx长连接负载均衡详细说明以及案例
本文详细介绍了Nginx长连接负载均衡的配置与原理。长连接(Keepalive)允许客户端和服务器保持连接,减少建立和关闭连接的开销。Nginx支持多种负载均衡算法,如轮询、IP哈希等。通过在Nginx配置文件中使用`upstream`模块和`keepalive`指令,可以实现长连接负载均衡,从而提高系统的性能和响应速度。示例配置展示了如何设置后端服务器组、长连接数及HTTP/1.1协议,确保连接复用,降低延迟。
457 5
|
8月前
|
负载均衡 应用服务中间件 nginx
如何使用nginx实现负载均衡?
如何使用nginx实现负载均衡?
|
缓存 负载均衡 算法
解读 Nginx:构建高效反向代理和负载均衡的秘密
解读 Nginx:构建高效反向代理和负载均衡的秘密
267 2
|
11月前
|
负载均衡 前端开发 应用服务中间件
负载均衡指南:Nginx与HAProxy的配置与优化
负载均衡指南:Nginx与HAProxy的配置与优化
660 3
下一篇
开通oss服务