Nginx (engine x) 是一个高性能的 Web 服务器和反向代理服务器,也可以作为邮件代理服务器。
Nginx 简介
Nginx 发展介绍
Nginx (engine x) 是一个高性能的 Web 服务器和反向代理服务器
,也可以作为邮件代理服务器。
Nginx 特点是占有内存少,并发处理能力强,以高性能、低系统资源消耗而闻名,Nginx 官方测试为5万并发请求
。与 Nginx 同类型的 Web 服务器还有 Apache、Lighttpd(音同 lighty)、Tengine(阿里巴巴的) 等。Nginx 的并发处理能力在同类型的 Web 服务器中表现极好(Apache、Lighttpd),在全世界范围内大量的网站使用了 Nginx,国内互联网中也大量使用了 Nginx,比如:淘宝、新浪、搜狐、网易、美团等。
Nginx 是免费开源的,同时 Nginx 也有收费的商业版本,商业版本提供了性能优化、宕机等紧急问题处理等技术支持和服务。
Nginx 是什么
Nginx 是一个高性能的 HTTP 和反向代理服务器,特点是占用内存少,并发能力强。Nginx 的并发能力在同类型的网页服务器中表现良好,中国大陆使用 Nginx 的网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
Nginx 可以作为静态页面的 web 服务器,同时还支持 CGI 协议的动态语言,比如 Perl、PHP 等,但是不支持 Java。
Nginx 的应用场景
反向代理。
负载均衡。
动静分离。
高可用集群
正向代理和反向代理概念
反向代理(Reverse Proxy)方式是指以代理服务器来接受 internet 上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给 internet 上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器;
正向代理类似一个跳板机,代理访问外部资源。比如:我是一个用户,我访问不了某网站,但是我能访问一个代理服务器,这个代理服务器,它能访问那个我不能访问的网站,于是我先连上代理服务器,告诉它我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我。
正向代理和反向代理举例
正向代理
在客户端(浏览器)配置代理服务器,通过代理服务器进行互联网访问。
比如你现在缺钱,想找马云爸爸去借钱,可想而知人家可能鸟都不鸟你,到最后碰一鼻子灰借不到钱。不过你认识你家隔壁老王,而老王认识马云同志,而且关系还很好。这时候你托老王去找马云借钱,当然这事最后成了,你从马云那里借到了 500 万!这时候马云并不知道钱是你借的,只知道这钱是老王借的。最后由老王把钱转交给你。在这里,老王就充当了一个重要的角色:代理。
此时的代理,就是我们常说的正向代理。代理客户端去请求服务器,隐藏了真实客户端,服务器并不知道真实的客户端是谁。正向代理应用最广泛的莫过于现在的某些“科学上网工具”,你访问不了谷歌、Facebook 的时候,你可以在国外搭建一台代理服务器,代理你访问,代理服务器再把请求到的数据转交给你,你就可以看到内容了。
反向代理
反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址。
比如你现在很无聊,想找人聊天,这时候你拨通了联通客服 10010 电话,联通的总机可能随机给你分配一个闲置的客服给你接通。这时候你如愿以偿的和客服聊了起来,问了问她目前有没有结婚、有没有对象、家住哪里、她的微信号、她的手机号。。。
此时联通总机充当的角色就是反向代理,你只知道和客服接通并聊了起来,具体为什么会接通这个客服 MM,怎么接通的,你并不知道。
反向代理隐藏了真正的服务端,就像你每天使用百度的时候,只知道敲打 www.baidu.com 就可以打开百度搜索页面,但背后成千上万台百度服务器具体是哪一台为我们服务的,我们并不知道。我们只知道这个代理服务器,它会把我们的请求转发到真实为我们服务的那台服务器那里去。
综上所述:正向代理代理对象是客户端,反向代理代理对象是服务端。
负载均衡
单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先
请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服
务器,也就是我们所说的负载均衡。
动静分离
为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速
度。降低原来单个服务器的压力。
总结
软件层面一般常用 Nginx 来做反向代理服务器,它的性能非常好,用来做负载均衡。
Nginx 使用
下载
免费开源版的官方网站:http://nginx.org
Nginx 有 Windows 版本和 Linux 版本,但更推荐在 Linux 下使用 Nginx
下载 nginx-1.14.2.tar.gz 的源代码文件
1 | wget http://nginx.org/download/nginx-1.14.2.tar.gz |
我的习惯,将下载或者上传的安装文件放到 /home/soft/
目录下。
安装
安装前的准备
Nginx 的安装需要确定 Linux 安装相关的几个库,否则配置和编译会出现错误:
1 | cc |
① 安装 nginx 需要先将官网下载的源码进行编译,编译依赖 gcc 环境,如果没有 gcc 环境,则需要安装
1 | # 检查是否安装 |
② PCRE(Perl Compatible Regular Expressions) 是一个 Perl 库,包括 perl 兼容的正则表达式库。nginx 的 http 模块使用 pcre 来解析正则表达式,所以需要在 linux 上安装 pcre 库,pcre-devel 是使用 pcre 开发的一个二次开发库。nginx 也需要此库。
1 | # 检查是否安装 |
③ zlib 库提供了很多种压缩和解压缩的方式, nginx 使用 zlib 对 http 包的内容进行 gzip ,所以需要在 Centos 上安装 zlib 库。
1 | # 检查是否安装 |
④ OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及 SSL 协议,并提供丰富的应用程序供测试或其它目的使用。
nginx 不仅支持 http 协议,还支持 https(即在 ssl 协议上传输 http),所以需要在 Centos 安装 OpenSSL 库。
1 | # 检查是否安装 |
⑤ 一次性安装,执行如下命令
1 | yum install gcc openssl openssl-devel pcre pcre-devel zlib zlib-devel -y |
正式安装
① 下载 nginx,两种方式
a. 直接下载.tar.gz
安装包,地址: https://nginx.org/en/download.html
b. 使用wget
命令下载(推荐)
。确保系统已经安装了 wget,如果没有安装,执行 yum install -y wget
安装。
1 | cd /home/soft # 我喜欢将东西放到这里 |
② 解压命令
1 | tar -zxvf nginx-1.14.2.tar.gz |
③ 切换至解压后的 nginx 主目录,执行命令
1 | cd nginx-1.14.2 |
④ 进行配置,大多数使用默认配置就行了
1 | ./configure --prefix=/usr/local/nginx # (其中--prefix是指定nginx安装路径) 注意:等号左右不要有空格 |
⑤ 执行命令进行编译安装
1 | make && make install |
⑥ 安装成功后,可以切换到 /usr/local/nginx
目录下,查看内容
1 | [root@iz2ze4lfnjztrjppyfbqo1z nginx]# cd /usr/local/nginx/ |
⑦ 查看版本号(使用nginx操作命令前提条件:必须进入nginx的目录/usr/local/nginx/sbin
)
1 | ./nginx -v |
⑧ 查找安装路径
1 | whereis nginx |
启动
普通启动
切换到 nginx 安装目录的 sbin 目录下,执行:./nginx
nginx 体系结构由 master
进程和其 worker
进程组成。
master 进程读取配置文件,并维护 worker 进程,而 worker 进程则对请求进行实际处理。
nginx 启动后,安装目录下会出现一些 _tmp 结尾的文件,这些是临时文件,不用管。
进行访问,配置文件中默认端口为80
,在浏览器可以看到这样的页面。
通过配置文件启动
1 | # 先进入到sbin目录下关闭nginx |
其中 -c 是指定配置文件,而且配置文件路径必须指定绝对路径
Nginx 常用的命令
启动命令
在 /usr/local/nginx/sbin
目录下执行 ./nginx
或者 ./nginx -c 配置文件路径
关闭命令
在 /usr/local/nginx/sbin
目录下执行 ./nginx -s stop
安全退出命令
在 /usr/local/nginx/sbin
目录下执行 ./nginx -s quit
,比 stop 更安全一点
重新加载命令
在 /usr/local/nginx/sbin
目录下执行 ./nginx -s reload
配置检查
当修改 Nginx 配置文件后,可以使用 Nginx 命令进行配置文件语法检查,用于检查 Nginx 配置文件是否正确
1 | /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf –t |
其它
Linux 上查看 nginx 版本:/usr/local/nginx/sbin/nginx -V
-v
(小写的 v)显示 nginx 的版本
-V
(大写的 V)显示 nginx 的版本、编译器版本和配置参数
Nginx 配置文件
学习 Nginx 首先需要对它的核心配置文件有一定的认识,这个文件位于 Nginx 的安装目录 /usr/local/nginx/conf
目录下,名字为 nginx.conf
根据上述文件,我们可以很明显的将 nginx.conf 配置文件分为三部分。
全局块
从配置文件开始到 events 块之间
的内容,主要会设置一些影响 nginx 服务器整体运行的配置指令,主要包括配置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以及配置文件的引入等。
比如上面第一行配置的:
1 | worker_processes 1; |
这是 Nginx 服务器并发处理服务的关键配置,worker_processes 值越大,可以支持的并发处理量也越多,但是会受到硬件、软件等设备的制约。
events 块
比如上面的配置:
1 | events { |
events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work process 下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 word process 可以同时支持的最大连接数等。
上述例子就表示每个 work process 支持的最大连接数为 1024, 这部分的配置对 Nginx 的性能影响较大,在实际中应该灵活配置。
http 块
http 全局块
http 全局块配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。
server 块
这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本。
每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。
而每个 server 块也分为全局 server 块,以及可以同时包含多个 location 块。
1、全局server块
最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或 IP 配置。
2、location块
一个 server 块可以配置多个 location 块
。
这块的主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string
),对虚拟主机名称(也可以是 IP 别名
)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。
这算是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。
需要注意的是:http 块也可以包括 http全局块
、server块
。
Nginx 部署静态网站
Nginx 是一个 HTTP 的 web 服务器,可以将服务器上的静态文件(如 HTML、图片等)通过 HTTP 协议返回给浏览器客户端。
案例
上传项目
将静态网站部署到 Nginx 服务器上,比如我本地有个静态项目 ace-master 。
通过 Xftp 将 ace-master 上传到 linux 服务器 /opt/static 目录下,为了演示方便,将名字改为 ace 。
修改配置
修改 nginx.conf 配置文件
在 server 中,通过 location 匹配访问的路径,然后转发给静态资源,注意要以分号结尾
重启 nginx 服务器
1 | /usr/local/nginx/sbin/nginx -s reload |
去浏览器访问!通过 http://47.94.217.177 访问即可。
精确匹配
若想通过 http://47.94.217.177/ace 访问,则修改配置文件
重启服务器访问,这样,访问 /ace 的时候就会去 /opt/static 下找 ace 目录,访问 index.html 。
location 中配置路径讲解
初次接触:可能会遇到 404 找不到页面的错误,主要原因是配置路径问题
规则:ip + port 等于 root
,假设 server 的配置如下:
1 | server { |
location匹配顺序
在没有标识符的请求下,匹配规则如下:
1、nginx 服务器首先在 server 块的多个 location 块中搜索是否有标准的 uri 和请求字符串匹配。如果有多个标准 uri 可以匹配,就匹配其中匹配度最高的一个 location。
2、然后,nginx 在使用 location 块中,正则 uri 和请求字符串,进行匹配。如果正则匹配成功,则结束匹配,并使用这个 location 处理请求;如果正则匹配失败,则使用标准 uri 中,匹配度最高的 location。
备注:
1、如果有精确匹配,会先进行精确匹配,匹配成功,立刻返回结果。
2、普通匹配与顺序无关,因为按照匹配的长短来取匹配结果。
3、正则匹配与顺序有关,因为是从上往下匹配。(首先匹配,就结束解析过程)
4、在 location 中,有一种通配的 location,所有的请求,都可以匹配,如下:
1 | location / { |
语法:
1 | location [ = | ~ | ~* | ^~] uri { |
1 | = # 用于不含正则表达式的uri前,要求请求字符串与uri严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求 |
结合标识符,匹配顺序如下:
(location =
) > (location 完整路径
) > (location ^~ 路径
) > (location ~,~* 正则顺序
) > (location 部分起始路径
) > (location /
)
即
(精确匹配
)> (最长字符串匹配,但完全匹配
) >(非正则匹配
)>(正则匹配
)>(最长字符串匹配,不完全匹配
)>(location通配
)
Nginx 应用案例
反向代理
实现效果
使用 nginx 反向代理,根据访问的路径跳转到不同端口的 tomcat 服务中。
nginx 监听端口为 9001。
访问 http://47.94.217.177:9001/edu/ 直接跳转到 47.94.217.177:8081
访问 http://47.94.217.177:9001/vod/ 直接跳转到 47.94.217.177:8082
准备工作
使用 docker 启动两个 tomcat 容器,对外暴露端口,一个 8081 端口,一个 8082 端口
分别创建文件夹 edu 和 vod 和对应 index 页面。
1 | docker run -d -p 8081:8080 --name tomcat01 tomcat:9.0 |
nginx 配置
进入/usr/local/nginx/conf/
目录,修改nginx.conf
文件:
nginx.conf
文件修改格式:
1 | ......... |
开放对外访问的端口号 9001。
如果 nginx 没启动,那么就启动:
1 | cd /usr/local/nginx/sbin/ |
如果 nginx 启动了,那么就让 nginx 重新加载一下配置文件
1 | cd /usr/local/nginx/sbin/ |
负载均衡
实现效果
浏览器地址栏输入地址 http://47.94.217.177/edu/index.html ,负载均衡效果,平均到 8081 和 8082 端口中,
准备工作
使用 docker 启动两个 tomcat 容器,对外暴露端口,一个 8081 端口,一个 8082 端口
两个容器中都创建文件夹 edu 和对应 index.html 页面,index.html 内容要能分辨这两个 tomcat。
1 | docker run -d -p 8081:8080 -v /usr/local/tomcat/webapps8081:/usr/local/tomcat/webapps --name tomcat01 tomcat:9.0 |
负载均衡的配置
1 | http { |
其中 weight=1 表示权重,用于后端服务器性能不均的情况,访问比率约等于权重之比,权重越大访问机会越多。
upstream是配置nginx与后端服务器负载均衡非常重要的一个模块
,并且它还能对后端的服务器的健康状态进行检查,若后端服务器中的一台发生故障,则前端的请求不会转发到该故障的机器。
如果 nginx 没启动,那么就启动:
1 | cd /usr/local/nginx/sbin/ |
如果 nginx 启动了,那么就让 nginx 重新加载一下配置文件
1 | cd /usr/local/nginx/sbin/ |
Nginx 常用负载均衡策略
轮询(默认)
注意:这里的轮询并不是每个请求轮流分配到不同的后端服务器,与ip_hash类似,但是按照访问url的hash结果来分配请求,使得每个url定向到同一个后端服务器,主要应用于后端服务器为缓存时的场景下。
如果后端服务器 down 掉,将自动剔除。
1 | upstream backserver { |
权重
每个请求按一定比例分发到不同的后端服务器,weight 值越大访问的比例越大,用于后端服务器性能不均的情况。
1 | upstream backserver { |
ip_hash
ip_hash 也叫 IP 绑定,每个请求按访问 ip 的 hash 值分配,这样每个访问客户端会固定访问一个后端服务器
,可以解决会话Session丢失
的问题。
算法:hash("124.207.55.82") % 2 = 0, 1
1 | upstream backserver { |
fair (第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配
1 | upstream backserver { |
最少连接
web 请求会被转发到连接数最少的服务器上
1 | upstream backserver { |
负载均衡其他几个配置
1 | upstream backserver { |
1 | upstream backserver { |
一般在项目上线的时候,可以分配部署不同的服务器上,然后对 Nginx 重新 reload。
reload 不会影响用户的访问,或者可以给一个提示页面,系统正在升级…
动静分离
概述
Nginx 的负载均衡和静态代理结合在一起,我们可以实现动静分离,这是实际应用中常见的一种场景。
动态资源,如 jsp 由 tomcat 或其他 web 服务器完成。
静态资源,如图片、css、js 等由 nginx 服务器完成。
它们各司其职,专注于做自己擅长的事情。
动静分离充分利用了它们各自的优势,从而达到更高效合理的架构。
1 | 通过location指定不同的后缀名实现不同的请求转发。通过expires参数设置,可以使浏 |
准备工作
1 | # 在liunx系统中准备静态资源,用于进行访问 |
具体配置
在 nginx 配置文件中进行配置
1 |
|
重启 nginx,测试
1 | http://47.94.217.177:9001/www/a.html |
上图是因为autoindex on
这个设置生效的。
nginx.conf 配置参考
1 | # 安全问题,建议使用nobody,不要用root |
Nginx 配置高可用集群
概述
我们已经可以使用 Nginx 来保证服务的高可用,但是依然有问题,如果 Nginx 出现了单点故障,那么整个服务就将宕机,所以我们可以考虑使用Nginx+Keepalived
来实现集群高可用。
Keepalived 介绍
Keepalived 是一种高性能的服务器高可用或热备解决方案,Keepalived 可以用来防止服务器单点故障的发生,通过配合 Nginx 可以实现 web 前端服务的高可用。
Keepalived 以 VRRP 协议为实现基础,用 VRRP 协议来实现高可用性(HA)。VRRP(Virtual Router Redundancy Protocol)协议用于实现路由器冗余的协议,VRRP 协议将两台或多台路由器设备虚拟成一个设备,对外提供虚拟路由 IP(一个或多个),而在路由器组内部,如果实际拥有这个对外 IP 的路由器工作正常的话就是 MASTER,或者通过算法选举产生,MASTER 实现针对虚拟路由器 IP 的各种网络功能,如 ARP 请求,ICMP 以及数据的转发等,其他设备不拥有该虚拟 IP,状态是 BACKUP,除了接受 MASTER 的 VRRP 状态通告信息完,不执行对外的网络功能。当主机失效的时候,BACKUP 将接管原先 MASTER 的网络功能。
VRRP 协议使用多播数据来传输 VRRP 数据,VRRP 数据使用特殊的虚拟源 MAC 地址发送数据而不是自身网卡的 MAC 地址,VRRP 运行的时候只有 MASTER 路由器定时发送 VRRP 通告信息,表示 MASTER 工作正常以及虚拟路由器 IP(组),BACKUP 只接收 VRRP 数据,不发送数据,如果一定时间内没有接受到 MASTER 的通告信息,各个 BACKUP 将宣告自己成为 MASTER,发送通告信息,重新进行 MASTER 选举。
架构图
机器规划
主机名称 | IP 地址 | 安装软件 |
---|---|---|
Nginx-MASTER(Nginx 的主节点) | 192.168.49.100 | Nginx、Keepalived |
Nginx-BACKUP(Nginx 的从节点) | 192.168.49.101 | Nginx、Keepalived |
Nginx+Keepalived 实现高可用集群
安装 nginx
在 192.168.49.100 和 192.168.49.101 机器上安装 Nginx。
- 为了以示区别,将 192.168.49.100 上的 Nginx 的首页换成 192.168.49.100:
1 | cd /usr/local/nginx/html |
1 | echo "192.168.49.100" > index.html |
- 为了以示区别,将 192.168.49.101 上的 Nginx 的首页换成 192.168.49.101:
1 | cd /usr/local/nginx/html |
1 | echo "192.168.49.101" > index.html |
- 分别启动 192.168.49.100 和 192.168.49.101 上的 Nginx:
1 | cd /usr/local/nginx/sbin |
1 | ./nginx |
安装 Keepalived
wget 方式
- 下载 keeepalived:
1 | wget https://www.keepalived.org/software/keepalived-2.2.1.tar.gz |
- 解压 keeepalived:
1 | tar -zxvf keepalived-2.2.1.tar.gz |
- 进入 keeepalived 的解压目录:
1 | cd keepalived-2.2.1/ |
- 执行
./configure
命令:
1 | ./configure |
- 如果出现了
*** WARNING - this build will not support IPVS with IPv6. Please install libnl/libnl-3 dev libraries to support IPv6 with IPVS
,可以执行如下的命令:
1 | yum -y install libnl libnl-devel libnfnetlink-devel |
1 | ./configure |
- 执行
make && make install
命令:
1 | make && make install |
yum 方式
使用 yum 命令进行安装
1 | $ yum install keepalived -y |
默认安装路径: /etc/keepalived
安装之后,在 etc 里面生成目录 keepalived, 有配置文件 keepalived.conf
配置
- 在 192.168.49.100(主节点)配置 Keepalived:
1 | mkdir -pv /etc/keepalived |
1 | vim /etc/keepalived/keepalived.conf |
1 | ! Configuration File for keepalived |
- 在 192.168.49.101(从节点)配置 Keepalived:
1 | mkdir -pv /etc/keepalived |
1 | vim /etc/keepalived/keepalived.conf |
1 | ! Configuration File for keepalived |
在 192.168.49.100 和 192.168.49.101 上创建 Nginx 的检查脚本:
1
cd /etc/keepalived
1
vim nginx_check.sh
1
2
3
4
5
6
7
8
9
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi1
chmod +x /etc/keepalived/nginx_check.sh
分别启动 192.168.49.100 和 192.168.49.101 上的 Keepalived:
1 | systemctl daemon-reload |
1 | systemctl enable --now keepalived # keepalived启动 |
1 | # 另一种方式 |
- 查看 VIP:
1 | # 在192.168.49.100和192.168.49.101上输入如下的命令 |
- 测试 VIP:
1 | ping 192.168.49.110 -c 4 |
Nginx 的原理
Master && Worker
Nginx 的 Worker 是如何工作的
一个 Master 和多个 Worker 的好处
对于每个 worker 进程来说,独立的进程,不需要枷锁,省略了锁带来的开销,同时在编程以及问题查找时,也会方便很多。
采用独立的进程 ,可以互相之间不会影响,一个进程退出后,其他进程还在工作,服务不会中断,master 进行则可以很快启动新的 worker 进程。当然,worker 进程的异常退出,肯定是程序有 bug 了,异常退出,会导致当前 worer 上的所有请求失败,不过不会影响到所有的请求,降低了风险,这也是我们使用
nginx -s reload
能热部署的原因所在。
设置多少个 worker 合适
worker 数量和服务器的 CPU 数量相等最为合适。
设置 worker 数量:
1 | worker_processes 4 |
- worker 绑定 CPU(4 个 worker 绑定 4 核 CPU)
1 | worker_cpu_affinity 0001 0010 0100 1000 |
- worker 绑定 CPU(4 个 worker 绑定 8 核 CPU 中的 4 个)
1 | worker_cpu_affinity 00000001 00000010 00000100 00001000 |
连接数 worker_connections
发送一个请求,占用了 worker 几个连接数
如果是普通静态访问,是 2 个连接数。
如果是反向代理来说,是 4 个连接数。
并发数
Nginx 有 1 个 Master,有 4 个 worker,每个 worker 支持的最大连接数 1024,支持的最大并发数是多少?
- 如果是普通的静态访问,最大的并发数是:
worker_connections * worker_processes / 2 = 1024 * 4 / 2
。 - 如果作为反向代理来说,最大的并发数是:
worker_connections * worker_processes / 4 = 1024 * 4 / 4
。
发布时间: 2021-01-24
最后更新: 2024-06-24
本文标题: Nginx快速上手
本文链接: https://blog-yilia.xiaojingge.com/posts/1d91c63.html
版权声明: 本作品采用 CC BY-NC-SA 4.0 许可协议进行许可。转载请注明出处!
