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

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

    本期主题:

    3天掌握《Java编程与面试2024》的核心篇章15问,即Nginx使用篇:SpringBoot+SpringCloud的核心15问。

    下面,先来介绍一下,本篇章的核心19问:

    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)作为httpserver(代替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{

    listen80;

    server_name““;

    return444;

    }

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

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

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

    …

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

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

    语法:merge_slashes[onoff];

    默认值:merge_slasheson;

    环境: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-sstop或nginx-squit。

    重载配置.sbinnginx-sreload(平滑重启)或servicenginxreload。

    重载指定配置文件.nginx-cusrlocanf。

    查看nginx版本nginx-v。

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

    显示帮助信息nginx-h。

    …

    13、Nginx常用配置?

    worker_processes8;#工作进程个数

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

    error_logdatalogsnginxerror.log;#错误日志打印地址

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

    log_formatmain'$remote_addr$request''$status$upstream_addr

    $request_time';#进入日志格式

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

    fastcgi_connect_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_buffers464k;#指定本地需要多少和多大的缓冲区来缓冲fastcgi应答请求…

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

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

    listen80;#监听端口

    server_namerrc.test.;#允许域名

    rootdatareleaserrcweb;#项目根目录

    indexindex.phpindex.htmlindex.htm;#访问根文件

    …

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

    (1)Stub_status指令

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

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

    (2)Sub_filter指令

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

    …

    15、主从Reactor多线程模型?

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

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

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

    将新创建的SocketChannel,注册到IO线程池(subreactor线程池)的某个IO线程上;

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

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

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

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

    ......

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

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

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