当前位置: 首页 > article >正文

Nginx面试宝典【刷题系列】

文章目录

    • 1、nginx是如何实现高并发的?
    • 2、Nginx如何处理HTTP请求?
    • 3、使用“反向代理服务器”的优点是什么?
    • 4、列举Nginx服务器的最佳用途。
    • 5、Nginx服务器上的Master和Worker进程分别是什么?
    • 6、什么是C10K问题?
    • 7、请陈述stub_status和sub_filter指令的作用是什么?
    • 8、为什么不使用多线程?
    • 9、为什么要做动、静分离?
    • 10、ngx_http_upstream_module的作用是什么?


在这里插入图片描述

1、nginx是如何实现高并发的?

答:一个主进程,多个工作进程,每个工作进程可以处理多个请求,每进来一个request,会有一个 worker 进程去处理。但不是全程的处理,处理到可能发生阻塞的地方,比如向上游(后端)服务器转发 request ,并等待请求返回。那么,这个处理的 worker 继续处理其他请求,而一旦上游服务器返回了,就会触发这个事件,worker 才会来接手,这个 request 才会接着往下走。由于 web server 的工作性质决定了每个 request 的大部份生命都是在网络传输中,实际上花费在 server 机器上的时间片不多。这是几个进程就解决高并发的秘密所在。即 @skoo 所说的 webserver 刚好属于网络 io 密集型应用,不算是计算密集型。

2、Nginx如何处理HTTP请求?

答:Nginx 使用反应器模式。主事件循环等待操作系统发出准备事件的信号,这样数据就可以从套接字读取,在该实例中读取到缓冲区并进行处理。单个线程可以提供数万个并发连接。

3、使用“反向代理服务器”的优点是什么?

答:反向代理服务器可以隐藏源服务器的存在和特征。它充当互联网云和 web 服务器之间的中间层。这对于安全方面来说是很好的,特别是当您使用 web 托管服务时。

4、列举Nginx服务器的最佳用途。

答:Nginx 服务器的最佳用法是在网络上部署动态 HTTP 内容,使用 SCGIWSGI 应用程序服务器、用于脚本的 FastCGI 处理程序。它还可以作为负载均衡器。

5、Nginx服务器上的Master和Worker进程分别是什么?

答:Master 进程:读取及评估配置和维持 ;Worker 进程:处理请求。

6、什么是C10K问题?

答:C10K 问题是指无法同时处理大量客户端(10,000)的网络套接字。

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

答:

  1. Stub_status 指令:该指令用于了解 Nginx 当前状态的当前状态,如当前的活动连接,接受和处理当前读/写/等待连接的总数 ;
  2. Sub_filter 指令:它用于搜索和替换响应中的内容,并快速修复陈旧的数据

8、为什么不使用多线程?

答:Nginx采用单线程来异步非阻塞处理请求(管理员可以配置 Nginx 主进程的工作进程的数量),不会为每个请求分配 cpu 和内存资源,节省了大量资源,同时也减少了大量的 CPU 的上下文切换,所以才使得 Nginx 支持更高的并发。

9、为什么要做动、静分离?

答:在我们的软件开发中,有些请求是需要后台处理的(如:.jsp,.do等等),有些请求是不需要经过后台处理的(如:css、html、jpg、js 等等),这些不需要经过后台处理的文件称为静态文件,否则动态文件。因此我们后台处理忽略静态文件,但是如果直接忽略静态文件的话,后台的请求次数就明显增多了。

在我们对资源的响应速度有要求的时候,应该使用这种动静分离的策略去解决动、静分离将网站静态资源(HTML,JavaScript,CSS 等)与后台应用分开部署,提高用户访问静态代码的速度,降低对后台应用访问。这里将静态资源放到 nginx 中,动态资源转发到 tomcat (opens new window)服务器中,毕竟 Tomcat 的优势是处理动态请求。

10、ngx_http_upstream_module的作用是什么?

答:要在 URL 中保留双斜线,就必须使用 merge_slashes_off

  • 语法:merge_slashes [on/off]
  • 默认值: merge_slashes on
  • 环境: http,server

http://www.kler.cn/a/563756.html

相关文章:

  • Python----数据分析(Numpy一:numpy库简介,与list列表的区别,数组的创建,随机数组的创建)
  • 从零到一:如何用阿里云百炼和火山引擎搭建专属 AI 助手(DeepSeek)?
  • 支持selenium的chrome driver更新到133.0.6943.126
  • AIGC生图技术剖析:文本生成图像的核心算法与创新应用
  • 音频模拟信号转数字信号的原理
  • 基于Elasticsearch的日志管理:提升运维效率的新利器
  • 2025年2月科技趋势深度解析:大模型竞赛、硬件革命与可持续AI的未来
  • 【HTML】SVG标签的使用方式
  • Kotlin 2.1.0 入门教程(二十五)类型擦除
  • sqli-
  • 本地部署 DeepSeek-R1大模型详细教程(桌面客户端美观UI)
  • 序列化是什么?常见的序列化方式有哪些?什么时候我们会用到序列化?
  • 【STM32】玩转IIC之驱动MPU6050及姿态解算
  • 解决PyCharm工程中pip版本和python中的pip版本不一致
  • 基于 spring boot+vue 的仓储管理系统 的设计与实现
  • 自然语言处理:初识自然语言处理
  • C++ 正则表达式分组捕获入门指南
  • 在vscode中编译运行c语言文件,配置并运行OpenMP多线程并行程序设计
  • 爬虫抓取数据时如何处理异常?
  • C++类与对象深度解析(二):从const 、new 、delete到函数操作符与友元函数的编程实践