这样数据就可以从套接字读取,在该实例中读取到缓冲区并进行处理。

且单个线程可以提供数万个并发连接。

下面,让我来具体说说…

实际上,Nginx处理HTTP请求的过程…

是一个复杂而高效的操作,它涉及到多个阶段和模块。

Nginx处理HTTP请求的“六部曲”,即…

接收请求,解析请求,访问URI,反向代理和负载均衡,处理动态请求,记录日志。

1)接收请求

Nginx使用监听器,来接收客户端发送的HTTP请求。

监听器会绑定到一个特定的端口上,并等待客户端的连接请求。

一旦有新的连接到达,监听器会创建一个连接对象…

并将这个连接对象,放入连接池中等待处理。

2)解析请求

当Nginx从连接池中,取出一个连接对象时…

它会开始读取,该连接对象中的请求数据。

这个过程包括解析请求行、请求头和请求体。

请求行,包含了HTTP方法(如GET、POST等)、请求的URI以及HTTP协议的版本信息。

请求头,则包含了客户端发送的各种元数据和请求参数。

请求体,通常用于POST请求,包含了客户端提交的数据。

3)访问URI

解析完请求后,Nginx会根据请求的URI,来决定如何处理这个请求。

如果请求的URI,对应的是静态文件…

Nginx会直接从文件系统中读取这个文件,并将其作为响应返回给客户端。

如果请求的URI,对应的是动态内容…

Nginx则需要将请求,转发给后端服务器进行处理。

4)反向代理和负载均衡

如果请求需要由后端服务器处理…

Nginx会作为反向代理服务器,将请求转发给后端服务器。

在这个过程中,Nginx还可以使用负载均衡算法…

将请求分发到多个后端服务器上;

以充分利用这些服务器的资源,提高系统的吞吐量和可靠性。

5)处理动态请求

对于需要动态生成内容的请求…

Nginx会将请求转发给后端服务器(如PHP、Python、Java等应用服务器)来处理。

后端服务器,会根据请求的内容,生成相应的响应,然后将响应返回给Nginx。

Nginx再将这个响应,封装成一个HTTP响应对象,发送给客户端。

6)记录日志

在处理完请求后,Nginx会记录相关的访问日志和错误日志。

这些日志,可以帮助管理员了解服务器的运行状态,以及分析和优化性能。

在整个处理过程中,Nginx使用了“事件驱动的模型”来同时处理多个请求。

这种模型,使得Nginx能够高效地处理并发请求,提供高性能的Web服务。

此外,Nginx还允许通过配置和扩展模块…

来支持更多的功能和优化策略,以满足不同的业务需求。

8、在Nginx中,如何使用未定义的服务器名称,来阻止处理请求的?

只需将请求删除的服务器就可以定义为:

Server {

listen 80;

server_name““;

return 444;

}

这里,服务器名被保留为一个空字符串…

它将在没有“主机”头字段的情况下,匹配请求。

而一个特殊的Nginx的非标准代码444,被返回,从而终止连接。

9、在Nginx中,如何在URL中保留双斜线?

要在URL中保留双斜线,就必须使用“merge_slashes_off;”。

语法:merge_slashes [onoff];

默认值:merge_slashes on;

环境:http,server

10、ngx_http_upstream_module的作用是什么?

ngx_http_upstream_module用于定义可通过fastcgi传递、proxy传递、uwsgi传递、 memcached传递和scgi传递指令,来引用的服务器组。

11、fastcgi与cgi的区别?

1)cgi

web服务器会根据请求的内容,然后会 fork一个新进程来运行外部 c程序(或 perl脚本…)。

这个进程,会把处理完的数据,返回给 web服务器。

最后 web服务器,把内容发送给用户,刚才 fork的进程,也随之退出。

如果下次用户还请求改动态脚本…

那么 web服务器,又再次 fork一个新进程,周而复始的进行。

2)fastcgi

web服务器收到一个请求时,他不会重新 fork一个进程(因为这个进程在 web服务器启动时就开启了,而且不会退出)。

web服务器,直接把内容传递给这个进程(进程间通信,但 fastcgi使用了别的方式,tcp方式通信)。

这个进程收到请求后进行处理,把结果返回给 web服务器…

最后自己接着等待下一个请求的到来,而不是退出。

综上所述,fastcgi与cgi的差别,就在于是否重复 fork进程,处理请求。

12、Nginx常用命令?

启动 nginx。

停止 nginx -s stop或 nginx -s quit。

重载配置.sbinnginx -s reload(平滑重启)或 serviginx reload。

重载指定配置文件.nginx -c usrloginxginx.f。

查看 nginx版本 nginx -v。

检查配置文件是否正确 nginx -t。

显示帮助信息 nginx -h。

13、Nginx常用配置?

worker_processes 8;#工作进程个数

worker_es 65535;#每个工作进程能并发处理(发起)的最大连接数(包含所有连接数)

err datalogsnginxerr;#错误日志打印地址

access_log datalogsnginxaccess.log;#进入日志打印地址

log_format main '$remote_addr$request ''$status $upstream_addr

$request_time';#进入日志格式

##如果未使用 fastcgi功能的,可以无视

fastcgi_ect_timeout=300;#连接到后端 fastcgi超时时间

fastcgi_send_timeout=300;#向 fastcgi请求超时时间(这个指定值,已经完成两次握手后,向fastcgi传送请求的超时时间)

fastcgi_rend_timeout=300;#接收 fastcgi应答超时时间,同理也是2次握手后

fastcgi_buffer_size=64k;#读取 fastcgi应答第一部分需要多大缓冲区,该值表示使用 1个64kb的缓冲区读取应答第一部分(应答头)…

可以设置为fastcgi_buffers选项缓冲区大小

fastcgi_buffers 4 64k;#指定本地需要多少和多大的缓冲区来缓冲fastcgi应答请求…

假设一个php或java脚本所产生页面大小为256kb,那么会为其分配4个64kb的缓冲来缓存

fastcgi_cache TEST;#开启fastcgi缓存并为其指定为TEST名称,降低cpu负载,防止502错误发生

listen 80;#监听端口

server_name rrc.test.jiedaibao.;#允许域名

root datareleaserrcweb;#项目根目录

index index.php iml im;#访问根文件

14、请陈述stub_status和sub_filter指令的作用是什么?

(1)Stub_status指令

该指令用于了解Nginx当前状态的当前状态…

如当前的活动连接,接受和处理当前读写等待连接的总数。

(2)Sub_filter指令

它用于搜索和替换响应中的内容,并快速修复陈旧的数据。

15、主从 Reactor多线程模型?

服务端用于接收客户端连接的,不再是个1个单独的 NIO线程…

而是一个独立的 NIO线程池。

Acceptor接收到客户端 TCP连接请求,处理完成后(可能包含接入认证等)…

将新创建的Socketel,注册到 IO线程池(sub reactor线程池)的某个 IO线程上;

由它负责Socketel的读写和编解码工作。

Acceptor线程池,仅仅只用于客户端的登陆、握手和安全认证…

一旦链路建立成功,就将链路注册到后端 subReactor线程池的 IO线程上;

由 IO线程负责后续的 IO操作。

......

以上,就是今天的分享啦!

希望,对你的求职面试,编程工作有那么一点点、一丢丢、一戳戳地帮助哈~

喜欢我分享的,就一键三连于我,可好?!

本章已完 m.3qdu.com