Nginx知识网络结构图、反向代理、负载均衡实践
来源:知乎
1. Nginx知识网络结构图
Nginx是一个功能强大的HTTP和反向代理服务器,特点是内存占用少、并发能力强。事实上,在同类型的Web服务器之间,nginx的并发能力表现更好。
nginx 是专门为性能优化而开发的。性能是最重要的要求,并且非常注重效率。有报道说nginx最多可以支持5万个同时连接
1.1 反向代理
正向代理
正向代理:局域网内的计算机用户直接访问网络是不可行的,只能访问它通过代理服务器。这种代理服务称为转发代理。![]()
反向代理
反向代理:客户端无法检测到代理,因为客户端不需要配置即可访问网络。只需要向反向代理服务器发送请求,反向代理服务器就会选择目标服务器来获取数据。然后再回到客户那里。此时,反向代理服务器和目标服务器对外形成一台服务器。代理服务器地址可见,真实服务器IP地址隐藏。 ![]()
1.2 负载均衡
客户端发送多个请求到服务器处理请求,有些可能需要与数据库通信。服务器完成处理后,将结果发送回客户端
简单的请求和响应过程 ![]()
随着信息量的增加,访问量和数据量也随之增加。随着高速增长,普通的架构已经不能满足现在的需求了
我们首先想到的就是升级服务器配置。由于摩尔定律越来越失效,单纯提高硬件性能已不再是可取的。这个问题该如何解答呢?
我们可以增加服务器数量,搭建集群,将请求分发到每台服务器上,改变原来请求集中在一台服务器上的情况,变成请求分发到多台服务器上,我们称之为负载均衡
负载均衡平衡![]()
假设有15个请求发送到代理服务器,那么代理服务器根据服务器数量均匀分配,每个服务器处理5个请求。这个过程称为负载平衡。
1.3动静分离
为了加快网站的解析速度,可以将动态页面和静态页面转移到不同的服务器上进行解析,从而加快解析速度,减轻一台服务器的压力
The动静分离前![]()
动静分离后![]()
2 .如何在Linux上安装nginx
https://blog.csdn.net/yujing1314/article/details/97267369
3. nginx 常用命令
查看版本
./nginx -v
启动
./nginx
关闭(有两个,这种方式建议使用 ./nginx -s quit)
./nginx -s stop
./nginx -s quit
重新加载 nginx 配置
./nginx -s reload
4.nginx 配置文件
配置文件由三部分组成
全局块
配置文件的开头到事件块之间,这个主要是设置一些配置指令,控制nginx-server的整体运行影响
并发处理服务的配置。值越大,可以支持的并发处理越多,但受到硬件、软件等设备的限制![]()
事件块
影响nginx服务器与用户之间的网络连接。常见的设置包括是否启用多个worker进程间网络连接的序列化、是否同时接收多个网络连接等
支持的最大连接数![]()
http块
比如反向代理和负载均衡都在这里配置
location指令的描述
- 这个语法用来匹配URL,语法如下
location[ = | ~ | ~* | ^~] url{
}
- =:用法 不包含正则表达式的URL之前,字符串必须与URL严格匹配。如果匹配成功,则停止搜索,并处理请求
- ~:用于表示 url 中包含正则表达式,区分大小写
- ~ *:用于表示 url 中包含正则表达式,并且不区分大小写字母
- ^~:在用于不包含正则表达式的URL之前,ngin服务器必须找到指示url和字符串相似度最高的位置。立即使用此位置处理请求,不再匹配
- 如果 URL 包含正则表达式,则无需以 ~ 标识符开头
4.1 反向代理实践
反向代理配置
目的:浏览在服务器地址栏输入地址http://www.123.com即可进入Linux系统tomcat的主页
具体实现
首先配置tomcat:因为比较容易,我不去那里查看详情,在Windows中打开![]()
具体流程![]()
更改之前![]()
配置![]()
再次访问![]()
reVerse代理2
1.目标
访问http://192.168.25.132:900 1/EDU/直达192.168.25.132:8080
访问http://192.168.25.132:9001/vod/直达192.168.25.13 2 : 8081
2。和8081都可以访问,只需更改端口配置文件即可。![]()
![]()
在新文件的内容中分别添加8080! ! !还有8081! ! ! ![]()
![]()
答案如下![]()
![]()
3。具体配置 ![]()
重新加载 Nginx
./nginx -s reload
访问 ![]()
![]()
通过切换 edu 和 vod 路径实现相同端口代理,显示不同页面
4.2 反向代理总结
第一个示例:
浏览器打开http://www.123.com,从host文件中解析出服务器的IP地址
192.168.25.132 http://www.123.com
然后进入默认80端口,使用nginx监听80端口,代理到本地8080端口,访问http://www.123.com,最后转发到tomcat 8080
第二个例子:
访问http:///192.168 .25.132:9001/edu/ 直接转192.168.25.132:8080
访问http://192.168.25.132:9001/vod/ 直接转192.168.25.132:8081
基本上通过 nginx 监听端口 9001 并然后选择通过正则表达式转发到8080或8081 tomcat
4.3负载均衡练习
1。编辑nginx.conf![]()
![]()
2.重启nginx
./nginx -s reload
3.在8081的tomcat webapps文件夹下新建edu文件夹和.html文件,输入内容为8081! ! ! !
4。地址栏按回车,就会分发到多台tomcat服务器上 ![]()
![]()
3.负载均衡方式
- 轮询(默认)
- 权重,代表权力,权重越高,优先级越高。高
- 合理,请求根据后端服务器的响应时间分配,响应时间短的请求先分配
- ip_hash,每个请求根据访问的IP地址的哈希结果分配,让每个访问者访问固定的后端服务器就可以解决会话问题
4.4 动静分离的实践
什么是动静分离
动态请求和静态请求分离意味着什么动态页面和静态页面的物理分离。可以认为是nginx处理静态页面,tomcat处理动态页面
动静分离基本上有两种:
第一种,纯粹将静态文件分离到单独的域名中,放在独立的服务器上,这也是目前的主流方案;
其次,动静态文件结合。通过nginx协同发布与分离
动静分离图分析
实际准备
准备静态文件![]()
![]()
配置Nginx![]()
5.nginx高可用
如果nginx出现问题![]()
解决方案![]()
前期准备
- 二nginx 服务器
- 安装keepalived
- 虚拟IP
5.1安装keepalived
[root@192 usr]# yum install keepalived -y
[root@192 usr]# rpm -q -a keepalived
keepalived-1.3.5-16.el7.x86_64
更改配置文件
[root@192 keepalived]# cd /etc/keepalived
[root@192 keepalived]# vi keepalived.conf
分别复制粘贴以下配置文件,覆盖keepalived.conf
虚拟IP地址为192.16 8. 25. 50 匹配主机 IP 需要更改的是
smtp_server 192.168.25.147(主) smtp_server 192.168.25.147(备份)
status MASTER(主) status BACKUP(备份)
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.25.147
smtp_connect_timeout 30
router_id LVS_DEVEL # 访问的主机地址
}
vrrp_script chk_nginx {
script "/usr/local/src/nginx_check.sh" # 检测文件的地址
interval 2 # 检测脚本执行的间隔
weight 2 # 权重
}
vrrp_instance VI_1 {
state BACKUP # 主机MASTER、备机BACKUP
interface ens33 # 网卡
virtual_router_id 51 # 同一组需一致
priority 90 # 访问优先级,主机值较大,备机较小
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.25.50 # 虚拟ip
}
}
开始
[root@192 sbin]# systemctl start keepalived.service
访问虚拟IP成功![]()
关闭主机147 nginx并保持活动状态,原来是
6.原理分析
如下图,启动了master和worker。 Master是管理员,Worker是具体的工作流程![]()
Worker是如何工作的![]()
总结
- Worker的数量必须等于CPU的数量
- Master可以使用热部署多名工人。同时,工人是独立的,一个人的失败不会影响其他人
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
code前端网