最新网址:sk.x3qdu.com

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

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

下面,让我来具体说说…

实际上,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