一、什么是Nginx

Nginx(“engine x”) 是一个高性能的 Http 和反向代理 web 服务器,是一款轻量级的 Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在 BSD-like 协议下发行。其特点是占有内存小,并发能力强。

Nginx 可以作为静态页面的 web 服务器,同时还支持 CGI 协议 的动态语言,比如: perl、php 等。但是不支持Java,Java程序只能通过与 Tommcat 配合完成。Nginx 转为性能优化而开发,性能是极其重要的考量,实现上非常注重效率,能经受高负载的考验,有报告表名能支持高达 50,000 个并发连接数。

二、Nginx 中的基本概念

1、反向代理

1)正向代理
在客户端(浏览器)配置代理服务器,通过代理服务器进行互联网访问。
正向代理

2)反向代理
客户端对代理是无感知的。因此客户端不需要做任何配置就可以访问,只需要将请求发送到代理服务器去,由反向代理服务器转发给目标服务器获取数据,然后返回给客户端。所以此时,反向代理服务器和目标服务器对外就是一个服务器,暴露的是反向代理服务器的地址,隐藏了真实目标服务器的IP地址。
反向代理

2、负载均衡

当单个服务器解决不了大量请求时,增加服务器的数量,然后将请求分发到不同的服务器上,将原先请求集中到单个服务器的情况转变为将请求分发到多个服务器上,将负载分发到不同的服务器上,也就是我们所说的负载均衡。
负载均衡(最理想情况下平均分配)

3、动静分离

将动态资源和静态资源分开部署到不同的服务器上。然后 Nginx 根据需要到相应的服务器上去取资源。
动静分离

三、Nginx 中的常用命令

在使用 nginx 的命令时,必须切换到 /usr/local/nginx/sbin 目录下执行。

# 查看 nginx 的版本
./nginx -v

# 启动 nginx
./nginx

# 关闭 nginx
./nginx -s stop

# 重启 nginx
./nginx -s reload

四、Nginx 原理及优化参数配置

master-worker机制
nginx 采用的是 master-worker机制,一个 master 管控多个 worker,而当有客户端发送请求到 nginx 时,master 就会发送“信号”给多个 worker 取争抢这个请求,当第一个 worker 正抢到这个请求后,就不会再参与下一次的争抢。

(1)一个 master 与多个 worker 机制的好处

① 可以使用 nginx -s reload 热部署,利于 nginx 进行热部署操作;
② 每一个 worker 都是一个独立的进程,如果其中某一个 worker 出现问题,由于其他 worker 是独立的,所以会继续争抢,实现请求过程,不会受到影响,从而不会导致服务中断。

(2)设置多少个 worker 最为适宜

Nginx 同 redis 类似都采用了 io 多路复用机制, 每个 worker 都是一个独立的进程, 但每个进
程里只有一个主线程,通过异步非阻塞的方式来处理请求,即使是千上万个请求也不在话下。每个worker 的线程可以把一个 cpu 的性能发挥到极致。所以 worker 数和服务器的 cpu 数相等是最为适宜的。设少了会浪费cpu,设多了会造成 cpu频繁切换上下文带来的损耗。

(3)连接数 worker_connection

① 客户端发送请求时,会占用一个 worker 2个或者4个连接数。

原因:2个连接数:是因为该请求是静态资源请求,通过 nginx 来指向静态资源服务器,一条连接用来接收并处理请求,另外一条连接用来返回结果;4个连接数:由于 worker 不支持 java,所以该请求如果是动态资源请求,要去访问数据库,则需要通过 nginx 反向代理访问 tomcat,所以第一个连接用来 nginx 接收该请求,第二个连接 nginx 用来反向代理转发请求给 tomcat,第三个连接 tomcat 返回结果给 nginx,第四条连接 nginx 将 tomcat 的结果返回给客户端。

② nginx 有一个 master,有四个 worker,每个 worker 支持最大连接数是 1024,则 nginx 支持的最大并发数是多少?(即同一时间接收请求的最大数量)

普通静态访问:worker_connections worker_processes / 2 = 1024 4 / 2 = 2048;
如果是 http 作为反向代理(即动态资源访问):worker_connections worker_processes / 4 = 1024 4 / 4 = 1024。因为作为反向代理服务器,每个并发会建立与客户端的连接和与后端服务的连接, 会占用两个连接。

最后修改:2021 年 12 月 15 日 04 : 50 PM
如果觉得我的文章对你有用,请随意赞赏