斗破小说 > 都市 > 蓝星文娱:从微末崛起的娱乐大亨 > 第二十二章:Nginx使用篇的核心15问《Java编程与面试2024》

第二十二章:Nginx使用篇的核心15问《Java编程与面试2024》(1 / 1)

本期主题:

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操作。

......

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

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

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

最新小说: 寒门崛起 退烧 啥?开学他就拿下校花了 你一个首富,亲自给顾客开车门? 共妻 拒绝你表白,你把我闺蜜捡回家? 重回1991 最强桃运傻医 村色撩人 你真当我是舔狗?