运行中的Nginx进程间的关系
第2章 Nginx的配置
Nginx拥有大量官方发布的模块和第三方模块,这些已有的模块可以帮助我们实现Web服务器上很多的功能。使用这些模块时,仅仅需要增加、修改一些配置项即可。因此,本章的目的是熟悉Nginx的配置文件,包括配置文件的语法格式、运行所有Nginx服务必须具备的基础配置以及使用HTTP核心模块配置静态Web服务器的方法,最后还会介绍反向代理服务器。
通过本章的学习,读者可以:熟练地配置一个静态Web服务器;对影响Web服务器性能的各个配置项有深入的理解;对配置语法有全面的了解。通过互联网或其他途径得到任意模块的配置说明,然后可通过修改nginx.conf文件来使用这些模块的功能。
2.1 运行中的Nginx进程间的关系
在正式提供服务的产品环境下,部署Nginx时都是使用一个master进程来管理多个worker进程,一般情况下,worker进程的数量与服务器上的CPU核心数相等。每一个worker进程都是繁忙的,它们在真正地提供互联网服务,master进程则很“清闲”,只负责监控管理worker进程。worker进程之间通过共享内存、原子操作等一些进程间通信机制来实现负载均衡等功能(第9章将会介绍负载均衡机制,第14章将会介绍负载均衡锁的实现)。
部署后Nginx进程间的关系如图2-1所示。
Nginx是支持单进程(master进程)提供服务的,那么为什么产品环境下要按照master-worker方式配置同时启动多个进程呢?这样做的好处主要有以下两点:
由于master进程不会对用户请求提供服务,只用于管理真正提供服务的worker进程,所以master进程可以是唯一的,它仅专注于自己的纯管理工作,为管理员提供命令行服务,包括诸如启动服务、停止服务、重载配置文件、平滑升级程序等。master进程需要拥有较大的权限,例如,通常会利用root用户启动master进程。worker进程的权限要小于或等于master进程,这样master进程才可以完全地管理worker进程。当任意一个worker进程出现错误从而导致coredump时,master进程会立刻启动新的worker进程继续服务。
多个worker进程处理互联网请求不但可以提高服务的健壮性(一个worker进程出错后,其他worker进程仍然可以正常提供服务),最重要的是,这样可以充分利用现在常见的SMP多核架构,从而实现微观上真正的多核并发处理。因此,用一个进程(master进程)来处理互联网请求肯定是不合适的。另外,为什么要把worker进程数量设置得与CPU核心数量一致呢?这正是Nginx与Apache服务器的不同之处。在Apache上每个进程在一个时刻只处理一个请求,因此,如果希望Web服务器拥有并发处理的请求数更多,就要把Apache的进程或线程数设置得更多,通常会达到一台服务器拥有几百个工作进程,这样大量的进程间切换将带来无谓的系统资源消耗。而Nginx则不然,一个worker进程可以同时处理的请求数只受限于内存大小,而且在架构设计上,不同的worker进程之间处理并发请求时几乎没有同步锁的限制,worker进程通常不会进入睡眠状态,因此,当Nginx上的进程数与CPU核心数相等时(最好每一个worker进程都绑定特定的CPU核心),进程间切换的代价是最小的。
举例来说,如果产品中的服务器CPU核心数为8,那么就需要配置8个worker进程(见图2-2)。
如果对路径部分都使用默认配置,那么Nginx运行目录为/usr/local/nginx,其目录结构如下。
- |---sbin
- | |---nginx
- |---conf
- | |---koi-win
- | |---koi-utf
- | |---win-utf
- | |---mime.types
- | |---mime.types.default
- | |---fastcgi_params
- | |---fastcgi_params.default
- | |---fastcgi.conf
- | |---fastcgi.conf.default
- | |---uwsgi_params
- | |---uwsgi_params.default
- | |---scgi_params
- | |---scgi_params.default
- | |---nginx.conf
- | |---nginx.conf.default
- |---logs
- | |---error.log
- | |---access.log
- | |---nginx.pid
- |---html
- | |---50x.html
- | |---index.html
- |---client_body_temp
- |---proxy_temp
- |---fastcgi_temp
- |---uwsgi_temp
- |---scgi_temp
运行中的Nginx进程间的关系相关推荐
- Linux命令之pstree - 以树状图显示进程间的关系
2019独角兽企业重金招聘Python工程师标准>>> pstree命令以树状图显示进程间的关系(display a tree of processes).ps命令可以显示当前正在运 ...
- Linux 服务器程序规范、服务器日志、用户、进程间的关系
文章目录 服务器程序规范 日志 rsyslogd 守护进程 syslog函数 openlog函数 setlogmask函数 closelog函数 用户 进程间的关系 进程组 会话 系统资源限制 改变工 ...
- [Linux] Linux命令之pstree - 以树状图显示进程间的关系
转载自: http://codingstandards.iteye.com/blog/842156 pstree命令以树状图显示进程间的关系(display a tree of processes). ...
- Nginx进程间的通信机制
概述 linux进程间通讯方式 在linux系统中进程之间的通讯方式有套接字.共享内存.消息队列.管道.信号 Nginx进程间通讯方式 Nginx选择其中的套接字.共享内存.信号作为同步master进 ...
- 【Android 逆向】修改运行中的 Android 进程的内存数据 ( 使用 IDA 分析要修改的内存特征 | 根据内存特征搜索修改点 | 修改进程内存 )
文章目录 一.使用 IDA 分析要修改的内存特征 二.根据内存特征搜索修改点 三.修改进程内存 一.使用 IDA 分析要修改的内存特征 在前的博客 [Android 逆向]逆向修改游戏应用 ( 分析应 ...
- 【Android 逆向】修改运行中的 Android 进程的内存数据 ( Android 命令行中获取要调试的应用进程的 PID | 进程注入调试进程内存的 so 库 )
文章目录 一.Android 命令行中获取要调试的应用进程的 PID 二.进程注入调试进程内存的 so 库 一.Android 命令行中获取要调试的应用进程的 PID 前置博客 [Android 逆向 ...
- 【Android 逆向】修改运行中的 Android 进程的内存数据 ( 运行环境搭建 Android 模拟器安装 | 拷贝 Android 平台可执行文件和动态库到 /data/system )
文章目录 一.运行环境搭建 Android 模拟器安装 二.拷贝 Android 平台可执行文件和动态库到 /data/system 目录下 一.运行环境搭建 Android 模拟器安装 使用低版本的 ...
- Nginx学习之九-负载均衡(客户端请求与Nginx进程间负载均衡)
本文介绍的负载均衡是针对的客户端请求在多个Nginx进程之间的均衡.注意与客户端请求在多个后端服务器之间的均衡相区别. 负载均衡问题的产生 在nginx中,建立连接的时候,会设计负载均衡问题.在多个子 ...
- Nginx进程间通讯方式
Nginx Socket Channel 父子进程通讯 socketpair 该方法用于创建父子进程间使用的套接字入参: type 表示套接字上使用TCP还是UDP sv[2] 表示一个含有两个元素的 ...
最新文章
- 源码资本张宏江:只有算法和技术,那你一定挣不到钱
- HDU 5289 Assignment(单调队列)
- 基于R语言构建的电影评分预测模型
- Java蓝牙电话_Android mediaPlayer和蓝牙汽车/耳机电话
- 翻译自 RedHat 文章:What is middleware? (什么是中间件?)
- Java 蓝桥杯 芯片测试
- k8s部署jar包_K8S部署SpringBoot应用_都超的博客-CSDN博客_k8s springboot
- linux获取打开串口失败的原因,linux – 从串口读取失败
- Ubuntu下替换软件列表
- JSP编程技术4-登录与注销(静态)
- 2020-09-26-舵机+两相4线步进电机
- xshell评估过期解决办法
- 服务器的mdf文件怎么打开,mdf文件,教您mdf文件怎么打开
- 查询linux下的业务端口,Linux系统查询显示端口信息用什么命令
- JavaScript 详细笔记(狂神说学习笔记)
- FPGA串口收发(四):接收数据并转发,间隔时间发送
- rot13初学者和python的实现
- 如何更改vmware的网络模式
- discuz密码找回:忘记UCENTER创始人密码
- python3.7安装keras教程_keras教程-02-tensorflow和keras安装