一、什么是Nginx
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,公开版本1.19.6发布于2020年12月15日。
其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。2022年01月25日,nginx 1.21.6发布。
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好。
二、Nginx特点
1、反向代理
Nginx不仅可以反向代理,实现负载均衡,还能用作正向代理进行上网等功能。
(1)正向代理
如果把局域网外的Internet想象成一个巨大的资源库,则局域网中的客户端要访问Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。
正向代理:在客户端(浏览器)配置代理服务器,通过代理服务器进行互联网访问。
(2)、反向代理
反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,再返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏真实服务器IP地址。
2、负载均衡
增加服务器数量,将原先原先请求集中到单个服务器上的情况改为分发到多个服务器上,将负载较平均的分发到不同服务器,就叫负载均衡
3、动静分离
把动态页面和静态页面由不同服务器来解析,加快解析速度,降低原来单个服务器的压力。
三、Nginx和Apache的区别
Nginx是一个基于事件的Web服务器,Apache是一个基于流程的服务器。
Nginx所有请求都是由一个线程处理,Apache单个线程处理单个请求。
Nginx在内存消耗和连接方面更好,Apache在内存消耗和连接方便一般。
Nginx的性能和伸缩性不依赖于硬件,Apache依赖于CPU和内存等硬件。
Nginx支持热部署,Apache不支持热部署。
Nginx对于静态文件处理具有高效率,Apache相对一般。
Nginx在反向代理场景具有明显优势,Apache相对一般。
四、Nginx常用命令
cd /usr/local/nginx/sbin/
1.查看版本号
./nginx -v
2.关闭Nginx
./nginx -s stop
3.开启Nginx
./nginx
4.重启Nginx
./nginx -s reload
五、Nginx配置文件组成
(1)Nginx配置文件由三部分组成
vim /usr/local/nginx/conf/nginx.conf
第一部分 全局块
从配置文件开始到events块之间的内容,主要会设置一些影响nginx服务器整体运行的配置指令,主要包括配置运行Nginx服务器的用户(组)、允许生成worker process数,进程PID存放路径、日志存放路径和类型以及配置文件的引入等。
比如上面第一行配置的:
worker_processes 1;
这是Nginx服务器并发处理服务的关键配置,work_processes值越大,可以支持的并发处理量也越多,但是会受到硬件、软件等设备的制约。
第二部分 events块
events块涉及的指令主要影响Nginx服务器与用户的网络连接,常用的设置包括是否开启对多work process下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个word process可以同时支持的最大连接数。
比如worker_connection 1024;支持的最大连接数
第三部分 http块
Nginx配置最频繁的部分,代理,缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。需要注意的是:http块包括http全局块和server块。
①http全局块设备的指令包括文件引入、MIME-TYPE定义、日志自定义、连接超时时间、单链接请求数上限等。
②server块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器的硬件成本。每个http块也可以包括多个server块,而每个server块就相当于一个虚拟主机。每个server块也可以分为全局server块,以及可以同时包含的多个location块。
Ⅰ全局server块
最常见的配置是本虚拟机主机的监听配置和本虚拟机的名称和IP配置。
Ⅱlocation块
一个server块可以配置多个location块。这块的主要作用是基于Nginx服务器接收到的请求字符串(例如server_name/uri-string),对虚拟主机名称(也可以是IP别名)之外的字符串(例如前面的/usr-string)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这。