千家信息网

Nginx简介以及使用Nginx实现负载均衡的过程

发表于:2025-11-10 作者:千家信息网编辑
千家信息网最后更新 2025年11月10日,本篇内容主要讲解"Nginx简介以及使用Nginx实现负载均衡的过程",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Nginx简介以及使用Nginx实现负载
千家信息网最后更新 2025年11月10日Nginx简介以及使用Nginx实现负载均衡的过程

本篇内容主要讲解"Nginx简介以及使用Nginx实现负载均衡的过程",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Nginx简介以及使用Nginx实现负载均衡的过程"吧!

前言

最近在部署项目时要求实现负载均衡,有趣的是发现网上一搜全部都是以下类似的配置文件

upstream localhost{  server 127.0.0.1:8080 weight=1;  server 127.0.0.1:8081 weight=1;  }  server {  listen 80;  server_name localhost;  location / {  proxy_pass http://localhost;  index index.html index.htm index.jsp;    }  }

所以打算来看看Nginx内部原理,这篇博客主要介绍Nginx如何实现反向代理以及在Nginx中负载均衡的参数使用

一、正向代理与反向代理

正向代理是代理客户端,也就是客户端能真正接触到的,比如访问外网时需要使用VPN软件,在这个软件中用户可以选择连接哪里的服务器。

反向代理则是代理服务端,用户感知不到,只是客户端把请求发到服务端的端口时,Nginx监听到了便把该端口的请求转发到不同的服务器上。就以上面配置文件来讲解,当在网址中输入http://localhost:80/时(不加80一样时默认进入80端口,这里为了表示清楚),而后Nginx监听到80端口的请求之后,就会查找对应的location来执行。由上面的配置文件我们可以看出是将请求转发到了不同的端口。这是在服务器中执行的,用户不可见。

而服务端中我们最常使用的反向代理的工具就是Nginx。

二、Nginx内部基本架构

nginx在启动后以daemon的方式在后台运行,会有一个master进程和多个worker进程。

master进程:主要用来管理worker进程,包含:接收来自外界的信号,向各worker进程发送信号,监控worker进程的运行状态,当worker进程退出后(异常情况下),会自动重新启动新的worker进程。

worker进程:处理基本的网络事件了。多个worker进程之间是对等的,他们同等竞争来自客户端的请求,各进程互相之间是独立的。一个请求,只可能在一个worker进程中处理,一个worker进程,不可能处理其它进程的请求。worker进程的个数是可以设置的,一般我们会设置与机器cpu核数一致,或者直接设置参数worker_processes auto;

所以Nginx基本的架构就如下:

当我们输入./nginx -s reload,就是来重启nginx,./nginx -s stop,就是来停止nginx的运行,这里面是如何做到的?执行命令时,我们是启动一个新的nginx进程,而新的nginx进程在解析到reload参数后,就知道我们的目的是控制nginx来重新加载配置文件了,它会向master进程发送信号。master进程在接到信号后,会先重新加载配置文件,然后再启动新的worker进程,并向所有老的worker进程发送信号,告诉他们可以光荣退休了。新的worker在启动后,就开始接收新的请求,而老的worker在收到来自master的信号后,就不再接收新的请求,并且在当前进程中的所有未处理完的请求处理完成后,再退出。所以使用上面命令重启Nginx的时候服务是不中断的。

三、Nginx如何处理客户端请求

首先来解释一下上面的架构图:每个worker进程都是从master进程分支过来的,在master进程里面,先建立好需要监听的socket之后,然后再分支出多个worker进程。所有worker进程的listenfd(socket中listenfd是指客户端连接本机时的fd,是用来和客户端通信用的)会在新连接到来时变得可读,为保证只有一个进程处理该连接,所有worker进程在注册listenfd读事件前抢accept_mutex,抢到互斥锁的那个进程注册listenfd读事件,在读事件里调用accept接受该连接。

在Nginx中worker进程之间是平等的,每个进程,处理请求的机会也是一样的。当Nginx监听80端口时,一个客户端的连接请求过来,每个进程都有可能处理这个连接,上面说到是每个worker进程都会去抢注listenfd读事件。当一个worker进程在accept这个连接之后,就开始读取请求,解析请求,处理请求,产生数据后,再返回给客户端,最后才断开连接,这样一个完整的请求就是这样的了。这里需要注意的是一个请求,完全由worker进程来处理,而且只在一个worker进程中处理。

下面两幅流程图能很好的帮我们理解

四、Nginx如何处理事件并且实现高并发

Nginx内部采用了异步非阻塞的方式来处理请求,也就是说,Nginx是可以同时处理成千上万个请求的。

异步非阻塞:当一个网络请求过来时,我们并不依赖于这个请求才能做后续操作,那么这个请求就是异步操作,也就是调用者在没有得到结果之前同样可以执行后续的操作。非阻塞就是当前进程/线程没有得到请求调用的结果时也不会妨碍到进程/线程后续的操作。可以看出异步和非阻塞的对象是不同的。

五、Nginx负载均衡的算法及参数

round robin(默认):轮询方式,依次将请求分配到后台各个服务器中,适用于后台机器性能一致的情况,若服务器挂掉,可以自动从服务列表中剔除

weight:根据权重来分发请求到不同服务器中,可以理解为比例分发,性能较高服务器分多点请求,较低的则分少点请求

IP_hash:根据请求者ip的hash值将请求发送到后台服务器中,保证来自同一ip的请求被转发到固定的服务器上,解决session问题

upstream localhost {  ip_hash;  server 127.0.0.1:8080;  server 127.0.0.1:8080;  }

上面是最基本的三种算法,我们还可以通过改变参数来自行配置负载均衡

upstream localhost{  ip_hash;  server 127.0.0.1:9090 down;  server 127.0.0.1:8080 weight=2;  server 127.0.0.1:6060;  server 127.0.0.1:7070 backup;  }

参数列表如下:

到此,相信大家对"Nginx简介以及使用Nginx实现负载均衡的过程"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

进程 服务 处理 客户 服务器 代理 均衡 客户端 信号 参数 就是 端口 配置 事件 文件 不同 后台 阻塞 简介 过程 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 呼和浩特工信局网络安全科 有关校园网络安全的黑板报 湖北智能软件开发专业服务 建筑设计跟软件开发哪个好 舟山财务软件开发公司 浪潮服务器技术指导 c 如何修改文档中数据库 服务器进bios看硬盘 怎样在命令中连接数据库 网络安全应急预案方案流程图 智慧城市软件开发方向 架设excel服务器 市北区电脑软件开发 12121天气预报软件开发 开电脑时显示服务器是怎么回事 服务器 大数据管理 select写入数据库 江西安防卫星授时服务器虚拟主机 h2为什么叫内存数据库 软件开发接单分包 关系型数据库必须满足什么特性 服务器只允许固定地址远程 5G云网融合催生新网络技术 vba查询数据库后填在单元格中 网络安全i区ii区 武汉达梦数据库管理系统优缺点 手机网易uu加速无法连接服务器 河北办公系统软件开发价位 软件开发交流微信群 网络安全法规定 发现源于
0