Nginx:常见的面试题和答案

news2024/11/26 4:32:59

1. 什么是Nginx?

答:Nginx是一款高性能的Web服务器和反向代理服务器,用于HTTP、HTTPS、SMTP、POP3和IMAP协议,同时用于处理高并发的请求,提供快速、可靠的服务。

2. Nginx的优点是什么?

Nginx的优点包括:

  • 高性能:Nginx采用异步非阻塞的方式处理请求,可以处理高并发的请求;
  • 可扩展性:Nginx支持动态模块化,可以根据需要添加或删除模块;
  • 可靠性:Nginx具有良好的稳定性和可靠性,能够保证服务的连续性;
  • 灵活性:Nginx支持多种协议和数据格式,可以用于不同的应用场景。

3. Nginx的配置文件是什么?

答:Nginx的配置文件是nginx.conf文件,通常位于/etc/nginx目录下。配置文件包括全局配置、http配置和server配置等部分,可以用来设置Nginx的运行参数、监听端口、代理规则等。

4. Nginx如何处理静态文件?

答:Nginx可以通过配置静态文件目录来处理静态文件,具体步骤如下:
在nginx.conf文件中配置静态文件目录,例如:

location /static/ {
    root /var/www/;
}
  • 将静态文件放置在指定的目录下,例如/var/www/static/;
  • 通过访问http://localhost/static/filename的方式来访问静态文件。

5. Nginx如何处理动态请求?

答:Nginx可以通过反向代理的方式处理动态请求,具体步骤如下:
在nginx.conf文件中配置代理规则,例如:

location /api/ {
    proxy_pass http://localhost:8080/;
}
  • 将动态请求转发到指定的端口,例如http://localhost:8080/;
  • 在指定的端口上启动相应的应用程序,用于处理动态请求。

6. Nginx如何进行负载均衡?

答:Nginx可以通过配置upstream模块来进行负载均衡,具体步骤如下:

在nginx.conf文件中配置upstream模块,例如:

upstream backend {
    server backend1.example.com weight=5;
    server backend2.example.com;
    server backend3.example.com;
}

将请求转发到指定的upstream组,例如:

location /api/ {
    proxy_pass http://backend/;
}

Nginx会自动将请求均衡地分配到多个服务器上,从而实现负载均衡。

7. Nginx如何进行HTTPS配置?

答:Nginx可以通过配置SSL模块来进行HTTPS配置,具体步骤如下:

在nginx.conf文件中配置SSL证书和密钥,例如:

ssl_certificate /path/to/ssl.crt;
ssl_certificate_key /path/to/ssl.key;

在server配置中添加SSL配置,例如:

server {
    listen 443 ssl;
    server_name example.com;
    ...
}

重新加载Nginx配置文件,使配置生效。

8. Nginx如何进行缓存配置?

答:Nginx可以通过配置缓存模块来进行缓存配置,具体步骤如下:

在nginx.conf文件中配置缓存目录,例如:

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m;

在location配置中添加缓存配置,例如:

location /api/ {
    proxy_cache my_cache;
    proxy_cache_key $uri$is_args$args;
    proxy_cache_valid 200 60m;
}

Nginx会自动将请求的结果缓存到指定的目录中,从而提高访问速度。

9. 请列举 Nginx 的一些特性。

  • Nginx 服务器的特性包括:
  • 反向代理/L7 负载均衡器
  • 嵌入式 Perl 解释器
  • 动态二进制升级
  • 可用于重新编写 URL,具有非常好的 PCRE 支持

10. 请解释 ngx_http_upstream_module 的作用是什么?

答:ngx_http_upstream_module 用于定义可通过 fastcgi 传递、proxy 传递、uwsgi传递、memcached 传递和 scgi 传递指令来引用的服务器组。

11. 请解释什么是C10K问题?

答:C10K问题是指无法同时处理大量客户端(10,000)的网络套接字。
从网络编程技术的角度来说,主要思路为:

  • 为每个连接分配一个独立的线程/进程。
  • 同一个线程/进程同时处理多个连接(IO 多路复用)

12. 请陈述stub_status和sub_filter指令的作用是什么?

答:Stub_status指令:该指令用于了解Nginx当前状态的当前状态,如当前的活动连接,接受和处理当前读/写/等待连接的总数

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

13. 用Nginx服务器解释-s的目的是什么?

答:用于运行Nginx -s参数的可执行文件。

14. 解释如何在 Nginx 中获得当前的时间?

答:要获得 Nginx 的当前时间,必须使用 SSI 模块、 d a t e g m t 和 date_gmt 和 dategmtdate_local 的变
量。

Proxy_set_header THE-TIME $date_gmt;

15. 解释 Nginx 是否支持将请求压缩到上游?

答:您可以使用 Nginx 模块 gunzip 将请求压缩到上游。gunzip 模块是一个过滤器,
它可以对不支持“gzip”编码方法的客户机或服务器使用“内容编码:gzip”来解压缩响应。

16. 为什么不使用多线程?

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

17. Nginx的进程模型

答:master-worker模式 在master-worker模式下,有一个master进程和至少一个的worker进程。
单进程模式。 单进程模式只有一个进程

18. 为什么Nginx性能这么高?

答:因为它的事件处理机制:异步非阻塞事件处理机制运用了epoll模型,提供了一个队列,排队解决。

19. 为什么要做动静分离?

  • Nginx是当下最热的Web容器,网站优化的重要点在于静态化网站,网站静态化的关键点则是是动静分离,动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们则根据静态资源的特点将其做缓存操作。
  • 让静态的资源只走静态资源服务器,动态的走动态的服务器。
  • Nginx的静态处理能力很强,但是动态处理能力不足,因此,在企业中常用动静分离技术。
  • 对于静态资源比如图片,js,css等文件,我们则在反向代理服务器nginx中进行缓存。这样浏览器在请求一个静态资源时,代理服务器nginx就可以直接处理,无需将请求转发给后端服务器tomcat。 若用户请求的动态文件,比如servlet,jsp则转发给Tomcat服务器处理,从而实现动静分离。这也是反向代理服务器的一个重要的作用。

20. 什么叫CDN服务?

答:CDN ,即内容分发网络。其目的是,通过在现有的 Internet中 增加一层新的网络架构,将网站的内容发布到最接近用户的网络边缘,使用户可就近取得所需的内容,提高用户访问网站的速度。一般来说,因为现在 CDN 服务比较大众,所以基本所有公司都会使用 CDN 服务。

21. Nginx负载均衡的算法怎么实现的?策略有哪些?

为了避免服务器崩溃,大家会通过负载均衡的方式来分担服务器压力。将对台服务器组成一个集群,当用户访问时,先访问到一个转发服务器,再由转发服务器将访问分发到压力更小的服务器。

Nginx负载均衡实现的策略有以下五种:

  • 轮询(默认)

    每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某个服务器宕机,能自动剔除故障系统。

upstream backserver { 
 server 192.168.31.12; 
 server 192.168.31.13; 
} 
  • 权重 weight

    weight的值越大,分配到的访问概率越高,主要用于后端每台服务器性能不均衡的情况下。其次是为在主从的情况下设置不同的权值,达到合理有效的地利用主机资源。

权重越高,在被访问的概率越大,如上例,分别是20%,80%。

upstream backserver { 
 server 192.168.0.12 weight=2; 
 server 192.168.0.13 weight=8; 
} 
  • ip_hash( IP绑定)
    每个请求按访问IP的哈希结果分配,使来自同一个IP的访客固定访问一台后端服务器,并且可以有效解决动态网页存在的session共享问题
upstream backserver { 
 ip_hash; 
 server 192.168.0.12:88; 
 server 192.168.0.13:80; 
} 
  • fair(第三方插件)
    必须安装upstream_fair模块。

对比 weight、ip_hash更加智能的负载均衡算法,fair算法可以根据页面大小和加载时间长短智能地进行负载均衡,响应时间短的优先分配。

哪个服务器的响应速度快,就将请求分配到那个服务器上。

upstream backserver { 
 server server1; 
 server server2; 
 fair; 
} 
  • url_hash(第三方插件)
    必须安装Nginx的hash软件包

按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率。

upstream backserver { 
 server squid1:3128; 
 server squid2:3128; 
 hash $request_uri; 
 hash_method crc32; 
} 

22. Nginx限流怎么做的?

答:Nginx限流就是限制用户请求速度,防止服务器受不了,限流有3种:

  • 正常限制访问频率(正常流量)
  • 突发限制访问频率(突发流量)
  • 限制并发连接数
    Nginx的限流都是基于漏桶流算法

23. Nginx常见的优化配置有哪些?

  • 调整worker_processes
    指Nginx要生成的worker数量,最佳实践是每个CPU运行1个工作进程。

了解系统中的CPU核心数,输入:

$ grep processor / proc / cpuinfo | wc -401
  • 最大化worker_connections
    Nginx Web服务器可以同时提供服务的客户端数。与worker_processes结合使用时,获得每秒可以服务的最大客户端数
最大客户端数/秒=工作进程*工作者连接数

为了最大化Nginx的全部潜力,应将工作者连接设置为核心一次可以运行的允许的最大进程数1024。

  • 启用Gzip压缩
    压缩文件大小,减少了客户端http的传输带宽,因此提高了页面加载速度

建议的gzip配置示例如下:( 在http部分内)

gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 1;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text / plain text / css application / json application / javascript text / xml application / xml + rss text / javascript;
  • 为静态文件启用缓存
    为静态文件启用缓存,以减少带宽并提高性能,可以添加下面的命令,限定计算机缓存网页的静态文件:
location ~* .(jpg|jpeg|png|gif|ico|css|js)$ {
expires 365d;
}
  • Timeouts
    keepalive连接减少了打开和关闭连接所需的CPU和网络开销,获得最佳性能需要调整的变量可参考:
client_body_timeout 12;
client_header_timeout 12;
keepalive_timeout 15;
send_timeout 10;
  • 禁用access_logs
    访问日志记录,它记录每个nginx请求,因此消耗了大量CPU资源,从而降低了nginx性能。

完全禁用访问日志记录

access_log off;

如果必须具有访问日志记录,则启用访问日志缓冲

access_log /var/log/nginx/access.log buffer = 4096k

24. Nginx与Apache选择?

Apache

  • apache 的 rewrite 比 nginx 强大,在 rewrite 频繁的情况下,用 apache

  • apache 发展到现在,模块超多,基本想到的都可以找到

  • apache 更为成熟,少 bug ,nginx 的 bug 相对较多

  • apache 超稳定

  • apache 对 PHP 支持比较简单,nginx 需要配合其他后端用

  • apache 在处理动态请求有优势,nginx 在这方面是鸡肋,一般动态请求要 apache 去做,nginx 适合静态和反向。

  • apache 仍然是目前的主流,拥有丰富的特性,成熟的技术和开发社区

Nginx

  • 轻量级,采用 C 语言 进行编写,同样的 web 服务,会占用更少的内存及资源

  • 抗并发,nginx 以 epoll and kqueue 作为开发模型,处理请求是异步非阻塞的,负载能力比 apache 高很多,而 apache 则是阻塞型的。在高并发下 nginx 能保持低资源低消耗高性能 ,而 apache 在 PHP 处理慢或者前端压力很大的情况下,很容易出现进程数飙升,从而拒绝服务的现象。

  • nginx 处理静态文件好,静态处理性能比 apache 高三倍以上

  • nginx 的设计高度模块化,编写模块相对简单

  • nginx 配置简洁,正则配置让很多事情变得简单,而且改完配置能使用 -t 测试配置有没有问题,apache 配置复杂 ,重启的时候发现配置出错了,会很崩溃

  • nginx 作为负载均衡服务器,支持 7 层负载均衡

  • nginx 本身就是一个反向代理服务器,而且可以作为非常优秀的邮件代理服务器

  • 启动特别容易, 并且几乎可以做到 7*24 不间断运行,即使运行数个月也不需要重新启动,还能够不间断服务的情况下进行软件版本的升级

  • 社区活跃,各种高性能模块出品迅速

25. Nginx IO模型

答:Nginx 支持多种并发模型,并发模型的具体实现根据系统平台而有所不同。在支持多种并发模型的平台上,Nginx 自动选择最高效的模型。但我们也可以使用 use 指令在配置文件中显式地定义某个并发模型。

Nginx中支持的并发模型:

  • select
    IO 多路复用、标准并发模型。在编译 Nginx 时,如果所使用的系统平台没有更高效的并发模型,select 模块将被自动编译。configure 脚本的选项:–with-select_module 和 --without-select_module 可被用来强制性地开启或禁止 select 模块的编译。

  • poll
    IO 多路复用、标准并发模型。与 select 类似,在编译 Nginx 时,如果所使用的系统平台没有更高效的并发模型,poll 模块将被自动编译。configure 脚本的选项:–with-poll_module 和 --without-poll_module 可用于强制性地开启或禁止 poll 模块的编译。

  • epoll
    IO 多路复用、高效并发模型,可在 Linux 2.6+ 及以上内核可以使用。

  • kqueue
    IO 多路复用、高效并发模型,可在 FreeBSD 4.1+, OpenBSD 2.9+, NetBSD 2.0, and Mac OS X 平台中使用。

  • /dev/poll
    高效并发模型,可在 Solaris 7 11/99+, HP/UX 11.22+ (eventport), IRIX 6.5.15+, and Tru64 UNIX 5.1A+ 平台使用。

  • eventport
    高效并发模型,可用于 Solaris 10 平台,PS:由于一些已知的问题,建议使用/dev/poll替代。
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/475673.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【BeautifulSoup上】——05全栈开发——如桃花来

目录索引 介绍:解析库: 安装:pip install BeautifulSoup4pip install lxml 标签选择器:1.string属性:.name属性:获取标签中的属性值: 实用——标准选择器:使用find_all()根据标签名查…

五、C++内存管理机制 —— primitives(侯捷)

侯捷 C八部曲笔记汇总 - - - 持续更新 ! ! ! 一、C 面向对象高级开发 1、C面向对象高级编程(上) 2、C面向对象高级编程(下) 二、STL 标准库和泛型编程 1、分配器、序列式容器 2、关联式容器 3、迭代器、 算法、仿函数 4、适配器、补充 三、C 设计模式 四、C 新标准 五、C 内存管…

2023-04-29 动态规划介绍

2023-04-29 动态规划介绍 动态规划是运筹学课程的一部分 多阶段决策问题 有一类活动的过程,可以分成若干个互相联系的阶段,在它的每一阶段都需要作出决策,从而使整个过程达到最好的活动效果 当然,每个阶段的决策的选取不是任意确…

dc-6靶机

1.使用nmap进行信息搜集,存活主机,端口 192.168.85.184是存活主机,发现开放22,80端口 2.访问192.168.85.184的80端口 发现被重定向了,修改hosts文件 vim /etc/hosts 添加一行 192.168.85.174 wordy3.对网站进行信息搜…

彻底解决 Lost connection to MySQL server at ‘reading initial communication packet’, system error: 0 解决方法

当我遇到这错误的时候,我去网上也找过对应解决方法,出现这个的原因有很多种情况 大多是解决Linux系统里的 我是windows系统里的MySQL服务出问题了,所有那些方法对我来说毫无意义. 好了,说一下我的解决办法,其实也很简单 只需要卸载mysql服务,注册表也要删干净,也要把环境变…

C的文件操作

🐖前言 🐕1.为什们我们要用文件 在我们之前写程序时,如果使用scanf函数用键盘输入数据,这些东西都放到内存当中,一旦退出程序,那么这些数据就会消失,比如就像我们写的通讯录,不管是…

Shiro相关知识

1、Shiro功能概述 Apache Shiro是一个功能强大且易于使用的 Java 安全框架,可执行身份验证、授权、加密和会话管理。 主要功能: Authentication:身份认证。登录时验证身份信息。 Authorization:授权操作。访问控制的过程&…

CSS布局基础(标签类型,盒子模型)

布局基础 元素显示类型,盒子模型 标签类型块元素常见块元素 行内元素常见行内元素 行内块元素常见行内块 模式转换显示类型显著区别 盒子模型盒子组成布局描述边框圆角 内边距外边距块元素居中盒子内行内(块)元素居中 外边距使用陷阱两盒子外…

【进阶C语言】动态版通讯录的实现(详细讲解+全部码源)

前言 📕作者简介:热爱跑步的恒川,致力于C/C、Java、Python等多编程语言,热爱跑步,喜爱音乐的一位博主。 📗本文收录于C语言进阶系列,本专栏主要内容为数据的存储、指针的进阶、字符串和内存函数…

Linux基础IO【重定向及缓冲区理解】

✨个人主页: 北 海 🎉所属专栏: Linux学习之旅 🎃操作环境: CentOS 7.6 阿里云远程服务器 文章目录 🌇前言🏙️正文1、文件描述符1.1、先描述,再组织1.2、files_struct1.3、分配规则…

Java数组的学习(基础)

目录 第一章:数组的概念介绍 1.数组的概念 2.数组的初始化/数组的创建/数组的定义 第二章:数组的使用 数组添加元素的方法/数组的赋值 数组的遍历 数组之选择排序的升序 数组之冒泡排序的升序 数组的最小值 数组的反转 数组中常见的异常 第三…

Python程序员想要转行,可以从这几个方面着手

最近有很多朋友问我一个问题,不论是我们做程序员还是做产品经理或者其他行业,到了30岁或35岁之后,都会面临各种各样的问题,比如达到职业天花板。有没有一种方法能够解决这种问题呢?我想分享一下我的观点和身边的案例。…

《Netty》从零开始学netty源码(四十七)之PooledByteBuf的方法

setBytes() 从channel中读取数据并写到PooledByteBuf中,分配缓存的过程与getBytes一样,只是duplicate为false。 capacity() 动态更新容量,根据新传入的容量值更改length。 如果新容量值与旧值相同则无需扩容如果为非池化内存则根据新容量值…

Zabbix部署详解

文章目录 Zabbix安装部署一、zabbix-server端部署二、zabbix-agent端部署 Zabbix安装部署 环境准备 VMware Workstation Pro 15.0 版本 系统 Centos7 内存 4G 处理器 2G 硬盘 50G 网络适配器 NAT 两台服务器,一台做zabbix-server、一台做zabbix-agent 关闭防火墙、…

【华为OD机试真题】信号发射和接收(javaC++python)100%通过率 超详细代码注释

信号发射和接收 知识点数组栈 单调栈时间限制: 1s 空间限制: 256MB 限定语言:不限 题目描述: 有一个二维的天线矩阵,每根天线可以向其他天线发射信号也能接收其他天线的信号,为了简化起见,我们约定每根天线只能向东和向南发射信号,换言之,每根天线只能接收东向或南向发…

unity-VRTK-simulator开发学习日记2(抛物线 导包|使用|调用方法)

导包 使用抛物线 1.层级目录下添加抛物线曲线 2.将跟踪控制器 给到抛物线的“跟随资源” (选择哪只手射出射线) 3.激活按键 找到模拟手柄按键 找到simulator的交互的几个按键(ButtonOne为例) value,默认值为false&a…

Doris(20):Doris的函数—数学函数

1 查看函数名 show builtin functions in test_db; 2 abs(double a) 功能: 返回参数的绝对值 返回类型:double类型 使用说明:使用该函数需要确保函数的返回值是整数。 3 acos(double a) 功能: 返回参数的反余弦值 返回类型:double类型 MySQL 中反余弦函数 ACOS(…

【五一创作】使用Scala二次开发Spark3.3.0实现对MySQL的upsert操作

使用Scala二次开发Spark实现对MySQL的upsert操作 背景 在我们的数仓升级项目中,遇到了这样的场景:古人开发的任务是使用DataStage运算后,按照主键【或者多个字段拼接的唯一键】来做insert then update,顾名思义,也就…

能上网的ChatGPT,会带来什么改变

最近关注AI的人,应该会注意到这条新闻。 ChatGPT官方推出新模式—Default(GPT-3.5)with browsing 这个是之前ChatGPT没有的功能,ChatGPT以前的训练数据是在2021年左右,并不知道最近的新闻。 现在ChatGPT 能够联网以…

AIGC提词生成图片(人物照片)练习笔记

文生图, 图生图 等 AIGC 创作大火, 也来体验一下吧. 本文记录了环境搭建过程与使用心得. 如果动手能力弱或只想省心, 有 环境要求 列出来我的环境吧: CPU, AMD Ryzen 7 5800X 8-Core ProcessorRAM, 32GGPU, NVIDIA GeForce RTX 2070 SUPER (8G)OS, Windows 11 专业版开发环境…