Nginx架构和安装Nginx概述
Nginx:engine X,2002年开发,分为社区版和商业版(nginx plus),2019年3月11日 F5 Networks 6.7亿美元的价格收购,Nginx是免费的、开源的、高性能的HTTP和反向代理服务器、邮件代理服务器、以及TCP/UDP代理 服务器
解决C10K问题(10K Connections),解决C1000K问题参考链接:http://www.ideawu.net/blog/archives/740.html;Nginx官网:http://nginx.org;nginx的其它的二次发行版:Tengine:由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫 商城等得到了很好的检验。它的最终目标是打造一个高效、稳定、安全、易用的Web平台。从2011年12月开始,Tengine成为一个开源项目,官网:http://tengine.taobao.org/,OpenResty:基于Nginx与Lua语言的高性能Web平台,章亦春团队开发,官网:http://o penresty.org/cn/

Nginx功能介绍
静态的web资源服务器html,图片,js,css,txt等静态资源,http/https协议的反向代理,结合FastCGI/uWSGI/SCGI等协议反向代理动态资源请求,tcp/udp协议的请求转发(反向代理),imap4/pop3协议的反向代理

基础特性
模块化设计,较好的扩展性,高可靠性,支持热部署:不停机更新配置文件,升级版本,更换日志文件,低内存消耗:10000个keep-alive连接模式下的非活动连接,仅需2.5M内存event-driven,aio,mmap,sendfile。

Web服务相关的功能
虚拟主机(server),支持keep-alive和管道连接(利用一个连接做多次请求),访问日志(支持基于日志缓冲提高其性能),url rewirte,路径别名,基于IP及用户的访问控制,支持速率限制及并发数限制,重新配置和在线升级而无须中断客户的工作进程

Nginx架构
截屏20221012 14.39.29.png
Nginx进程结构
web请求处理机制
多进程方式:服务器每接收到一个客户端请求就有服务器的主进程生成一个子进程响应客户端,直到用户关闭连接,这样的优势是处理速度快,子进程之间相互独立,但是如果访问过大 会导致服务器资源耗尽而无法提供请求。
多线程方式:与多进程方式类似,但是每收到一个客户端请求会有服务进程派生出一个线程来个客户方进行交互,一个线程的开销远远小于一个进程,因此多线程方式在很大程度减轻了 web服务器对系统资源的要求,但是多线程也有自己的缺点,即当多个线程位于同一个进程内 工作的时候,可以相互访问同样的内存地址空间,所以他们相互影响,一旦主进程挂掉则所有 子线程都不能工作了,IIS服务器使用了多线程的方式,需要间隔一段时间就重启一次才能稳定。

Nginx是多进程组织模型,而且是一个由Master主进程和Worker工作进程组成。

主进程(master process)的功能:对外接口:接收外部的操作(信号);对内转发:根据外部的操作的不同,通过信号管理 Worker;监控:监控worker进程的运行状态,worker进程异常终止后,自动重启worker进程读取Nginx配置文件并验证其有效性和正确性;建立、绑定和关闭TCP/IP socket连接,按照配置生成、管理和结束工作进程,接受外界指令,比如重启、升级及退出服务器等指令 不中断服务,实现平滑升级,重启服务并应用新的配置,开启日志文件,获取文件描述符,不中断服务,实现平滑升级,升级失败进行回滚处理,编译和处理perl脚本。

工作进程(worker process)的功能:
所有Worker进程都是平等的,实际处理:网络请求,由Worker进程处理Worker进程数量:在nginx.conf中配置,一般设置为核心数,充分利用CPU资源,同时,避免进程数量过多,避免进程竞争CPU资源,增加上下文切换的损耗接受处理客户的请求,将请求依次送入各个功能模块进行处理I/O调用,获取响应数据与后端服务器通信,接收后端服务器的处理结果,缓存数据,访问缓存索引,查询和调用缓存数据,发送请求结果,响应客户的请求,接收主程序指令,比如重启、升级和退出等。

HTTP连接建立和请求处理过程:Nginx启动时,Master进程,加载配置文件;Master进程,初始化监听的socket;Master进程,fork出多个Worker进程;Worker进程,竞争新的连接,获胜方通过三次握手,建立Socket连接,并处理请求。

HTTP处理过程
截屏20221012 14.45.59.png
Nginx模块介绍
nginx有多种模块:
核心模块:是Nginx服务器正常运行必不可少的模块,提供错误日志记录、配置文件解析、事件驱动机制、进程管理等核心功能。
标准HTTP模块:提供HTTP协议解析相关的功能,比如: 端口配置、网页编码设置 、HTTP响应头设置等等。
可选HTTP模块:主要用于扩展标准的HTTP功能,让Nginx能处理一些特殊的服务,比如: Flash多媒体传输、解析GeoIP请求、网络传输压缩、安全协议SSL支持等 邮件服务模块:主要用于支持Nginx的邮件服务,包括对POP3协议、IMAP协议和SMTP协议的支持。
Stream服务模块: 实现反向代理功能,包括TCP协议代理。
第三方模块:是为了扩展Nginx服务器应用,完成开发者自定义功能,比如:Json支持、Lua支持等。

nginx高度模块化,但其模块早期不支持DSO机制;1.9.11 版本支持动态装载和卸载。
模块分类:1.核心模块:core module;2.标准模块:;3.HTTP模块:ngx_http_*;4.HTTP Core modules #默认功能;5.HTTP Optional modules #需编译时指定;6.Mail模块: ngx_mail_;7.Stream 模块 ngx_stream_;8.第三方模块
截屏20221012 14.53.29.png

Nginx 安装
Nginx版本分为Mainline version(主要开发版本)、Stable version(当前最新稳定版)和Legacy versions(旧的稳定版) Nginx安装可以使用yum或源码安装,但是推荐使用源码编译安装,yum的版本比较旧 编译安装可以更方便自定义相关路径,使用源码编译可以自定义相关功能,更方便业务的上的使用,源码安装需要提前准备标准的编译器,GCC的全称是(GNU Compiler collection),其有GNU开发,并以GPL即LGPL许可,是自由的类UNIX即苹果电脑Mac OS X操作系统的标准编译器,因为GCC原 本只能处理C语言,所以原名为GNU C语言编译器,后来得到快速发展,可以处理C++,Fortran,pascal,objective-C,java以及Ada等其他语言,此外还需要Automake工具,以完成自动创建Makefile的工作,Nginx的一些模块需要依赖第三方库,比如: pcre(支持rewrite),zlib(支持gzip模块)和 openssl(支持ssl模块)等。

基于yum安装Nginx
使用yum info nginx查看当前的nginx版本
注意:centos7是在epel源,版本也会因为epel源升级而有所变化,centos8是在Appstream仓库之中,因此版本较为老旧

#安装nginx
yum install -y nginx

如果想使用最新版的nginx可以使用官方的yum源
sudo yum install yum-utils

#创建nginx的仓库
vim /etc/yum.repos.d/nginx.repo

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

sudo yum-config-manager --enable nginx-mainline

sudo yum install nginx

使用源码编译安装
官方源码包下载链接:http://nginx.org/en/download.html编译安装会生成四个文件夹:
conf:保存nginx所有的配置文件,其中nginx.conf是nginx服务器的最核心最主要的配置文件,其他的.conf则是用来配置nginx相关的功能的,例如fastcgi功能使用的是fastcgi.conf和fastcgi_params两个文件,配置文件一般都有个样板配置文件,是文件名.default结尾,使用 的使用将其复制为并将default去掉即可。
html目录中保存了nginx服务器的web文件,但是可以更改为其他目录保存web文件,另外还有一个50x的web文件是默认的错误页面提示页面。
logs:用来保存nginx服务器的访问日志错误日志等日志,logs目录可以放在其他路径,比如/var/logs/nginx里面。
sbin:保存nginx二进制启动脚本,可以接受不同的参数以实现不同的功能。

#下载编译安装所需要使用的依赖包
yum -y install make gcc pcre-devel openssl-devel zlib-devel

#创建nginx用户
useradd -s /sbin/nologin nginx

#创建nginx的工作目录 
mkdir -p /www

#解压源码包至工作目录
tar -xvf nginx-1.20.1.tar.gz -C /www cd /www/nginx-1.20.1

#准备编译配置文件
./configure --prefix=/www/nginx \ 
--user=nginx \
--group=nginx \ 
--with-http_ssl_module \ 
--with-http_v2_module \ 
--with-http_realip_module \ 
--with-http_stub_status_module \ 
--with-http_gzip_static_module \ 
--with-pcre \
--with-stream \ 
--with-stream_ssl_module \ 
--with-stream_realip_module

#编译安装
make && make install

#修改权限
chown -R nginx.nginx /www/nginx

#配置环境变量
echo "PATH=${PATH}:/www/nginx/sbin" >> /etc/bashrc 
source /etc/bashrc

#创建service文件
vim /usr/lib/systemd/system/nginx.service

[Unit]
After=network-online.target
[Service]
Type=forking
PIDFile=/www/nginx/logs/nginx.pid
ExecStartPre=/www/nginx/sbin/nginx -t
ExecStart=/www/nginx/sbin/nginx
[Install]
WantedBy=multi-user.target

#重载service文件,启动nginx 
systemctl daemon-reload 
systemctl start nginx
上一篇 下一篇