本期主题:
3天掌握《Java编程与面试2024》的核心篇章15问,即Nginx使用篇:SpringBoot+SpringCloud的核心15问。
下面,先来介绍一下,本篇章的核心19问:
第二章【Nginx使用篇:SpringBoot+SpringCloud】(15问)
1、请解释一下,什么是 Nginx?
2、为什么要用Nginx?
3、Nginx的优缺点?
4、Nginx应用场景?
5、使用“反向代理服务器”的优点是什么?
6、请列举Nginx服务器的最佳用途?
7、请解释下,Nginx是如何处理HTTP请求的?
8、在Nginx中,如何使用未定义的服务器名称,来阻止处理请求的?
9、在Nginx中,如何在URL中保留双斜线?
10、ngx_http_upstream_module的作用是什么?
11、fastcgi与cgi的区别?
12、Nginx常用命令?
13、Nginx常用配置?
14、请陈述stub_status和sub_filter指令的作用是什么?
15、主从 Reactor多线程模型?
...…
【Nginx使用篇:SpringBoot+SpringCloud】
1、请解释一下,什么是 Nginx?
Nginx,是一个 Web服务器和反向代理服务器,用于 HTTP、HTTPS、SMTP、POP3和 IMAP协议。
目前是被使用最多的 Web服务器,代理服务器...
像淘宝、新浪、网易、迅雷等,都在使用。
Nginx的主要功能如下:
(1)作为 http server (代替 Apache
对 PHP需要 FastCGI处理器支持)。
(2)FastCGI
Nginx本身不支持 PHP等语言...
但是它,可以通过 FastCGI来将请求,扔给某些语言或框架处理。
(3)反向代理服务器
(4)实现负载均衡
(5)虚拟主机
...
2、为什么要用Nginx?
因为Nginx具有:
跨平台,配置简单,反向代理,缓存服务,邮件代理服务器...
高并发连接数,内存消耗小,拥有健康检查功能...
节省宽带,稳定性高,接受请求异步等优秀的特性。
下面,就让我来具体说说Nginx的一些优秀特点吧!
高并发连接数:
Nginx处理2-3万并发连接数,官方监测能支持5万并发。
内存消耗小:
开启10个nginx,才占150M内存;
Nginx处理静态文件效果好,耗费内存少。
健康检查功能:
Nginx内置了健康检查功能;
当有一个服务器宕机时,就会做一个健康检查...
之后再发送的请求,就不会发送到宕机的服务器了;
而是,重新将请求,提交到其它的节点上。
节省宽带:
支持GZIP压缩,可以添加浏览器本地缓存。
稳定性高:
宕机的概率非常小。
接受请求异步:
即接收的用户请求,是异步的。
...
3、Nginx的优缺点?
优点:
占内存小,可实现高并发连接,处理响应快…
可实现http服务器、虚拟主机、方向代理、负载均衡。
Nginx的配置简单,还可以不暴露正式的服务器IP地址。
缺点:
动态处理差。
Nginx处理静态文件好,耗费内存少…
但是处理动态页面则很鸡肋,因为现在一般前端用Nginx作为反向代理抗住压力。
…
4、Nginx应用场景?
1)http服务器
Nginx是一个http服务,可以独立提供http服务。
可以做网页静态服务器。
2)虚拟主机
它可以实现,在一台服务器虚拟出多个网站,例如个人网站使用的虚拟机。
3)反向代理与负载均衡
当网站的访问量,达到一定程度后,单台服务器不能满足用户的请求时…
就需要用多台服务器集群,可以使用Nginx做反向代理。
并且多台服务器,可以平均分担负载…
不会因为某台服务器负载高而宕机。
4)Nginx中也可以配置安全管理
比如可以使用Nginx搭建API接口网关,对每个接口服务进行拦截。
…
5、使用“反向代理服务器”的优点是什么?
反向代理服务器,可以隐藏源服务器的存在和特征。
它充当互联网云和web服务器之间的中间层。
这对于安全方面来说是很好的,特别是当您使用web托管服务时。
…
6、请列举Nginx服务器的最佳用途?
Nginx服务器,是一种高性能的HTTP和反向代理服务器…
它具有丰富的功能和广泛的应用场景。
Nginx服务器的7个最佳用途…
即静态HTTP服务器,负载均衡,虚拟主机,邮件代理服务器,性能优化,安全性,高并发与高稳定性。
1)静态HTTP服务器
Nginx可以将服务器上的静态文件(如HTML、图片、CSS、JavaScript等)…
通过HTTP协议,高效地展现给客户端。
2)负载均衡
当网站访问量非常大时,可以将同一个应用部署在多台服务器上。
Nginx通过反向代理的方式,实现负载均衡…
将大量用户的请求,分配给多台机器处理。
这不仅可以提高网站的响应速度,还增强了系统的可用性和可靠性。
在负载均衡过程中,Nginx可以灵活配置各种负载均衡算法,来满足不同的业务需求。
3)虚拟主机
对于访问量较小的网站…
Nginx支持在同一台服务器上,部署多个网站,从而通过虚拟主机的方式,来节省成本。
4)邮件代理服务器
Nginx也是一个非常优秀的邮件代理服务器…
可以处理邮件相关的任务,如SMTP、POP3和IMAP等。
5)性能优化
Nginx提供了多种性能优化策略,如启用缓存、压缩响应、启用TCP缓冲、启用HTTP2等。
这些策略,可以显著提高网站的性能,减少网络传输数据量,加快页面响应速度。
6)安全性
尽管Nginx本身具有一些安全漏洞,但通过合理配置和更新,可以大大提高网站的安全性。
例如…
可以限制缓存文件的大小和时间,设置验证规则以验证数据是否被篡改,从而加强缓存安全。
7)高并发与高稳定性
Nginx以高速、高并发、高稳定性著称。
其内部的事件驱动架构,以及采用异步非阻塞方式,去处理客户端请求的特点…
使得在高并发请求下,Nginx依然能够保持稳定性。
这使得Nginx,成为了处理大量并发连接的理想选择…
尤其适用于,大型高负载的Web应用程序、云计算、物联网等领域。
总的来说:
Nginx服务器在Web服务、负载均衡、性能优化、安全性和稳定性等方面都有出色的表现。
Nginx是构建高效、可靠和安全的网络应用的理想选择。
然而,具体的最佳用途,可能因应用场景和需求的不同而有所差异。
因此在实际使用中,我们需要根据具体情况,去进行配置和优化。
…
7、请解释下,Nginx是如何处理HTTP请求的?
因为Nginx使用了“反应器模式”。
主事件循环,等待操作系统发出准备事件的信号…
这样数据就可以从套接字读取,在该实例中读取到缓冲区并进行处理。
且单个线程可以提供数万个并发连接。
下面,让我来具体说说…
实际上,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;#错误日志打印地址
ess_log datalogsnginxess.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线程池。
eptor接收到客户端 TCP连接请求,处理完成后(可能包含接入认证等)…
将新创建的Socketel,注册到 IO线程池(sub reactor线程池)的某个 IO线程上;
由它负责Socketel的读写和编解码工作。
eptor线程池,仅仅只用于客户端的登陆、握手和安全认证…
一旦链路建立成功,就将链路注册到后端 subReactor线程池的 IO线程上;
由 IO线程负责后续的 IO操作。
......
以上,就是今天的分享啦!
希望,对你的求职面试,编程工作有那么一点点、一丢丢、一戳戳地帮助哈~
喜欢我分享的,就一键三连于我,可好?!