Nginx概述
Nginx是一款高性能的开源Web服务器和反向代理服务器,以及用于负载均衡、缓存和作为应用服务器的功能。它以其出色的性能、可扩展性和灵活性而闻名,广泛用于构建高流量的网站、应用程序和服务。
Nginx和Apache的差异
| Nginx | Apache |
|---|---|
| nginx是一个基于事件的web服务器 | apache是一个基于流程的服务器 |
| 所有请求都由一个线程处理 | 单个线程处理单个请求 |
| nginx避免子进程的概念 | apache是基于子进程的 |
| nginx类似于速度 | apache类似于功率 |
| nginx在内存消耗和连接方面比较好 | apache在内存消耗和连接上没有提高 |
| nginx在负载均衡方面表现较好 | 当流量到达进程极限时,apache将拒绝新的连接。 |
| nginx不支持IBMI和openvms一样的os | apache支持更多的os |
| nginx只具有核心功能 | apache提供了比nginx更多的功能 |
| nginx的性能和可伸缩性不依赖于硬件 | apache依赖于cpu和内存等硬件组件 |
| Nginx支持热部署 | Apache不支持热部署 |
优缺点对比
Nginx
- 占用资源少
- 抗并发
- 模块化设计,模块编写相对简易
- 支持热部署
Apache
- Rewrite功能比较强大
- 模块丰富
- bug少,较为稳定
- 擅长动态请求
总结
Apache会创建多个进程并为其分配资源,而Nginx则是采用单线程异步非阻塞处理请求,不会为每个请求分配资源,节省资源,得以支持更高的并发,需要性能的用Nginx,需要稳定则使用Apache,动态使用Apache,静态和反向代理可以使用Nginx
Nginx的进程
master process为主进程,管理工作进程 worker process为工作进程,处理用户的请求
同步、异步、阻塞、非阻塞
Nginx对于Apache最有力的是Nginx可以实现高并发,那么Nginx是如何实现高并发的呢?
正常来说一个server采用一个进程负责一个request的方式,那么进程数就是并发数,那导致的后果是会有很多进程在等待。 那么Nginx采用一个master进程多个woker进程的模式,master进程负责收集分发请求。每收到一个请求,master就拉起一个worker进程负责处理这个请求,同时master进程开始监控worker的状态保证可靠性
这种处理方式称作异步非阻塞工作方式,这种方式把当中的等待时间利用起来了,在需要等待的时候,这些进程就空闲出来待命,实现了高并发。
同步:一个服务的完成需要依赖其他服务时,只有等待被依赖的服务完成后,才算完成,这是一种可靠的服务序列。要么成功都成功,失败都失败,服务的状态可以保持一致
异步:一个服务的完成需要依赖其他服务时,只通知其他依赖服务开始执行,而不需要等待被依赖的服务完成,此时该服务就算完成了。被依赖的服务是否最终完成无法确定,因此它是一个不可靠的服务序列。
阻塞:阻塞调用是指调用结果返回之前,当前线程会被挂起,一直处于等待消息通知,不能够执行其他业务,函数只有在得到结果之后才会返回。
非阻塞:非阻塞和阻塞的概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。
编译安装Nginx
Nginx的基础命令
配置检查
启动Nginx
退出Nginx
显示版本号
将nginx加入服务
#!/bin.bash
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/bin/kill -s HUP $MAINPID
ExecStop=/usr/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target