这样数据就可以从套接字读取,在该实例中读取到缓冲区并进行处理。
且单个线程可以提供数万个并发连接。
下面,让我来具体说说…
实际上,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