Nginx与Apache工作方式

NginX工作原理

Nginx由内核和模块组成,是一个轻量级的web服务器,工作也相对比较简单,通过查找配置文件将客户端请求映射到一个location block(location是Nginx配置中的一个指令,用于URL匹配),而在这个location中所配置的每个指令将会启动不同的模块去完成相应的工作。

Nginx的模块从结构上分为核心模块、基础模块和第三方模块, HTTP模块、EVENT模块和MAIL模块等属于核心模块,HTTP Access模块、HTTP FastCGI模块、HTTP Proxy模块和HTTP Rewrite模块属于基础模块,而HTTP Upstream Request Hash模块、Notice模块和HTTP Access Key模块属于第三方模块,用户根据自己的需要开发的模块都属于第三方模块。正是有了这么多模块的支撑,Nginx的功能才会如此强大。

Nginx工作模式也采用了大多数http服务器做法,分为一个主进程和多个工作进程两种模式。在单工作进程模式下,除主进程外,还有一个工作进程,工作进程是单线程的;在多工作进程模式下,每个工作进程包含多个线程。Nginx默认为单工作进程模式。

Nginx的模块直接被编译进Nginx,因此属于静态编译方式。启动Nginx后,Nginx的模块被自动加载,不像Apache,首先将模块编译为一个so文件,然后在配置文件中指定是否进行加载。在解析配置文件时,Nginx的每个模块都有可能去处理某个请求,但是同一个处理请求只能由一个模块来完成。

Apache工作模式

Prefork模式:多子进程,默认由控制进程建立5个子进程,每个子进程只有一个线程,等待用户的连接,一个子进程在一定时间内独立地处理一个请求,结束后处理下一个请求,如果负载请求超出了预创建的进程数,就会启动额外的进程,最多达到每秒32个,直到满足MinSpareServers设置的值为止。这种模式可以不必在请求到来时再产生新的进程,从而减小了系统开销以增加性能。MaxSpareServers设置了最大的空闲进程数,如果空闲进程数大于这个值,Apache会自动kill掉一些多余进程。

Worker模式:多子进程、多线程,默认由主控制进程生成2个子进程,每个子进程有多个线程,默认的MaxClient最大是256个线程,各个线程在一定时间内独立地处理一个请求。worker MPM要比prefork MPM内存使用少得多,而系统资源的开销要小于基于进程的服务器,如果负载很大,现有的子进程数不能满足时,控制进程会派生新的子进程。

总结:默认是prefork模式,可以用http -l查看当前的工作模式,perfork速度方面稍高于worker,内存和cpu使用率也比worker高许多。

时间: 2025-01-30 08:47:46

Nginx与Apache工作方式的相关文章

如何在 FreeBSD 10.2 上安装 Nginx 作为 Apache 的反向代理

如何在 FreeBSD 10.2 上安装 Nginx 作为 Apache 的反向代理 Nginx 是一款自由开源的 HTTP 和反向代理服务器,也可以用作 POP3/IMAP 的邮件代理服务器.Nginx 是一款高性能的 web 服务器,其特点是功能丰富,结构简单以及内存占用低. 第一个版本由 Igor Sysoev 发布于2002年,到现在有很多大型科技公司在使用,包括 Netflix. Github. Cloudflare. WordPress.com 等等. 在这篇教程里我们会"在 fre

nginx与Apache禁止目录执行php文件权限

服务器配置过程中,经常需要对指定的目录进行权限配置,比如上传目录,是属于不安全目录,我们需要禁止其执行php脚本的权限,nginx与apache禁止目录执行php文件权限方法如下: Nginx禁止目录执行php文件权限 以下配置均在nginx配置的server处添加  代码如下 复制代码 location ~ /attachments/.*.(php|php5)?$ { deny all; } 禁止attachments目录执行php文件权限 2.多个目录  代码如下 复制代码 location

nginx或Apache中禁止目录执行权限

经常会把网站的图片文件上传目录设置为只可上传文件但不能执行文件,就是要禁止执行权限. 本节就为大家介绍nginx上传目录的权限配置.禁止执行权限的方法. Nginx禁止目录执行php文件权限 以下配置均在nginx配置的server处添加  代码如下 复制代码 location ~ /attachments/.*.(php|php5)?$ { deny all; } 禁止attachments目录执行php文件权限 2.多个目录  代码如下 复制代码 location ~ /(attachmen

c++字符集相关,sprintf_s 工作方式

问题描述 c++字符集相关,sprintf_s 工作方式 sprintf_s 是如何进行格式化字符串检查的?在网上看见的例子:iRt = sprintf_s(szA 8%s"" L""和平""); // 乱码四个字节iRt = sprintf_s(szA 8%s""和平""); // 和平iRt = sprintf_s(szA 8%S"" L""和平"&qu

在WIN98下以apache模块方式安装php

在WIN98下以apache模块方式安装php手记 foolboy@chinaren.com ★相关软件:     mod_php4-4.0.1-pl2.zip     php-4.0.1pl2-Win32.zip     以上软件可以在www.php.net或者www.phpuser.com上下载     注意两者的版本一定要一样,     (关键是mod_php4.dll与php4ts.dll及Msvcrt.dll版本相同) ★具体步骤:     用winzip分别将两个.zip文件解压  

武汉SEO:浅析搜索引擎的蜘蛛的工作方式

武汉seo今天想聊聊搜索引擎的蜘蛛的工作方式.先说说搜索引擎的原理吧.搜索引擎是把互联网上的网页内容存在自己的服务器上,当用户搜索某个词的时候,搜索引擎就会在自己的服务器上找相关的内容,这样就是说,只有保存在搜索引擎服务器上的网页才会被搜索到.哪些网页才能被保存到搜索引擎的服务器上呢?只有搜索引擎的网页抓取程序抓到的网页才会保存到搜索引擎的服务器上,这个网页抓取程序就是搜索引擎的蜘蛛.整个过程分为爬行和抓取. 一. 蜘蛛 搜索引擎用来爬行和访问网站页面的程序被称为蜘蛛,也可称之为机器人.蜘蛛访问

使用slb后nginx、apache获取真实ip

  前提是在slb设置中开启了"获取真实ip"的功能. 如果只是需要在程序中获取真实ip 那么只要在程序中获取 HTTP_X_FORWARDED_FOR 的值基本就可以了,不需要下面的操作. 下面的操作可以实现nginx或者apache日志中记录用户真实ip或者在apache.nginx中禁止某些ip 用户访问等. nginx nginx作为slb获取真实ip是使用 http_realip_module,默认一键安装包安装的nginx没有安装这个模块需要重新重新编译nginx并加装.

更贴近业务及用户:交互设计工作方式的转变

引子: 年初时交互设计师与产品经理座谈,议题关于交互设计师应从哪个工作环节切入更能发挥其自身价值.结论是交互随产品经理参与到项目初期需求挖掘阶段,更早的参与了解业务需求及用户需求,与产品经理共同产出PRD(带有用户体验的高保真原型部分由交互设计师着力产出,原型好处:方便用户参与可用性测试.整个产品团队更直观地把握设计要求,优势是显而易见的).取而代之目前项目正式启动,产品经理产出详细的PRD后,交互设计师再参与到项目里参与原型设计,有点迟,能量没能充分释放!另外我们获得了更多机会接触用户,产品实

linux下查看nginx、apache、mysql、php的编译参数

下文我们一起来看一个linux下查看nginx.apache.mysql.php的编译参数例子,希望此例子对各位有帮助. 查看nginx.apache.mysql.php参数我们可以用到 /App/nginx/sbin/nginx -V 查看nginx参数 # cat config.nice 查看apache参数 #cat "/usr/local/mysql/bin/mysqlbug"|grep configure 查看mysql参数 /usr/local/php/bin/php -i