Java——《面试题——Nginx篇》

这篇具有很好参考价值的文章主要介绍了Java——《面试题——Nginx篇》。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

全文章节

Java——《面试题——基础篇》

Java——《面试题——JVM篇》

Java——《面试题——多线程&并发篇》

Java——《面试题——Spring篇》

Java——《面试题——SpringBoot篇》

Java——《面试题——MySQL篇》​​​​​​

Java——《面试题——SpringCloud》

Java——《面试题——Dobbo篇》

Java——《面试题——Nginx篇》

Java——《面试题——MQ篇》

Java——《面试题——Linux篇》

Java——《面试题——Zookeeper篇》

Java——《面试题——Redis篇》

Java——《面试题——分布式篇》

Java——《面试题——网络篇》

Java——《面试题——设计模式篇》

Java——《面试题——maven篇》

Java——《面试题——ElasticSearch篇》

Java——《面试题——tomcat篇》​​​​​​

Java——《面试题——Git篇》

Java——《面试题——软实力篇》

本文目录

                  1、简述一下什么是Nginx,它有什么优势和功能?

2、Nginx是如何处理一个HTTP请求的呢?

3、列举一些Nginx的特性

4、请列举Nginx和Apache 之间的不同点

5、在Nginx中,如何使用未定义的服务器名称来阻止处理请求?

6、请解释Nginx服务器上的Master和Worker进程分别是什么?

7、请解释代理中的正向代理和反向代理

8、解释Nginx用途


1、简述一下什么是Nginx,它有什么优势和功能?

Nginx是一个web服务器和方向代理服务器,用于HTTP、HTTPS、SMTP、POP3和IMAP协议。因 它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。

Nginx---Ngine X,是一款免费的、自由的、开源的、高性能HTTP服务器和反向代理服务器; 也是一个IMAP、POP3、SMTP代理服务器;Nginx以其高性能、稳定性、丰富的功能、简单的 配置和低资源消耗而闻名。

也就是说Nginx本身就可以托管网站(类似于Tomcat一样),进行Http服务处理,也可以作为 反向代理服务器 、负载均衡器和HTTP缓存。

Nginx 解决了服务器的C10K(就是在一秒之内连接客户端的数目为10k即1万)问题。它的设 计不像传统的服务器那样使用线程处理请求,而是一个更加高级的机制—事件驱动机制,是一 种异步事件驱动结构。

 优点:

(1)更快 这表现在两个方面:一方面,在正常情况下,单次请求会得到更快的响应;另一方面, 在高峰期(如有数以万计的并发请求),Nginx可以比其他Web服务器更快地响应请求。

(2)高扩展性,跨平台 Nginx的设计极具扩展性,它完全是由多个不同功能、不同层次、不同类型 且耦合度极低的模块组成。因此,当对某一个模块修复Bug或进行升级时,可以专注于模块自身, 无须在意其他。而且在HTTP模块中,还设计了HTTP过滤器模块:一个正常的HTTP模块在处理完请 求后,会有一串HTTP过滤器模块对请求的结果进行再处理。这样,当我们开发一个新的HTTP模块 时,不但可以使用诸如HTTP核心模块、events模块、log模块等不同层次或者不同类型的模块,还 可以原封不动地复用大量已有的HTTP过滤器模块。这种低耦合度的优秀设计,造就了Nginx庞大的 第三方模块,当然,公开的第三方模块也如官方发布的模块一样容易使用。 Nginx的模块都是嵌入 到二进制文件中执行的,无论官方发布的模块还是第三方模块都是如此。这使得第三方模块一样具 备极其优秀的性能,充分利用Nginx的高并发特性,因此,许多高流量的网站都倾向于开发符合自 己业务特性的定制模块。

(3)高可靠性:用于反向代理,宕机的概率微乎其微 高可靠性是我们选择Nginx的最基本条件,因 为Nginx的可靠性是大家有目共睹的,很多家高流量网站都在核心服务器上大规模使用Nginx。 Nginx的高可靠性来自于其核心框架代码的优秀设计、模块设计的简单性;另外,官方提供的常用 模块都非常稳定,每个worker进程相对独立,master进程在1个worker进程出错时可以快速“拉 起”新的worker子进程提供服务。

(4)低内存消耗 一般情况下,10 000个非活跃的HTTP Keep-Alive连接在Nginx中仅消耗2.5MB的 内存,这是Nginx支持高并发连接的基础。

(5)单机支持10万以上的并发连接 这是一个非常重要的特性!随着互联网的迅猛发展和互联网用 户数量的成倍增长,各大公司、网站都需要应付海量并发请求,一个能够在峰值期顶住10万以上并 发请求的Server,无疑会得到大家的青睐。理论上,Nginx支持的并发连接上限取决于内存,10万 远未封顶。当然,能够及时地处理更多的并发请求,是与业务特点紧密相关的。

(6)热部署 master管理进程与worker工作进程的分离设计,使得Nginx能够提供热部署功能,即 可以在7×24小时不间断服务的前提下,升级Nginx的可执行文件。当然,它也支持不停止服务就更 新配置项、更换日志文件等功能。

(7)最自由的BSD许可协议 这是Nginx可以快速发展的强大动力。BSD许可协议不只是允许用户免 费使用Nginx,它还允许用户在自己的项目中直接使用或修改Nginx源码,然后发布。这吸引了无数 开发者继续为Nginx贡献自己的智慧。 以上7个特点当然不是Nginx的全部,拥有无数个官方功能模 块、第三方功能模块使得Nginx能够满足绝大部分应用场景,这些功能模块间可以叠加以实现更加 强大、复杂的功能,有些模块还支持Nginx与Perl、Lua等脚本语言集成工作,大大提高了开发效 率。这些特点促使用户在寻找一个Web服务器时更多考虑Nginx。 选择Nginx的核心理由还是它能 在支持高并发请求的同时保持高效的服务。

2、Nginx是如何处理一个HTTP请求的呢?

Nginx 是一个高性能的 Web 服务器,能够同时处理大量的并发请求。它结合多进程机制和异步机制 ,异步机制使用的是异步非阻塞方式 ,接下来就给大家介绍一下 Nginx 的多线程机制和异步非阻塞 机制 。

1、多进程机制

服务器每当收到一个客户端时,就有 服务器主进程 ( master process )生成一个 子进程( worker process )出来和客户端建立连接进行交互,直到连接断开,该子进程就结束了。

使用进程的好处是各个进程之间相互独立,不需要加锁,减少了使用锁对性能造成影响,同时降低 编程的复杂度,降低开发成本。其次,采用独立的进程,可以让进程互相之间不会影响 ,如果一个 进程发生异常退出时,其它进程正常工作, master 进程则很快启动新的 worker 进程,确保服务 不会中断,从而将风险降到最低。

缺点是操作系统生成一个子进程需要进行 内存复制等操作,在资源和时间上会产生一定的开销。当 有大量请求时,会导致系统性能下降 。

2、异步非阻塞机制

每个工作进程 使用 异步非阻塞方式 ,可以处理 多个客户端请求 。

当某个 工作进程 接收到客户端的请求以后,调用 IO 进行处理,如果不能立即得到结果,就去 处理 其他请求 (即为 非阻塞 );而 客户端 在此期间也 无需等待响应 ,可以去处理其他事情(即为 异 步 )。

当 IO 返回时,就会通知此 工作进程 ;该进程得到通知,暂时 挂起 当前处理的事务去 响应客户端 请求 。

3、列举一些Nginx的特性

Nginx服务器的特性包括: 

1. 反向代理/L7负载均衡器

2. 嵌入式Perl解释器

3. 动态二进制升级

4. 可用于重新编写URL,具有非常好的PCRE支持

4、请列举Nginx和Apache 之间的不同点

Nginx Apache
1.Nginx 是一个基于web服务器  1.Apache 是一个基于流程的服务器
2.所有请求都由一个线程来处理 2.单线程处理单个请求
3.Nginx避免子进程的概念3. 3.Apache是基于子进程的
4.Nginx类似于速度 4..Apache类似于功率
5.Nginx在内存消耗和连接方面比较好 5..Apache在内存消耗和连接方面并没有提高
6.Nginx在负载均衡方面表现较好 6..Apache当流量达到进程的极限时,apache将拒绝新的连接
7.对于PHP来说,Nginx更可取,因为他支持PHP

7..Apache支持的php python Perl和其他语言,

使用插件,当应用程序基于python和ruby时,它非常有用

8.Nginx 不支持像IBMi 和 openVMS 一样的os 8..Apache支持更多的os
9.Nginx 只具有核心功能 9..Apache 提供了比Nginx更多的功能
10.Nginx 性能和可伸缩性不依赖于硬件 10..Apache 依赖于CPU和内存等硬件组件

5、在Nginx中,如何使用未定义的服务器名称来阻止处理请求?

只需将请求删除的服务器就可以定义为:

Server{
    listen 80;
    server_name "";
    return 444;
}

这里,服务器名被保留为一个空字符串,它将在没有“主机”头字段的情况下匹配请求,而一个特殊 的Nginx的非标准代码444被返回,从而终止连接。

一般推荐 worker 进程数与CPU内核数一致,这样一来不存在大量的子进程生成和管理任务,避免 了进程之间竞争CPU 资源和进程切换的开销。而且 Nginx 为了更好的利用 多核特性 ,提供了 CPU 亲缘性的绑定选项,我们可以将某一个进程绑定在某一个核上,这样就不会因为进程的切换带来 Cache 的失效。

对于每个请求,有且只有一个工作进程 对其处理。首先,每个 worker 进程都是从 master进程 fork 过来。在 master 进程里面,先建立好需要 listen 的 socket(listenfd) 之后,然后再 fork 出 多个 worker 进程。

所有 worker 进程的 listenfd 会在新连接到来时变得可读 ,为保证只有一个进程处理该连接,所有 worker 进程在注册 listenfd 读事件前抢占 accept_mutex ,抢到互斥锁的那个进程注册 listenfd 读 事件 ,在读事件里调用 accept 接受该连接。

当一个 worker 进程在 accept 这个连接之后,就开始读取请求、解析请求、处理请求,产生数据 后,再返回给客户端 ,最后才断开连接。这样一个完整的请求就是这样的了。我们可以看到,一个 请求,完全由 worker 进程来处理,而且只在一个 worker 进程中处理。

在 Nginx 服务器的运行过程中, 主进程和工作进程 需要进程交互。交互依赖于 Socket 实现的管道 来实现。

6、请解释Nginx服务器上的Master和Worker进程分别是什么?

  • 主程序 Master process 启动后,通过一个 for 循环来 接收 和 处理外部信号 ;
  • 主进程通过 fork() 函数产生 worker 子进程 ,每个子进程执行一个 for循环来实现Nginx服务器 对事件的接收和处理 。

7、请解释代理中的正向代理和反向代理

首先,代理服务器一般指局域网内部的机器通过代理服务器发送请求到互联网上的服务器,代理服 务器一般作用在客户端。例如:GoAgent翻墙软件。我们的客户端在进行翻墙操作的时候,我们使 用的正是正向代理,通过正向代理的方式,在我们的客户端运行一个软件,将我们的HTTP请求转发 到其他不同的服务器端,实现请求的分发。

反向代理服务器作用在服务器端,它在服务器端接收客户端的请求,然后将请求分发给具体的服务 器进行处理,然后再将服务器的相应结果反馈给客户端。Nginx就是一个反向代理服务器软件。

从上图可以看出:客户端必须设置正向代理服务器,当然前提是要知道正向代理服务器的IP地址, 还有代理程序的端口。 反向代理正好与正向代理相反,对于客户端而言代理服务器就像是原始服务 器,并且客户端不需要进行任何特别的设置。客户端向反向代理的命名空间(name-space)中的 内容发送普通请求,接着反向代理将判断向何处(原始服务器)转交请求,并将获得的内容返回给 客户端。

8、解释Nginx用途

Nginx服务器的最佳用法是在网络上部署动态HTTP内容,使用SCGI、WSGI应用程序服务器、用于 脚本的FastCGI处理程序。它还可以作为负载均衡器。文章来源地址https://www.toymoban.com/news/detail-502403.html

到了这里,关于Java——《面试题——Nginx篇》的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于Java的新闻全文搜索引擎的设计与实现

    中文摘要 本文以学术研究为目的,针对新闻行业迫切需求和全文搜索引擎技术的优越性,设计并实现了一个针对新闻领域的全文搜索引擎。该搜索引擎通过Scrapy网络爬虫工具获取新闻页面,将新闻内容存储在分布式存储系统HBase中,并利用倒排索引及轮排索引等索引技术对新

    2024年02月14日
    浏览(51)
  • Java轻量级全文检索引擎Lucene使用及优化

    Lucene是一个开源的全文检索引擎工具包由Doug Cutting编写。它被设计用于实现全文搜索功能,即读入一堆文本文件并将其转换为易于搜索的数据结构。Lucene提供了一组简单而强大的API,使得索引和搜索过程变得非常方便。 Lucene广泛应用于从1200万站点中进行互联网搜索等搜索引

    2024年02月16日
    浏览(54)
  • Java调用Elasticsearch API实现全文检索,搭配MinIO文件存储

    应用背景: 对存储在MinIO服务器的文件实现全文检索。也可以是其他服务器或本地文件,本文仅详细介绍MinIO文件的读取及转换。通过Elasticsearch的Ingest-Attachment插件抽取文件内容,支持Word、Excel、PDF、TXT等格式文件,无需手动解析文件内容。 上代码,详细解释可以阅读注释、

    2024年02月11日
    浏览(44)
  • 【Nginx】Nginx面试题

    Nginx是一个 轻量级/高性能的反向代理Web服务器,用于 HTTP、HTTPS、SMTP、POP3 和 IMAP 协议。他实现非常高效的反向代理、负载平衡,他可以处理2-3万并发连接数,官方监测能支持5万并发,现在中国使用nginx网站用户有很多,例如:新浪、网易、 腾讯等。 跨平台、配置简单。 非

    2024年02月05日
    浏览(35)
  • 基于Java开发的全文检索、知识图谱、工作流审批机制的知识库

    一、项目介绍 一款全源码,可二开,可基于云部署、私有部署的企业级知识库云平台,应用在需要进行常用文档整理、分类、归集、检索的地方,适合知识密集型单位/历史文档丰富的单位,或者大型企业、集团。 为什么建立知识库平台? 二、项目所用技术 springboot+vue+tiny

    2023年04月26日
    浏览(37)
  • Tomcat面试题+http面试题+Nginx面试题+常见面试题

    1、Tomcat的缺省端口是多少?怎么修改? 答:缺省端口是8080,若要修改,可以进入Tomcat的安装目录下找到conf目录下的server.xml文件,找到该文件中的Connector字段中的port。 2、Tomcat有哪几种connector运行模式(服务的请求方式)? 答:三种。修改它的运行模式需要在主配置文件中

    2023年04月10日
    浏览(44)
  • Nginx面试题

    从单机架构到集群架构的转变,需要一个实现负载均衡和反向代理功能的软件,加上nginx可以非常轻松的解决掉很多前端常见的需求,比如gzip压缩,跨域等等问题,所以选择了ng。 面试官: 你说到了单机架构到集群架构,单机架构有有什么缺点,让你们产生这样的架构转变。

    2024年02月14日
    浏览(27)
  • Nginx:常见的面试题和答案

    1. 什么是Nginx? 答:Nginx是一款高性能的Web服务器和反向代理服务器,用于HTTP、HTTPS、SMTP、POP3和IMAP协议,同时用于处理高并发的请求,提供快速、可靠的服务。 2. Nginx的优点是什么? Nginx的优点包括: 高性能:Nginx采用异步非阻塞的方式处理请求,可以处理高并发的请求;

    2024年02月01日
    浏览(79)
  • 面试:谈一下你对Nginx的理解

    Nginx是什么 :Nginx是一个高性能、开源的Web服务器和反向代理服务器,以其卓越的性能和可扩展性而闻名。它通常用于将客户端请求转发到后端服务器、提供静态文件服务和负载均衡。 高性能和高并发 :Nginx的异步事件驱动架构使其能够有效地处理大量并发连接和请求,而不

    2024年02月10日
    浏览(43)
  • Nginx的优化和防盗链(面试高频!!!)

    修改配置文件时,先备份!!!以便回滚!!! nginx页面优化 一、隐藏版本号: 方法一:修改配置文件 在http模块中,添加一个命令: 方法二:在源码包中修改(达到混淆入侵者的目的) 二、nginx的日志分割: 因为nginx不带日志分割工具,所以需要使用脚本形式来进行日志

    2024年02月14日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包