概念:Nginx是高性能的HTTP和反向代理的web服务器,特点是占有内存少,由于它处理高并发能力非常强大,常用于高并发场景,能经受高负载的考验。
Nginx 专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率,能经受高负载的考验,有报告表明能支持高达 50,000 个并发连接数。
我们需要在客户端配置代理服务器,此时将代理服务器和客户端看成一个客户端,这样服务器就不知道是哪个客户端发送的请求,通过代理服务器进行访问,这就是正向代理
反向代理:客户端对反向代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端。
反向代理服务器和目标服务器对外就是一个服务器,所以我们需要把它们看成一个服务端,暴露的是代理服务器 IP 地址,隐藏了真实服务器 IP 地址,这样客户端就不知道请求最后到底发送给哪台服务器
单个服务器解决不了大量请求,所以我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,这就是我们所说的负载均衡
为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。
由于该文章是关于Nginx的操作笔记,所以这里不会讲解如何在Linux上安装Nginx
注意:使用Nginx操作命令前提,必须进入到Nginx目录 /usr/local/nginx/sbin
常用命令:
2.启动Nginx:./nginx
3.关闭Nginx:./nginx -s stop
4.重新加载Nginx:./nginx -s reload
首先我们需要知道Nginx配置文件的位置:
/usr/local/nginx/conf/nginx.conf
Nginx配置文件有3部分组成:
从配置文件开始到 events 块之间的内容,主要会设置一些影响 nginx 服务器整体运行的配置指令
比如:worker_processes 1
这是 Nginx 服务器并发处理服务的关键配置,worker_processes 值越大,可以支持的并发处理量也越多,但是会受到硬件、软件等设备的制约
2.events块
events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接
比如:worker_connections 1024
表示每个 work process 支持的最大连接数为 1024
这部分的配置对 Nginx 的性能影响较大,在实际中应该灵活配置。
3.http块
这算是 Nginx 服务器配置中最频繁的部分
需要注意的是:http 块也可以包括 http 全局块、server 块。
实现效果:
打开浏览器,输入地址www.123.com,跳转到Linux系统上的Tomcat主页面
注意:进行案例演示之前,请确保Linux上已经安装Nginx和Tomcat!
5.访问过程分析:
2.在nginx中进行请求转发配置(反向代理)
3.最终打开网址输入:www.123.com,测试成功
实现效果:
使用 nginx 反向代理,根据访问的路径跳转到不同端口的服务中
nginx 监听端口为 9001 访问
http://192.168.50.128:9001/edu/a.html 直接跳转到 127.0.0.1:8080
http://192.168.50.128:9001/vod/a.html 直接跳转到 127.0.0.1:8081
4.开放对外访问的端口号,语法如下:
firewall-cmd --add-port=端口号/tcp --permanent
5.进行测试
实现效果:浏览器输入
http://192.168.50.128/edu/a.html,负载均衡效果,将请求轮询形式转发到8080,8081端口
随着互联网信息的爆炸性增长,负载均衡(load balance) 已经不再是一个很陌生的话题,负载均衡即是将负载分摊到不同的服务单元,既保证服务的可用性,又保证响应足够快,给用户很好的体验。
Nginx 提供了几种分配方式(策略):
1.轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。
2.weight:weight 代表权,重默认为 1,权重越高被分配的客户端越多指定轮询几率,weight 和访问比率成正比,用于后端服务器性能不均的情况。
3.ip_hash:每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题。
4.fair(第三方):按后端服务器的响应时间来分配请求,响应时间短的优先分配。
通过 location 指定不同的后缀名实现不同的请求转发。通过 expires 参数设置,可以使浏览器缓存过期时间,减少与服务器之前的请求和流量。具体 Expires 定义:是给一个资源设定一个过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量。此种方法非常适合不经常变动的资源。(如果经常更新的文件,不建议使用 Expires 来缓存),我这里设置 3d,表示在这 3 天之内访问这个 URL,发送一个请求,比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码 304,如果有修改,则直接从服务器重新下载,返回状态码 200。
在Linux系统根目录中创建data文件夹,文件夹中存放两个文件夹分别为:
2.将nginx服务器进行重新启动
3.最终进行测试
在浏览器中输入地址:
http://192.168.50.128/image/01.jpg
因为配置文件 autoindex on
在浏览器中输入地址:
http://192.168.50.128/www/a.html
1.master & worker
2.worker如何进行工作
3.master-workers 的机制的好处
(1)可以使用 nginx –s reload 热部署,利用 nginx 进行热部署操作
(2)每个 woker是独立的进程,如果有其中的一个 woker 出现问题,其他 woker 独立的,继续进行争抢,实现请求过程,不会造成服务中断
4.设置多少个 woker 合适#
worker 数和服务器的 cpu 数相等是最为适宜的
5.连接数 worker_connection
第一个:发送请求,占用了 woker 的几个连接数?
答案:2 或者 4 个
第二个:nginx 有一个 master,有四个 woker,每个 woker 支持最大的连接数 1024,支持的最大并发数是多少?
普通的静态访问最大并发数是: worker_connections * worker_processes / 2,
而如果是 HTTP 作 为反向代理来说,最大并发数量应该是 worker_connections * worker_processes/4