nginx启动时Master进程负责全局管理,解析listen指令并预检端口权限,通过IPC将监听配置分发给Worker;各Worker独立执行socket/bind/listen,支持SO_REUSEPORT多进程同端口监听。

Nginx 启动时,Master 进程并不直接处理网络请求,而是负责全局管理——其中最关键的一环,就是协调所有 Worker 进程完成各监听端口的初始化。
Master 进程统一解析配置并分发监听任务
Master 在读取 nginx.conf 时,会完整解析所有 listen 指令(如 listen 80、listen 443 ssl、listen [::]:8000),生成监听地址列表,并验证端口权限、地址复用(SO_REUSEPORT)等系统级约束。它不自己调用 bind() 或 listen(),而是将这些信息通过进程间通信(主要是共享内存 + 信号机制)同步给每个 Worker 进程。
Worker 进程各自执行 socket 初始化
每个 Worker 进程在启动阶段,依据 Master 分发的监听配置,独立执行以下操作:
- 对每个监听项调用
socket()创建套接字 - 设置套接字选项(如
SO_REUSEADDR、SO_REUSEPORT,取决于配置) - 调用
bind()绑定到指定 IP 和端口 - 调用
listen()启动监听队列
这意味着:多个 Worker 可以同时监听同一个端口(依赖内核支持 SO_REUSEPORT),也可以各自监听不同端口(如一个 Worker 处理 80,另一个专注 8080),具体行为由配置和系统能力共同决定。
端口冲突与权限问题由 Master 预检
Master 在 fork Worker 前会尝试预检关键端口是否可用(尤其对需要 root 权限的低端口,如 80/443)。若配置了非法地址、已被占用的端口,或当前用户无权绑定,Master 会直接报错退出,避免 Worker 启动后分散失败。这种集中校验机制提升了启动可靠性和错误定位效率。
热重载时 Master 接管新旧监听的平滑过渡
执行 nginx -s reload 时,Master 会解析新配置,为新增监听端口预创建 socket(必要时重新获取权限),再通知旧 Worker 逐步退出,同时引导新 Worker 加入监听。整个过程确保已有连接不受影响,新连接可立即命中新增端口——这正是 Master 协调能力的延续体现。