nginx的master进程和worker进程用法解读

 更新时间:2025年07月10日 09:34:42   作者:新是一切的根源  
Nginx启动后包含master和worker进程,master负责管理worker及读取配置,worker处理请求,通过worker_processes设置worker数量(通常不超过CPU核心数)或auto自动检测,结合worker_cpu_affinity绑定CPU核心以优化性能

nginx的master进程和worker进程

当你启动nginx以后,使用ps命令查看nginx进程, 会发现nginx进程不只有一个,默认情况下, 你会看到至少两个nginx进程,如下:

[root@server1 ~]# ps -ef |grep nginx |grep -v grep
root      2120     1  0 10:03 ?        00:00:00 nginx: master process nginx
nobody    2173  2120  0 10:30 ?        00:00:00 nginx: worker process
[root@server1 ~]# 

编译安装nginx后,默认情况下worker进程是以"nobody"用户的身份运行的,如果我们想要指定worker进程的运行用户,则可以使用"user"指令,比如,

指定worker进程以nginx用户的身份运行

[root@server1 ~]# useradd -u 900 nginx
[root@server1 ~]# id nginx
uid=900(nginx) gid=1001(nginx) groups=1001(nginx)
[root@server1 ~]# 
user  nginx;
worker_processes  1;
[root@server1 ~]# vim /usr/local/nginx/conf/nginx.conf
[root@server1 ~]# nginx -s reload
[root@server1 ~]# ps -ef |grep nginx |grep -v grep
root      2120     1  0 10:03 ?        00:00:00 nginx: master process nginx
nginx     2206  2120  0 11:16 ?        00:00:00 nginx: worker process
[root@server1 ~]# 

当我启动nginx以后

有两个nginx进程,一个master进程,一个worker进程,这两个nginx进程都有各自的作用,见名知意, "worker"进程天生就是来"干活"的,真正负责处理请求的进程就是你看到的"worker"进程,那么"master"进程有什么用呢? “master"进程其实是负责管理"worker"进程的,除了管理” worker"进程,master"进程还负责读取配置文件、判断配置文件语法的工作,“master进程"也叫"主进程”,在nginx中,"master"进程只能有一个,而"worker"进程可以有多个,worker"进程的数量可以由管理员自己进行定义,那么怎么定义"worker"进程的数量呢?

没错,我们只需要借助一条配置指令即可,

这条配指令就是"worker _processes"指令

默认的nginx.conf配置文件中有这样一条配置

worker_ processes 1;

上述配置的意思就是启动nginx后只有1个worker进程,你想要多少个worker进程,将worker_ processe指令的值设置成多少就好了,非常简单, worker_ processes指令只能在main区域中使用,通常情况下,

worker_ processes的值通常不会大于服务器中cpu的核心数量,

换句话说就是,worker进程的数通常与服务器有多少

cpu核心有关,比如,nginx所在主机拥有4核cpu,那么worker_ processes的值通常不会大于4,这样做的原因是为了尽力让每个worker进程都有一个cpu可以使用,尽量避免了多个worker进程抢占同一个cpu的情况,我们也可以将worker_ processes的值设置为"auto"

当worker_ processes的值为auto时,nginx会自动检测当前主机的cpu核心数,并启动对应数量的worker进程,比如,

nginx检测到当前主机一共有4个cpu核心

那么nginx就会启动4个worker进程

user  nginx;
worker_processes  auto;
[root@server1 ~]# vim /usr/local/nginx/conf/nginx.conf
[root@server1 ~]# nginx -s reload
nginx: [alert] kill(2120, 1) failed (3: No such process)
[root@server1 ~]# nginx 
[root@server1 ~]# nginx -s reload
[root@server1 ~]# ps -ef | grep nginx |grep -v grep
root      2134     1  0 11:46 ?        00:00:00 nginx: master process nginx
nginx     2140  2134  0 11:46 ?        00:00:00 nginx: worker process
nginx     2141  2134  0 11:46 ?        00:00:00 nginx: worker process
nginx     2142  2134  0 11:46 ?        00:00:00 nginx: worker process
nginx     2143  2134  0 11:46 ?        00:00:00 nginx: worker process
[root@server1 ~]# 

同时,为了避免cpu在切换进程时产生性能损耗,我们也可以将worker进程与cpu核心进行"绑定",当worker进程与cpu核心绑定以后,worker进程可以更好的专注的使用某个cpu核心上的缓存,从而减少因为cpu切换不同worker进程而带来的缓存失效,如果想要让worker进程与某个cpu核心绑定,则需要借助另外一个配置指令,它就是"worker_ cpu_ affinity"指令

想要搞明白怎样使用"worker_ cpu_ affinity" 指令,最好先来了解一个概念,这个概念就是"cpu掩码",我们可以通过"cpu掩码"表示某个cpu核心,

比如,当前机器上一共有4个cpu核心,那么我们就用4个0表示这4个核,也就是说,我们可以使用如下字符表示这4个核:

0000

那么第一个核就用如下字符表示

0001

第二个核就用如下字符表示

0010

第三个核就用如下字符表示

0100

规律就是,有几个核,就用几个0表示,如果想要使用某个核,就将对应位的0改成1,位从右边开始

比如,如果有8个核,我就可以使用如下字符表示这8个核中的第二个核:

00000010

user  nginx;
worker_processes  auto;
worker_cpu_affinity 1000 0100 0010 0001;

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Nginx为静态资源配置缓存时间的操作步骤

    Nginx为静态资源配置缓存时间的操作步骤

    最近在优化网站性能时,发现很多静态资源(比如图片、CSS 文件等)每次都会从服务器重新加载,这不仅浪费了带宽,还增加了 服务器的负载,为了解决这个问题,我研究了一下如何在 Nginx 中为静态资源配置缓存时间,下面是我的配置过程,需要的朋友可以参考下
    2025-02-02
  • nginx如何使用openssl自签名实现https登录

    nginx如何使用openssl自签名实现https登录

    这篇文章主要介绍了nginx使用openssl自签名实现https登录,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-08-08
  • 开发环境服务器vs生产环境服务器:开发与生产须分明详解

    开发环境服务器vs生产环境服务器:开发与生产须分明详解

    开发环境服务器(如Vite)和生产环境服务器(如Nginx和Node.js)在职责和工作方式上存在显著差异,开发环境服务器专注于快速开发和调试,而生产环境服务器则强调稳定性和高并发处理,Vite适合开发环境,而Nginx和Node.js更适合生产环境
    2025-01-01
  • Nginx实现自签名SSL证书生成与配置实现

    Nginx实现自签名SSL证书生成与配置实现

    本文主要介绍了Nginx实现自签名SSL证书生成与配置实现,文章将详细介绍生成自签名SSL证书的步骤,具有一定的参考价值,感兴趣的可以了解一下
    2023-09-09
  • Ubuntu+Nginx+Mysql+Php+Zend+eaccelerator安装配置文字版

    Ubuntu+Nginx+Mysql+Php+Zend+eaccelerator安装配置文字版

    把我架设lnmp网站的过程写出来,希望对想架设网站的朋友有所帮助,如有更好的办法请提出来
    2012-02-02
  • 一次nginx 504 Gateway Time-out错误排查、解决记录

    一次nginx 504 Gateway Time-out错误排查、解决记录

    这篇文章主要介绍了一次nginx 504 Gateway Time-out错误排查、解决记录,经过反复检查,发现造成这个问题的原因就是PHP的CURL没有设置超时时间,解决办法只要设置超时时间或者修改一下nginx的配置即可解决,需要的朋友可以参考下
    2014-05-05
  • Nginx动静分离实现案例代码解析

    Nginx动静分离实现案例代码解析

    这篇文章主要介绍了Nginx动静分离实现案例代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • Nginx重新编译添加模块的方法

    Nginx重新编译添加模块的方法

    这篇文章主要介绍了Nginx重新编译添加模块的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • Nginx基本运行原理解析

    Nginx基本运行原理解析

    这篇文章给大家介绍Nginx基本运行原理解析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2026-05-05
  • nginx之限流详解(请求/并发量)

    nginx之限流详解(请求/并发量)

    文章介绍Web运维中使用Nginx的limit_conn和limit_req模块限制IP连接数及请求频率,防范恶意攻击和爬虫,通过$binary_remote_addr或map模块处理代理层IP,设置503错误防止服务器过载
    2025-08-08

最新评论