首页 > 编程知识 正文

nginx原理和架构,php-fpm工作原理

时间:2023-05-04 21:39:14 阅读:16177 作者:4694

1、Nginx如何处理一个要求? 首先,nginx在启动时分析配置文件,获取监听的端口和ip地址,并在nginx的master进程中

初始化此监视的套接字后,进行listen

然后,fork发出多个子进程,子进程冲突accept的新连接。

此时,客户端可以开始连接到nginx。 在客户端与nginx握手三次并建立与nginx的连接后

此时,子进程成功接受,并封装nginx对连接,即创建ngx_connection_t结构

然后,根据事件,调用相应的事件处理模块(如http模块)与客户端交换数据。

最后,nginx或客户端主动关闭连接。 现在,一个连接在寿命结束

2.nginx如何实现高并发性,一个主流程、多个工作流程,每个工作流程可以处理多个请求

每次请求进来时,工作器进程都会处理。 但是,它将请求传输到上游(后端)服务器,并处理到可能发生块的位置,而不是整个过程,例如等待请求的返回。 现在,此操作的工作器将继续处理其他请求,并在上游服务器返回时触发此事件,工作器将会来接管,然后此请求继续。

由于web server的工作性质,每个request的大部分生命都在网络传输中,实际上在服务器机器上花费的时间片很少。 这是一些过程解决高并发性的秘密。 也就是说,@skoo所说的web服务器正好是网络io密集型APP应用,而不是计算密集型。

为什么nginx不使用多线程? Apache:创建多个进程或线程,每个进程或线程为其分配cpu和内存。 因为线程远远小于进程,所以工作器支持比perfork更高的并发。 此外,他还出席过大会,榨取服务器资源。

Nginx:使用单线程异步处理请求。 管理员可以配置Nginx主进程的工作机数量。 (epoll )大大节省了资源,也大大减少了cpu上下文开关,而无需为每个请求分配cpu和内存资源。 因此,Nginx支持更高的并发。

为什么Nginx性能这么高? 什么是epoll模型的异步无阻塞事件处理机制:利用epoll (直接告诉cpu在该流中发生了什么,而不进行忙轮询或无差别轮询)模型提供队列并等待解决。

请说明Nginx服务器上的Master和Worker进程。 nginx启动后有主进程和多个工作器进程。

主进程主要用于管理工作器进程,它接收外部信号,向每个工作器进程发出信号,监视工作器进程的运行状态,并在工作器进程异常终止时自动重新启动新的工作器进程

基本的internet事件被放在工作器进程中处理。 多个工作器进程是对等的,它们同等竞争客户端的请求,每个进程都是独立的。 一个请求只能由一个工作器进程处理,而一个工作器进程不能处理其他进程的请求。 虽然可以设置工作器进程的数量,但通常将其设置为与计算机上的cpu内核数量相匹配。 这是因为无法将nginx流程模型与事件处理模型分离。 nginx的流程模型可以用下图表示。

nginx的优缺点和apache的对比为什么要使用nginx?

好处:

1、作为Web服务器,Nginx处理静态文件、索引文件,自动索引的效率非常高

2、作为代理服务器,Nginx可以实现无缓存反向代理的加速,提高网站运行速度

3、作为负载均衡服务器,Nginx在内部直接支持Rails和PHP或HTTP代理服务器的对外服务,同时支持利用简单容错和算法的负载均衡

4、性能方面,Nginx是专门针对性能优化开发的,实现时非常重视效率。 它采用内核轮询模式,支持更多并发连接,支持最多5万个并发连接数的响应,最大限度地减少内存资源

5、在稳定性方面,Nginx采用分级资源分配技术,使CPU和内存的占有率非常低。 Nginx官方表示,由于Nginx保持1万个不活动的连接,这些连接仅占用2.5MB的内存,因此类似DOS的攻击对Nginx基本上没有任何帮助

6、在高可用性方面,Nginx支持热部署,启动速度特别快,可以在不中断服务的情况下升级软件版本和配置,运行几个月也不需要重新启动,几乎可以7x24小时不间断运行

7、内置体检功能:一台服务器停机,进行体检,请求重发不发送到停机服务器。 向另一个节点重新发送请求。

Nginx VS Apache

同一点:

1、均为HTTP服务器软件

2、功能上均采用模块化结构设计

3、支持PHP、Perl、Python等通用语言接口

4、支持前馈、反向代理、虚拟主机、URL重写、压缩传输、SSL加密传输

不同之处:

1、Apache处理速度慢,占用很多内存资源

2、功能上,Apache的所有模块都支持动态静态编译,Nginx模块为静态编译

3、Fcgi支持: Apache支持较差

,Nginx支持非常好
4、处理连接方式:Nginx支持epoll,Apache不支持
5、空间使用上:Nginx安装包仅几百K
6、抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能


nginx使用:
5、在Nginx中,如何使用未定义的服务器名称来阻止处理请求?
只需将请求删除的服务器就可以定义为:
Server {
listen 80;
server_name “ “ ;
return 444;
}
这里,服务器名被保留为一个空字符串,它将在没有“主机”头字段的情况下匹配请求,而一个特殊的Nginx的非标准代码444被返回,从而终止连接。


请解释是否有可能将Nginx的错误替换为502错误、503?
502 =错误网关
503 =服务器超载
有可能,但是您可以确保fastcgi_intercept_errors被设置为ON,并使用错误页面指令。
Location / {
fastcgi_pass 127.0.01:9001;
fastcgi_intercept_errors on;
error_page 502 =503/error_page.html;
#…

6、解释如何在Nginx中获得当前的时间?
要获得Nginx的当前时间,必须使用SSI模块、$date_gmt和$date_local的变量。
Proxy_set_header THE-TIME $date_gmt;

7、用Nginx服务器解释-s的目的是什么?
用于运行Nginx -s参数的可执行文件。

8、解释如何在Nginx服务器上添加模块?
在编译过程中,必须选择Nginx模块,因为Nginx不支持模块的运行时间选择。

9、解释Nginx是否支持将请求压缩到上游?
您可以使用Nginx模块gunzip将请求压缩到上游。gunzip模块是一个过滤器,它可以对不支持“gzip”编码方法的客户机或服务器使用“内容编码:gzip”来解压缩响应。

11、在Nginx中,解释如何在URL中保留双斜线?
要在URL中保留双斜线,就必须使用merge_slashes_off;
语法:merge_slashes [on/off]
默认值: merge_slashes on
环境: http,server


12、请解释ngx_http_upstream_module的作用是什么?
ngx_http_upstream_module用于定义可通过fastcgi传递、proxy传递、uwsgi传递、memcached传递和scgi传递指令来引用的服务器组。

13、请解释什么是C10K问题?
C10K问题是指无法同时处理大量客户端(10,000)的网络套接字。

14、请陈述stub_status和sub_filter指令的作用是什么?
Stub_status指令:该指令用于了解Nginx当前状态,如当前的活动连接,接受和处理当前读/写/等待连接的总数
Sub_filter指令:它用于搜索和替换响应中的内容,并快速修复陈旧的数据

15.fastcgi与cgi是什么?fastcgi与cgi的区别
cgi:
web服务器会根据请求的内容,然后会fork一个新进程来运行外部c程序(或perl脚本...), 这个进程会把处理完的数据返回给web服务器,最后web服务器把内容发送给用户,刚才fork的进程也随之退出。 如果下次用户还请求改动态脚本,那么web服务器又再次fork一个新进程,周而复始的进行。
fastcgi:
web服务器收到一个请求时,他不会重新fork一个进程(因为这个进程在web服务器启动时就开启了,而且不会退出),web服务器直接把内容传递给这个进程(进程间通信,但fastcgi使用了别的方式,tcp方式通信),这个进程收到请求后进行处理,把结果返回给web服务器,最后自己接着等待下一个请求的到来,而不是退出。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。